最近学习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 版权协议,转载请附上原文出处链接和本声明。