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

 

 

 

关闭redis1redis4

 

 集群正常运行

 

 

 

redis1redis4关闭的时间里,set aa 123

重启redis1redis4:docker start redis1 redis4

redis1连接可以get aa

 

 

 关闭redis1redis4redis5,集群闭关

 关闭redis1redis4redis2redis5,集群闭关

 

 

关闭redis4redis5,集群关闭

 

 

 关闭redis1、redis2、redis3,集群正常

 

 

 关闭redis1与redis5,redis1与redis5是主从关系,集群关闭

 

 

集群节点1:redis1redis5是主从关系,redis1:主实例、redis5:从实例

集群节点2:redis2redis6是主从关系

集群节点3、redis3redis4是主从关系

 

结果:

1、redis1redis2redis3同时挂掉,从实例转变为主实例,集群正常运行

2、redis1redis4同在一台服务器上,redis1redis5是主从关系,redis3redis4是主从关系,挂掉redis1redis4,即服务器一台,集群正常工作

3、redis1redis5在不同的服务器上,redis1redis5是主从关系,一个主从节点关闭,即使三台服务器都没有挂掉,集群也关闭工作(即三个集群节点中,主实例或者从实例必要有一个,否则集群关闭

4、在redis1redis4挂掉的时间生产的数据,redis1redis4重启后可获取到中断时间内的数据。

 

posted @ 2022-07-01 16:39  leihongnu  阅读(1054)  评论(0编辑  收藏  举报