Docker下配置redis集群

拉取redis镜像

docker pull redis:6.0.8
Docker下配置redis集群

使用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

查看容器启动是否成功

Docker下配置redis集群

创建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后是分配的固定槽位,当写入数据时会根据默认算法自动写入到对应槽位的集群节点中

Docker下配置redis集群

查看集群状态

#进入任意节点中
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

分别采用不同颜色在下图中标注出来了主从关系Docker下配置redis集群

二、主从容错切换测试
#单机模式下连接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
Docker下配置redis集群
image-20230801145334120

主从切换测试

(1)停止redis-1容器,查看对应的从容器是否变为master
docker stop redis-1

(2)当停止redis-1时,对应的从容器redis-6自动切换为master设备

docker exec -it redis-2
redis-cli -p 6382 -c
cluster nodes

Docker下配置redis集群
(3)在redis-2中查看之前存储的数据能否被正常读取
Docker下配置redis集群
(4)恢复redis-1查看是否会恢复master身份
#恢复redis-1
docker start redis-1
#查看集群节点
cluster nodes

如图所示,不会把master身份交还给redis-1,如果需要redis-1恢复master身份需要先将redis-6停止,等redis-1恢复master身份后再重新运行。Docker下配置redis集群

#恢复redis-1的master身份
docker stop redis-6
cluster nodes

Docker下配置redis集群
▲往期推荐▼










原文始发于微信公众号(青菜浪人):

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/157519.html

(0)
小半的头像小半

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!