基于docker部署redis多主多从集群

在docker中部署redis多主多从集群,准备部署三对一主一从服务,共6个

首先获取镜像

这里使用的是6.0.8版本

docker pull redis:6.0.8

启动六个容器

docker run -d --name redis-node1 --net host --privileged=true -v /usr/local/redis/node1:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6371

docker run -d --name redis-node2 --net host --privileged=true -v /usr/local/redis/node2:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6372

docker run -d --name redis-node3 --net host --privileged=true -v /usr/local/redis/node3:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6373

docker run -d --name redis-node4 --net host --privileged=true -v /usr/local/redis/node4:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6374

docker run -d --name redis-node5 --net host --privileged=true -v /usr/local/redis/node5:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6375

docker run -d --name redis-node6 --net host --privileged=true -v /usr/local/redis/node6:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6376

命令说明:

--net host : 使用宿主机的IP和端口,默认

--privileged=true : 获取宿主机root用户权限

-v /usr/local/redis/node1:/data : 挂载容器数据卷

--cluster-enabled yes : 开启redis集群

--appendonly yes : 开启持久化

构建主从关系

进入一个容器

docker exec -it redis-node1 /bin/bash

执行下面命令,下面命令中ip换成实际ip(记得打开6个容器使用的端口,以及每个端口+10000的端口,因为redis集群通信使用的端口是主端口+10000。我这里就打开了6371到6376 以及 16371到16376 几个端口)

--cluster-replicas 1  表示1主1从分配

redis-cli --cluster create 111.111.111.111:6371 111.111.111.111:6372 111.111.111.111:6373 111.111.111.111:6374 111.111.111.111:6375 111.111.111.111:6376 --cluster-replicas 1

执行后出现下面内容,显示主从对应关系,可以看到是3主3从,如果同意配置输入yes回车 

 yes之后出现下面内容表示成功

使用查看集群状态命令同样可以看到上面描述的对应关系等内容,如下

redis-cli --cluster check 111.111.111.111:6371

查看集群信息

同样使用docker exec命令进入容器1 

连接redis客户端

redis-cli -p 6271

查看信息

cluster info

 可以看到已知节点为6个

查看节点信息

cluster nodes

 可以看到三个主节点和三个从节点的ip和端口,从对应的编码来看,4号从机挂在1号主机,5号从机挂在2号主机,6号从机挂在3号主机。这个对应关系不是固定的,可能下次部署的时候对应关系就不是这样了

测试数据读写

同样docker exec进入容器1

使用集群模式连接redis1(普通的单机版连接方式连接之后,存数据可能会出现error情况,原因是存的key计算的hash值跟16383取余之后,不在当前redis节点的存储范围)

后面加个-c就表示以集群方式连接

redis-cli -p 6371 -c

set一个k1 v1 ,会提示重定向到6373所在节点,因为k1计算出来的12706槽位在6373节点范围

宕机切换迁移

当一个主机宕机的时候,从机应该上位为主机

docker stop redis-node1 把6371节点停掉,之后稍等一会儿,等集群内部发心跳通知

进入6372容器,连接6372,查看集群状态

可以看到6371节点已经是fail了,并且之前他的从节点6374上位成了主节点

并且之前存的数据也是可以正常访问的

再次启动6371节点后,查看节点状态,发现6374依旧是master节点,6371变成了slave节点

如果希望还是恢复成原来的6371为主节点,可以把6374停一会儿再启动,两个节点身份就会再次互换回来

猜你喜欢

转载自blog.csdn.net/qq_41890624/article/details/127893584