最近学习docker,记录一下觉得自己不太会的东西 – –
使用docker搭建redis集群,我们准备创建6个docker容器,使用3主3从的形式搭建redis集群

首先我们使用docker创建自定义网络

docker network create --subnet 172.38.0.0/16 redis

然后我们使用脚本自动创建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 16379
appendonly yes
EOF
done

再使用脚本run相应6个容器

for port in $(seq 1 6); \
do \
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
done

接下来我们就可以看到6个容器已经全部运行起来了
在这里插入图片描述
接下来我们创建redis集群

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

会提示我们是否按这种形式创建集群 3主3从即可 输入yes 效果如下
在这里插入图片描述
然后我们就可以随便进一个redis容器里面去了

docker exec -it redis-1 /bin/sh  # 注意这里不能写bash
/data # redis-cli -c  #进入集群
127.0.0.1:6379> cluster nodes # 查看结点信息
2556bc053577b96881bd241369ac9bd73e803137 172.38.0.11:6379@16379 myself,master - 0 1623655496000 1 connected 0-5460
154585e6d4f281d537a2c020799f0f1caf7ee659 172.38.0.15:6379@16379 slave 2556bc053577b96881bd241369ac9bd73e803137 0 1623655495554 5 connected
ccb0451ece139098655615b9194aff45ca991f2c 172.38.0.16:6379@16379 slave eeeb8250a491eceaf4c8a8da5e0d5095ba1d1663 0 1623655496756 6 connected
eeeb8250a491eceaf4c8a8da5e0d5095ba1d1663 172.38.0.12:6379@16379 master - 0 1623655496756 2 connected 5461-10922
9ee8da80f53b5bf2ee1009f008912a3fc40db0e7 172.38.0.13:6379@16379 master - 0 1623655495755 3 connected 10923-16383
5cec4e9d0c188f00ba75c0ecf37f713aa8973671 172.38.0.14:6379@16379 slave 9ee8da80f53b5bf2ee1009f008912a3fc40db0e7 0 1623655495000 4 connected

127.0.0.1:6379> set a b # 往集群中写入一个值
-> Redirected to slot [15495] located at 172.38.0.13:6379
OK

可以看出来是在redis-3写入的值 我们试着把redis-3停掉看看我们还能不能取出来这个值

[root@iz2ze2lho701dwppf3ie44z conf]# docker stop redis-3
redis-3

127.0.0.1:6379> get a
-> Redirected to slot [15495] located at 172.38.0.14:6379 # 可以看到从第4个节点中取出了值
"b"
172.38.0.14:6379> 

over


版权声明:本文为shizhuba原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/shizhuba/article/details/117904683