podman管理redis集群
配置
创建卷目录
mkdir -p redis-cluster/share/{redis-node-1,redis-node-2,redis-node-3,redis-node-4,redis-node-5,redis-node-6,redis-node-7,redis-node-8}
启动6个容器
[root@wtdejisuanji share]# podman run -d --name redis-node-1 --net host -v /wtdata/redis-cluster/share/redis-node-1:/data:Z redis:7.2.15 --cluster-enabled yes --appendonly yes --port 6381 podman run -d --name redis-node-2 --net host -v /wtdata/redis-cluster/share/redis-node-2:/data:Z redis:7.2.15 --cluster-enabled yes --appendonly yes --port 6382 podman run -d --name redis-node-3 --net host -v /wtdata/redis-cluster/share/redis-node-3:/data:Z redis:7.2.15 --cluster-enabled yes --appendonly yes --port 6383 podman run -d --name redis-node-4 --net host -v /wtdata/redis-cluster/share/redis-node-4:/data:Z redis:7.2.15 --cluster-enabled yes --appendonly yes --port 6384 podman run -d --name redis-node-5 --net host -v /wtdata/redis-cluster/share/redis-node-5:/data:Z redis:7.2.15 --cluster-enabled yes --appendonly yes --port 6385 podman run -d --name redis-node-6 --net host -v /wtdata/redis-cluster/share/redis-node-6:/data:Z redis:7.2.15 --cluster-enabled yes --appendonly yes --port 6386
查看启动的容器
[root@wtdejisuanji share]# podman ps
进入容器构建主从关系
[root@wtdejisuanji share]# podman exec -it redis-node-1 /bin/bash root@wtdejisuanji:/data# redis-cli --cluster create 192.168.0.100:6381 192.168.0.100:6382 192.168.0.100:6383 192.168.0.100:6384 192.168.0.100:6385 192.168.0.100:6386 --cluster-replicas 1
链接进入6381作为切入点
root@wtdejisuanji:/data# redis-cli -p 6381
查看集群信息
127.0.0.1:6381> cluster info
查看集群节点
127.0.0.1:6381> cluster nodes
集群数据读写
防止路由失效加-c参数进入6381节点的redis
root@wtdejisuanji:/data# redis-cli -p 6381 -c
这时可以增加键值,集群会自动分配槽位,数据从而存储到对应的节点
检查集群信息
root@wtdejisuanji:/data# redis-cli --cluster check 192.168.0.100:6381
容错切换迁移
当其中的一个主节点停机,从节点自动上位为主。原有的主节点再次启动会自动变为从节点。
如果需要恢复来的主从节点关系,把上位的主节点停掉,让从节点自动上位为主节点,再把原来的从节点启动就可以了。
主从扩容
再启动两台容器
[root@wtdejisuanji share]# podman run -d --name redis-node-7 --net host -v /wtdata/redis-cluster/share/redis-node-7:/data:Z redis:7.2.15 --cluster-enabled yes --appendonly yes --port 6387 podman run -d --name redis-node-8 --net host -v /wtdata/redis-cluster/share/redis-node-8:/data:Z redis:7.2.15 --cluster-enabled yes --appendonly yes --port 6388
#查看容器情况
[root@wtdejisuanji share]# podman ps
进入6387容器实例内部
[root@wtdejisuanji share]# podman exec -it redis-node-7 /bin/bash
将新增的6387节点作为master添加到集群当中
redis-cli --cluster add-node 自己实际IP地址:6387 自己实际IP地址:6381
6387 就是将要作为master的新增节点
6381 就是原来集群节点里面的领路人,相当于6387拜拜6381的码头从而找到组织加入集群
root@wtdejisuanji:/data# redis-cli --cluster add-node 192.168.0.100:6387 192.168.0.100:6381
检查一下目前集群情况(新增的6387master节点有0个槽位)
root@wtdejisuanji:/data# redis-cli --cluster check 192.168.0.100:6381
重新分派槽号(为新添加的master节点分配槽号)
命令:redis-cli --cluster reshard IP地址:端口号
root@wtdejisuanji:/data# redis-cli --cluster reshard 192.168.0.100:6381
16384/4=4096,每个master各占4096,中间有选项要填写,分别是分配的槽位个数、要增加槽位的masterID、从哪里移过来的槽位的masterID,选择ALL即原来所有master、分配好要移动的槽位后选则YES后,开始移动分配。
完成后再次检查一下目前集群情况(此时4个master节点各有4096个槽位)
root@wtdejisuanji:/data# redis-cli --cluster check 192.168.0.100:6381
为6387主节点添加6388从节点
命令:redis-cli --cluster add-node ip:新slave端口 ip:新master端口 --cluster-slave --cluster-master-id 新主机节点ID
root@wtdejisuanji:/data# redis-cli --cluster add-node 192.168.0.100:6388 192.168.0.100:6387 --cluster-slave --cluster-master-id 4733f20fde2204f899316c4067f65370804da210
为新master添加slave后再次检查一下目前集群情况(此时4个master节点各有4096个槽位,每个master都有一个slave)
root@wtdejisuanji:/data# redis-cli --cluster check 192.168.0.100:6381
主从缩容(6387和6388下线)
检查集群情况,得到6388节点ID
root@wtdejisuanji:/data# redis-cli --cluster check 192.168.0.100:6382
从集群中删除6388节点
命令:redis-cli --cluster del-node ip:从机端口 从机6388节点ID
root@wtdejisuanji:/data# redis-cli --cluster del-node 192.168.0.100:6388 db2759357ae9b25b2340d469cbc04a72441cca38
查看集群情况(6388节点已从集群中删除)
root@wtdejisuanji:/data# redis-cli --cluster check 192.168.0.100:6382
将6387的槽位清空,重新分配给其他master
root@wtdejisuanji:/data# redis-cli --cluster reshard 192.168.0.100:6381
中间会有选择,首先是要接受槽的masterID,再接着是要移除槽的masterID,移除槽的ID写完之后填done,然后再选YES开始分配
查看集群情况(此时6381节点的槽位为8192,因为我把槽位全分配给它了,要均衡分配可以自己选择,此时我查看的6387节点变为6381的slave节点,可以直接移除集群了)
root@wtdejisuanji:/data# redis-cli --cluster check 192.168.0.100:6382
从集群中删除6387节点
命令:redis-cli --cluster del-node ip:端口 6387节点ID
root@wtdejisuanji:/data# redis-cli --cluster del-node 192.168.0.100:6387 4733f20fde2204f899316c4067f65370804da210 root@wtdejisuanji:/data# redis-cli --cluster check 192.168.0.100:6382
查看集群情况(6387节点已从集群中移除了)
然后就可以停掉这两个容器了。
浙公网安备 33010602011771号