创建网卡
docker network create redis --subnet 172.38.0.0/16
通过脚本创建6个redis配置
for port in $(seq 1 6);
do
mkdir -p /mydata/redis/node-${port}/conf
touch /mydata/redis/node-${port}/conf/redis.conf
cat << EOF >/mydata/redis/node-${port}/conf/redis.conf
port 6379
bind 0.0.0.0
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
cluster-announce-ip 172.38.0.1${port}
cluster-announce-port 6379
cluster-announce-bus-port 6379
appendonly yes
EOF
done
配置参数说明:
cluster-enabled
cluster-config-file
cluster-node-timeout
cluster-announce-ip:集群节点的汇报ip,防止nat,预先填写为网关ip后续需要手动修改配置文件
cluster-announce-port:集群节点的汇报port,防止nat
cluster-announce-bus-port:集群节点的汇报bus-port,防止nat
appendonly: yes(开启aof),no (关闭aof)
启动节点
#批量启动
docker run -p 637${port}:6379 -p 1637${port}:16379 --name redis-${port}
-v /mydata/redis/node-${port}/data:/data
-v /mydata/redis/node-${port}/conf/redis.conf:/etc/redis/redis.conf
-d --net redis --ip 172.38.0.1${port} redis:5.0.9-alpine3.11 redis-server /etc/redis/redis.conf;
#一个一个启动
docker run -p 6371:6379 -p 16371:16379 --name redis-1
-v /mydata/redis/node-1/data:/data
-v /mydata/redis/node-1/conf/redis.conf:/etc/redis/redis.conf
-d --net redis --ip 172.38.0.11 redis:5.0.9-alpine3.11 redis-server /etc/redis/redis.conf;
docker run -p 6376:6379 -p 16376:16379 --name redis-6
-v /mydata/redis/node-6/data:/data
-v /mydata/redis/node-6/conf/redis.conf:/etc/redis/redis.conf
-d --net redis --ip 172.38.0.16 redis:5.0.9-alpine3.11 redis-server /etc/redis/redis.conf;
启动 redis-1结果如下:
查看是否启动成功
[root@iZwz9geewjuo2sogidqn50Z /]# docker ps ConTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 64fddecc80c6 redis:5.0.9-alpine3.11 "docker-entrypoint.s…" 36 seconds ago Up 35 seconds 0.0.0.0:6371->6379/tcp, 0.0.0.0:16371->16379/tcp redis-1
redis-1节点启动成功!
接下来依次启动其他几个节点
#redis-2节点 [root@iZwz9geewjuo2sogidqn50Z /]# docker run -p 6372:6379 -p 16372:16379 --name redis-2 > -v /mydata/redis/node-2/data:/data > -v /mydata/redis/node-2/conf/redis.conf:/etc/redis/redis.conf > -d --net redis --ip 172.38.0.12 redis:5.0.9-alpine3.11 redis-server /etc/redis/redis. conf; e60c714cbf80914946e010b048df10046a351903a591c5d98f706c5443dd0672 #redis-3节点 [root@iZwz9geewjuo2sogidqn50Z /]# docker run -p 6373:6379 -p 16373:16379 --name redis-3 > -v /mydata/redis/node-3/data:/data > -v /mydata/redis/node-3/conf/redis.conf:/etc/redis/redis.conf > -d --net redis --ip 172.38.0.13 redis:5.0.9-alpine3.11 redis-server /etc/redis/redis. conf; cdf64342a9b58e8254a1560264e0a748bbb04ac3020b54eaca42ebb9b3c28599 #redis-4节点 [root@iZwz9geewjuo2sogidqn50Z /]# docker run -p 6374:6379 -p 16374:16379 --name redis-4 > -v /mydata/redis/node-4/data:/data > -v /mydata/redis/node-4/conf/redis.conf:/etc/redis/redis.conf > -d --net redis --ip 172.38.0.14 redis:5.0.9-alpine3.11 redis-server /etc/redis/redis. conf; b495b0918aa3fde6b927d33da69eab563a3f9cab1377934d9023d6a4b04d2488 #redis-5节点 [root@iZwz9geewjuo2sogidqn50Z /]# docker run -p 6375:6379 -p 16375:16379 --name redis-5 > -v /mydata/redis/node-5/data:/data > -v /mydata/redis/node-5/conf/redis.conf:/etc/redis/redis.conf > -d --net redis --ip 172.38.0.15 redis:5.0.9-alpine3.11 redis-server /etc/redis/redis. conf; 59b42a4d168af41f8c77b2b614f5548720986af5fe7e66e4c21b278124e2b358 #redis-6节点 [root@iZwz9geewjuo2sogidqn50Z /]# docker run -p 6376:6379 -p 16376:16379 --name redis-6 > -v /mydata/redis/node-6/data:/data > -v /mydata/redis/node-6/conf/redis.conf:/etc/redis/redis.conf > -d --net redis --ip 172.38.0.16 redis:5.0.9-alpine3.11 redis-server /etc/redis/redis. conf; 2222471644ecececb0f4126aa8cd72f697ced4ef5b41f6a68f914cfadcfc4e42
docker ps -a 查看启动的服务
redis-1,redis-2,redis-3,redis-4,redis-5,redis-6等6个服务都启动成功。
创建集群
redis-cli --cluster create 172.38.0.11:6379 172.38.0.12:6379 172.38.0.13:6379 172.38.0.14:6379 172.38.0.15:6379 172.38.0.16:6379 --cluster-replicas 1
下面是创建集群的操作:
①首先查看下每个节点下面的nodes.conf 文件的内容(观察下初始化nodes.conf文件的配置,集群创建成功之后又有什么变化),如下:
redis-1节点:
[root@iZwz9geewjuo2sogidqn50Z /]# docker exec -it redis-1 /bin/sh /data # ls appendonly.aof nodes.conf /data # cat nodes.conf 7f87f23a6ed7c1d9c41518ef4befee0f901ed214 :0@0 myself,master - 0 0 0 connected vars currentEpoch 0 lastVoteEpoch 0
redis-2节点:
[root@iZwz9geewjuo2sogidqn50Z /]# docker exec -it redis-2 /bin/sh /data # ls appendonly.aof nodes.conf /data # cat nodes.conf 0e0a36ac7312d29aa6aafedf83fcb0a74308d099 :0@0 myself,master - 0 0 0 connected vars currentEpoch 0 lastVoteEpoch 0
redis-3节点:
[root@iZwz9geewjuo2sogidqn50Z ~]# docker exec -it redis-3 /bin/sh /data # ls appendonly.aof nodes.conf /data # cat nodes.conf 8944f63805edccf7e5c2e79b5fcbd263d76c1fa7 :0@0 myself,master - 0 0 0 connected vars currentEpoch 0 lastVoteEpoch 0
redis-4节点:
[root@iZwz9geewjuo2sogidqn50Z ~]# docker exec -it redis-4 /bin/sh /data # ls appendonly.aof nodes.conf /data # cat nodes.conf 3d06c4d8060e75673f55656061b4edb25fb2ecf7 :0@0 myself,master - 0 0 0 connected vars currentEpoch 0 lastVoteEpoch 0
redis-5节点:
[root@iZwz9geewjuo2sogidqn50Z ~]# docker exec -it redis-5 /bin/sh /data # ls appendonly.aof nodes.conf /data # cat nodes.conf 53460035856d206c1682c276208e64b3fe447ed3 :0@0 myself,master - 0 0 0 connected vars currentEpoch 0 lastVoteEpoch 0
redis-6节点:
[root@iZwz9geewjuo2sogidqn50Z ~]# docker exec -it redis-6 /bin/sh /data # ls appendonly.aof nodes.conf /data # cat nodes.conf 8e3674963a4134a926ff098e77673dc6c51908e9 :0@0 myself,master - 0 0 0 connected vars currentEpoch 0 lastVoteEpoch 0
几个节点的nodes.conf文件内容是一样的!除了容器id
② 创建集群
#进入到redis-1 [root@iZwz9geewjuo2sogidqn50Z /]# docker exec -it redis-1 /bin/sh #查看文件 /data # ls appendonly.aof nodes.conf #创建集群 /data # redis-cli --cluster create 172.38.0.11:6379 172.38.0.12:6379 172.38.0.13:6379 172. 38.0.14:6379 172.38.0.15:6379 172.38.0.16:6379 --cluster-replicas 1 >>> Performing hash slots allocation on 6 nodes... . . . Waiting for the cluster to join .........................................................................................................................................................................................
一直等待节点加入集群!
查看了各种网站,还未找到合适的解决方案



