docker redis集群(多机)一主一从
环境
ip 容器名
192.168.59.102:redis1、redis4
192.168.59.103:redis2、redis5
192.168.59.104:redis3、redis6
三台主机,启动三个容器,可以做集群,但是只要一台挂掉,集群就失败
三台主机,启动六个容器,一台主机搭建一主一从2个容器,挂掉一个容器,从节点顶上。
1、创建目录
192.168.59.102
# mkdir -p /home/redis/node1/data
# mkdir -p /home/redis/node4/data
192.168.59.103
# mkdir -p /home/redis/node2/data
# mkdir -p /home/redis/node5/data
192.168.59.104
# mkdir -p /home/redis/node3/data
# mkdir -p /home/redis/node6/data
2、启动容器
192.168.59.102
注意:密码 --requirepass 和 --masterauth必须一样
#docker create --name redis1 --network=host -v /home/redis/node1/data:/data redis --bind 192.168.59.102 --cluster-enabled yes --cluster-config-file redis-node1.conf
redis1端口默认:6379
#docker create --name redis4 --network=host -v /home/redis/node4/data:/data redis --bind 192.168.59.102 --cluster-enabled yes --cluster-config-file redis-node4.conf --port 6004
redis4端口:6004
#docker start redis1 redis4
192.168.59.103
#docker create --name redis2 --network=host -v /home/redis/node2/data:/data redis --bind 192.168.59.103 --cluster-enabled yes --cluster-config-file redis-node2.conf
redis2端口默认:6379
#docker create --name redis5 --network=host -v /home/redis/node5/data:/data redis --bind 192.168.59.103 --cluster-enabled yes --cluster-config-file redis-node5.conf --port 6005
redis5端口:6005
#docker start redis2 redis5
192.168.59.104
#docker create --name redis3 --network=host -v /home/redis/node3/data:/data redis --bind 192.168.59.104 --cluster-enabled yes --cluster-config-file redis-node3.conf
redis3端口默认:6379
docker create --name redis6 --network=host -v /home/redis/node6/data:/data redis --bind 192.168.59.104 --cluster-enabled yes --cluster-config-file redis-node6.conf --port 6006
redis6端口:6006
#docker start redis3 redis6
3、配置集群
进入任意一个容器
--cluster-replicas 0:0标识无从节点
--cluster-replicas 1:1标识一主一从
--cluster-replicas 2:2标识一主二从
如果实例不是3的倍数会报错,需要手动配置,这里就不说明了
注意配置了密码的话要加 -a 密码:redis-cli --cluster -a 密码 create
# redis-cli --cluster create 192.168.59.102:6379 192.168.59.102:6004 192.168.59.103:6379 192.168.59.103:6005 192.168.59.104:6379 192.168.59.104:6006 --cluster-replicas 1
上面的命令是自动分配主从的,也可以自己指定,
建议自动分配,一个节点的主节点和从节点在一台服务器上,这台服务器(节点1)挂掉,集群关闭
节点1:redis1与redis5是主从关系
节点2:redis2与redis6是主从关系
节点3:redis3与redis4是主从关系
5、验证
进入3个容器,启动用集群方式(-c)
启动容器时绑定了ip,进去客户端需要输入,否者连接失败
#redis-cli -c -h ip地址
>set name lulu
>get name
关闭redis1:docker stop redis1
集群正常运行,redis1关闭后redis5自动成为master
关闭redis1和redis4
集群正常运行
在redis1和redis4关闭的时间里,set aa 123
重启redis1和redis4:docker start redis1 redis4
redis1连接可以get aa
关闭redis1、redis4、redis5,集群闭关
关闭redis1、redis4、redis2、redis5,集群闭关
关闭redis4和redis5,集群关闭
关闭redis1、redis2、redis3,集群正常
关闭redis1与redis5,redis1与redis5是主从关系,集群关闭
集群节点1:redis1与redis5是主从关系,redis1:主实例、redis5:从实例
集群节点2:redis2与redis6是主从关系
集群节点3、redis3与redis4是主从关系
结果:
1、redis1、redis2、redis3同时挂掉,从实例转变为主实例,集群正常运行
2、redis1与redis4同在一台服务器上,redis1与redis5是主从关系,redis3与redis4是主从关系,挂掉redis1与redis4,即服务器一台,集群正常工作
3、redis1与redis5在不同的服务器上,redis1与redis5是主从关系,一个主从节点关闭,即使三台服务器都没有挂掉,集群也关闭工作(即三个集群节点中,主实例或者从实例必要有一个,否则集群关闭)
4、在redis1与redis4挂掉的时间生产的数据,redis1和redis4重启后可获取到中断时间内的数据。