专做海报设计的网站,做app网站需要什么,手机网站报价单模板,网业无法打开?redis集群主从容错切换案例
3主3从的redis集群#xff0c;某个主机宕机了#xff0c;需要对应的从机补位。
docker exec -it redis-node-1 /bin/bash
# 进入容器1的命令行
redis-cli -p 6381
# 进入节点1的命令行
cluster nodes
# 查看集群信息可以看到1号和6号对应是主从关…redis集群主从容错切换案例
3主3从的redis集群某个主机宕机了需要对应的从机补位。
docker exec -it redis-node-1 /bin/bash
# 进入容器1的命令行
redis-cli -p 6381
# 进入节点1的命令行
cluster nodes
# 查看集群信息可以看到1号和6号对应是主从关系。此时尝试停掉节点1.
docker stop redis-node-1
# 推出redis节点、退出容器命令行在linux虚机上执行命令
docker exec -it redis-node-2 /bin/bash
# 进入redis容器2查看节点信息
redis-cli -p 6382
cluster nodes可以看到redis节点1已经failed了redis节点6的信息变成了master不再是之前的slave。 此时再启动之前停掉的redis节点1.通过xshell在开个连接窗口在linux虚机的命令行执行不是在容器内执行。
docker start redis-node-1
# 启动节点1然后在还没退出的redis节点2查看集群信息。cluster nodes此时节点1变成了从机。不再是之前的主机。 那么此时如果想在把redis节点1作为主机redis节点6作为从机需要进行以下步骤。
# 停掉节点6,给节点1一个自动上位的机会。
docker stop redis-node-6
# 重启节点6就变成了从机。
docker start redis-node-6redis集群主从扩容需求案例
在之前3主3从的基础上新增一对机器变成4主4从。
新建两个容器redis节点
docker run -d --name redis-node-7 --net host --privilegedtrue -v /data/redis/share/redis-node-1:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6387
# 依次修改容器名称、容器卷名称、端口号创建7和8两个redis节点。
dcoker ps进入新增的redis容器内部
进入redis节点7的容器内部命令行将节点7加入集群。
docker exec -it redis-node-7 /bin/bash
redis-cli --cluster add-node 192.168.0.175:6387 192.168.0.175:6381
# 6387是集群内要新增的节点6381是集群节点内的领路人要通过节点1进行引导加入。其中的ip地址换做自己的linux虚机的实际ip。可以看到已经加入集群
查看集群内更详细信息。
redis-cli --cluster check 192.168.0.175:6381可以看到集群内是有redis节点7的但是显示没有哈希槽位分配。
重新分配槽号
# 将redis节点1为开头的集群进行哈希槽位的重分配。
redis-cli --cluster reshard 192.168.0.175:6381执行完该命令会遇到如下选项
How many slots do you want to move (from 1 to 163984)?
# 因为是要配置成4主4从所以16384/44096填4096
What is the receiving node ID?
# 将输入查看集群信息命令后的redis节点7的 node id复制
Source node #1:
# 填all输入命令再次查看集群信息
redis-cli --cluster check 192.168.0.175:6381可以看到redis节点7已经有哈希槽位了。 同时6387这个节点其槽位不是连续的是分段式的是因为全部重新分配成本太高所以之前的3个主节点各自匀出部分槽位给新节点。
M: 3376a19ecaa1a0c13945b791875a5efbf1bd2fc7 192.168.0.175:6387 slots:[0-1364],[5461-6826],[10923-12287] (4096 slots) master配置对应从节点
为主节点7配置挂载从节点8.并再次检查redis集群信息。
redis-cli --cluster add-node ip:新slave端口 ip:新master端口 --cluster-slave --cluster-master-id 新主机节点IDredis-cli --cluster add-node 192.168.0.175:6388 192.168.0.175:6387 --cluster-slave --cluster-master-id 3376a19ecaa1a0c13945b791875a5efbf1bd2fc7
redis-cli --cluster check 192.168.0.175:6381可以看到配置成功。
redis集群缩容案例
先删除从节点redis8再删除对应的主节点redis7恢复成之前的3主3从状态。先检查集群情况获取redis节点8的节点id。
redis-cli --cluster del-node 宿主机ip:从机端口 从机的节点id
redis-cli --cluster del-node 192.168.0.175:6388 4a3c4f3987d85a226ea109e8ca395d84d0570313 将redis节点7的槽号清空恢复给原来的3个主节点。
# 将redis节点1为开头的集群进行哈希槽位的重分配。
redis-cli --cluster reshard 192.168.0.175:6381执行完命令会遇到一些选项需要填写此处为方便填写只执行了一次分配槽位命令全部还给了redis节点1.
How many slots do you want to move (from 1 to 163984)?
# 因为是要从4主4从缩容成3主3从所以16384/44096填4096
What is the receiving node ID?
# 要将槽位一次性全分配给redis节点1输入查看集群信息命令后的redis节点1的 node id复制
Source node #1:
# 填要删除的那个主节点idredis7的节点id即分配槽位的来源
Source node #2:done可以看到redis节点1多了一个分段的槽位。另外需要注意的是如果要将redis节点7的槽位均匀的还给其他3个主节点那就需要执行3次还槽位的命令每次需要移动的槽位数量要计算为4096/31365. 删除redis节点7.
redis-cli --cluster del-node 192.168.0.175:6387 3376a19ecaa1a0c13945b791875a5efbf1bd2fc7
# ip替换为宿主机ip并指定redis节点7的节点id
redis-cli --cluster check 192.168.0.175:6381
# 查看集群信息可以看出又变成了3主3从的集群模式。