拉取redis镜像
docker pull redis:6.0.8
使用docker启动6个redis服务器
# --cluster-enabled yes #开启redis集群
# --net host #使用宿主机的IP和端口
# --appendonly yes #开启持久化
# --name redis-1 #自定义容器名字
docker run -d --name redis-1 --network host --privileged=true -v /data/redis-1:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6381
docker run -d --name redis-2 --network host --privileged=true -v /data/redis-2:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6382
docker run -d --name redis-3 --network host --privileged=true -v /data/redis-3:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6383
docker run -d --name redis-4 --network host --privileged=true -v /data/redis-4:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6384
docker run -d --name redis-5 --network host --privileged=true -v /data/redis-5:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6385
docker run -d --name redis-6 --network host --privileged=true -v /data/redis-6:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6386
查看容器启动是否成功
创建redis主从关系
# --cluster-replicas 1 #为每个master创建一个slave节点
#进入redis-1容器
[root@docker_server ~]# docker exec -it redis-1 /bin/bash
[root@docker_server:/data]# redis-cli --cluster create 10.10.10.12:6381 10.10.10.12:6382 10.10.10.12:6383 10.10.10.12:6384 10.10.10.12:6385 10.10.10.13:6386 --cluster-replicas 1
M为主,S为从
slots后是分配的固定槽位,当写入数据时会根据默认算法自动写入到对应槽位的集群节点中
查看集群状态
#进入任意节点中
redis-cli -p 6381
#查看集群状态信息
127.0.0.1:6381> cluster info
#查看节点信息
127.0.0.1:6381> cluster nodes
#写入测试数据
127.0.0.1:6381> set name k11
-> Redirected to slot [12539] located at 10.10.10.12:6382
OK
127.0.0.1:6382> set key k1
-> Redirected to slot [12539] located at 10.10.10.12:6383
OK
10.10.10.12:6383> set msg l11
-> Redirected to slot [6257] located at 10.10.10.12:6382
OK
分别采用不同颜色在下图中标注出来了主从关系
二、主从容错切换测试
#单机模式下连接redis
root@docker_server:/data# redis-cli -p 6381
127.0.0.1:6381> set key word
(error) MOVED 12539 10.10.10.12:6383 #可以看到数据是要分配到12539这个槽位,并且节点为6383。由于当前时单机连接所以不支持,需要加参数 -c 使用集群的方式进行连接
127.0.0.1:6381>
#集群模式连接redis
127.0.0.1:6381> set key word
-> Redirected to slot [12539] located at 10.10.10.12:6383 #写入数据会自动写入到对应的槽位中
OK
10.10.10.12:6383>
查看集群信息
redis-cli --cluster check 10.10.10.12:6381
主从切换测试
(1)停止redis-1容器,查看对应的从容器是否变为master
docker stop redis-1
docker exec -it redis-2
redis-cli -p 6382 -c
cluster nodes
(4)恢复redis-1查看是否会恢复master身份
#恢复redis-1
docker start redis-1
#查看集群节点
cluster nodes
如图所示,不会把master身份交还给redis-1,如果需要redis-1恢复master身份需要先将redis-6停止,等redis-1恢复master身份后再重新运行。
#恢复redis-1的master身份
docker stop redis-6
cluster nodes
原文始发于微信公众号(青菜浪人):
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/157519.html