redis集群是带状态的集群,所以必须等所有实例启动完成后再次执行命令构建集群。
开启集群的配置文件模板 redis.tmpl
port ${PORT}
requirepass root
masterauth root
protected-mode no
daemonize no
appendonly yes
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 15000
cluster-announce-ip 10.249.2.45
cluster-announce-port ${PORT}
cluster-announce-bus-port 1${PORT}
使用命令创建出不同实例文件夹,并替换配置文件的端口号,复制到每个文件夹中
for port in `seq 7001 7006`; do \
mkdir -p ${port}/conf \
&& PORT=${port} envsubst < redis.tmpl > ${port}/conf/redis.conf \
&& mkdir -p ${port}/data;\
done
执行完成后生产如下文件夹
编写docker-compose.yml,因为容器中ip无法固定,会产生漂移所以官方推荐使用host网络模式来使用宿主机ip。
version: '2'
services:
redis1:
image: redis:5.0.5
network_mode: "host"
container_name: redis-7001
restart: always
ports:
- 7001:7001
- 17001:17001
volumes:
- /home/redis/7001/data:/data
- /home/redis/7001/conf/redis.conf:/usr/local/etc/redis/redis.conf
command:
redis-server /usr/local/etc/redis/redis.conf
redis2:
image: redis:5.0.5
network_mode: "host"
container_name: redis-7002
restart: always
ports:
- 7002:7002
- 17002:17002
volumes:
- /home/redis/7002/data:/data
- /home/redis/7002/conf/redis.conf:/usr/local/etc/redis/redis.conf
command:
redis-server /usr/local/etc/redis/redis.conf
redis3:
image: redis:5.0.5
network_mode: "host"
container_name: redis-7003
restart: always
ports:
- 7003:7003
- 17003:17003
volumes:
- /home/redis/7003/data:/data
- /home/redis/7003/conf/redis.conf:/usr/local/etc/redis/redis.conf
command:
redis-server /usr/local/etc/redis/redis.conf
redis4:
image: redis:5.0.5
network_mode: "host"
container_name: redis-7004
restart: always
ports:
- 7004:7004
- 17004:17004
volumes:
- /home/redis/7004/data:/data
- /home/redis/7004/conf/redis.conf:/usr/local/etc/redis/redis.conf
command:
redis-server /usr/local/etc/redis/redis.conf
redis5:
image: redis:5.0.5
network_mode: "host"
container_name: redis-7005
restart: always
ports:
- 7005:7005
- 17005:17005
volumes:
- /home/redis/7005/data:/data
- /home/redis/7005/conf/redis.conf:/usr/local/etc/redis/redis.conf
command:
redis-server /usr/local/etc/redis/redis.conf
redis6:
image: redis:5.0.5
network_mode: "host"
container_name: redis-7006
restart: always
ports:
- 7006:7006
- 17006:17006
volumes:
- /home/redis/7006/data:/data
- /home/redis/7006/conf/redis.conf:/usr/local/etc/redis/redis.conf
command:
redis-server /usr/local/etc/redis/redis.conf
启动实例
docker-compose up -d
查看日志全部启动成功
docker-compose logs
查看状态
docker-compose ps
创建集群
#进入容器
docker exec -it redis-7001 bash
#容器内执行
redis-cli -a root --cluster create 10.249.2.45:7001 10.249.2.45:7002 10.249.2.45:7003 10.249.2.45:7004 10.249.2.45:7005 10.249.2.45:7006 --cluster-replicas 1
执行完命令得到以下反馈
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
>>> Performing hash slots allocation on 6 nodes...
Master[0] -> Slots 0 - 5460
Master[1] -> Slots 5461 - 10922
Master[2] -> Slots 10923 - 16383
Adding replica 10.249.2.45:7005 to 10.249.2.45:7001
Adding replica 10.249.2.45:7006 to 10.249.2.45:7002
Adding replica 10.249.2.45:7004 to 10.249.2.45:7003
>>> Trying to optimize slaves allocation for anti-affinity
[WARNING] Some slaves are in the same host as their master
M: 765c445619e0180016e71fc0bff018d5fb804fb3 10.249.2.45:7001
slots:[0-5460] (5461 slots) master
M: 9a15141a4d67f16320be24c379303937c47f987c 10.249.2.45:7002
slots:[5461-10922] (5462 slots) master
M: cd48471e2e1b459989a832ef7ddb8990a5a257bf 10.249.2.45:7003
slots:[10923-16383] (5461 slots) master
S: 2eba1f8f7351240e840bc1cb32ee88fb2f10dd26 10.249.2.45:7004
replicates cd48471e2e1b459989a832ef7ddb8990a5a257bf
S: 65d5ba0934766c02af20b1fe28c42ec1cea15eab 10.249.2.45:7005
replicates 765c445619e0180016e71fc0bff018d5fb804fb3
S: 299e39f4a88f3f7c44d043a284c6329c2d26e5f6 10.249.2.45:7006
replicates 9a15141a4d67f16320be24c379303937c47f987c
Can I set the above configuration? (type 'yes' to accept):
输入yes完成集群创建
Can I set the above configuration? (type 'yes' to accept): yes
>>> Nodes configuration updated
>>> Assign a different config epoch to each node
>>> Sending CLUSTER MEET messages to join the cluster
Waiting for the cluster to join
....
>>> Performing Cluster Check (using node 10.249.2.45:7001)
M: 765c445619e0180016e71fc0bff018d5fb804fb3 10.249.2.45:7001
slots:[0-5460] (5461 slots) master
1 additional replica(s)
S: 299e39f4a88f3f7c44d043a284c6329c2d26e5f6 10.249.2.45:7006
slots: (0 slots) slave
replicates 9a15141a4d67f16320be24c379303937c47f987c
M: cd48471e2e1b459989a832ef7ddb8990a5a257bf 10.249.2.45:7003
slots:[10923-16383] (5461 slots) master
1 additional replica(s)
M: 9a15141a4d67f16320be24c379303937c47f987c 10.249.2.45:7002
slots:[5461-10922] (5462 slots) master
1 additional replica(s)
S: 2eba1f8f7351240e840bc1cb32ee88fb2f10dd26 10.249.2.45:7004
slots: (0 slots) slave
replicates cd48471e2e1b459989a832ef7ddb8990a5a257bf
S: 65d5ba0934766c02af20b1fe28c42ec1cea15eab 10.249.2.45:7005
slots: (0 slots) slave
replicates 765c445619e0180016e71fc0bff018d5fb804fb3
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
参考
https://www.cnblogs.com/mrhelloworld/p/docker14.html