docker小白第十天

redis集群主从容错切换案例

3主3从的redis集群,某个主机宕机了,需要对应的从机补位。

bash 复制代码
docker exec -it redis-node-1 /bin/bash
# 进入容器1的命令行
redis-cli -p 6381
# 进入节点1的命令行
cluster nodes
# 查看集群信息

可以看到1号和6号对应是主从关系。此时尝试停掉节点1.

bash 复制代码
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虚机的命令行执行,不是在容器内执行。

bash 复制代码
docker start redis-node-1
# 启动节点1

然后在还没退出的redis节点2查看集群信息。cluster nodes此时节点1变成了从机。不再是之前的主机。

那么此时如果想在把redis节点1作为主机,redis节点6作为从机,需要进行以下步骤。

bash 复制代码
# 停掉节点6,给节点1一个自动上位的机会。
docker stop redis-node-6
# 重启节点6,就变成了从机。
docker start redis-node-6

redis集群主从扩容需求案例

在之前3主3从的基础上,新增一对机器变成4主4从。

新建两个容器redis节点

bash 复制代码
docker run -d --name redis-node-7 --net host --privileged=true -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加入集群。

bash 复制代码
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。

可以看到已经加入集群

bash 复制代码
查看集群内更详细信息。
redis-cli --cluster check 192.168.0.175:6381

可以看到集群内是有redis节点7的,但是显示没有哈希槽位分配。

重新分配槽号

bash 复制代码
# 将redis节点1为开头的集群,进行哈希槽位的重分配。
redis-cli --cluster reshard 192.168.0.175:6381

执行完该命令会遇到如下选项

bash 复制代码
How many slots do you want to move (from 1 to 163984)?
# 因为是要配置成4主4从,所以16384/4=4096,填4096
What is the receiving node ID?
# 将输入查看集群信息命令后的redis节点7的 node id复制
Source node #1:
# 填all

输入命令再次查看集群信息

bash 复制代码
redis-cli --cluster check 192.168.0.175:6381

可以看到redis节点7已经有哈希槽位了。

同时6387这个节点,其槽位不是连续的,是分段式的,是因为全部重新分配成本太高,所以之前的3个主节点各自匀出部分槽位,给新节点。

bash 复制代码
M: 3376a19ecaa1a0c13945b791875a5efbf1bd2fc7 192.168.0.175:6387 slots:[0-1364],[5461-6826],[10923-12287] (4096 slots) master

配置对应从节点

为主节点7配置挂载从节点8.并再次检查redis集群信息。

bash 复制代码
redis-cli --cluster add-node ip:新slave端口 ip:新master端口 --cluster-slave --cluster-master-id 新主机节点ID

redis-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。

bash 复制代码
redis-cli --cluster del-node 宿主机ip:从机端口 从机的节点id
redis-cli --cluster del-node 192.168.0.175:6388 4a3c4f3987d85a226ea109e8ca395d84d0570313

将redis节点7的槽号清空,恢复给原来的3个主节点。

bash 复制代码
# 将redis节点1为开头的集群,进行哈希槽位的重分配。
redis-cli --cluster reshard 192.168.0.175:6381

执行完命令会遇到一些选项需要填写,此处为方便填写,只执行了一次分配槽位命令,全部还给了redis节点1.

bash 复制代码
How many slots do you want to move (from 1 to 163984)?
# 因为是要从4主4从缩容成3主3从,所以16384/4=4096,填4096
What is the receiving node ID?
# 要将槽位一次性全分配给redis节点1,输入查看集群信息命令后的redis节点1的 node id复制
Source node #1:
# 填要删除的那个主节点id,redis7的节点id,即分配槽位的来源
Source node #2:done

可以看到redis节点1,多了一个分段的槽位。另外需要注意的是,如果要将redis节点7的槽位均匀的还给其他3个主节点,那就需要执行3次还槽位的命令,每次需要移动的槽位数量要计算为4096/3=1365.

删除redis节点7.

bash 复制代码
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从的集群模式。

相关推荐
绵绵细雨中的乡音11 分钟前
Linux进程学习【基本认知】
linux·运维·学习
matrixlzp22 分钟前
K8S Service 原理、案例
云原生·容器·kubernetes
GnixAij1 小时前
Docker SSH端口转发
docker·ssh
珹洺1 小时前
Linux操作系统从入门到实战(三)Linux基础指令(上)
linux·运维·服务器
剁椒排骨1 小时前
win11什么都不动之后一段时间黑屏桌面无法显示,但鼠标仍可移动,得要熄屏之后才能进入的四种解决方法
运维·windows·经验分享·计算机外设·win11·win10
angushine1 小时前
让Docker端口映射受Firewall管理而非iptables
运维·docker·容器
归寻太乙2 小时前
Linux环境变量
linux·运维·服务器
m0Java门徒2 小时前
面向对象编程核心:封装、继承、多态与 static 关键字深度解析
java·运维·开发语言·intellij-idea·idea
Sapphire~2 小时前
Linux-06 ubuntu 系统截图软件使用简单记录
linux·运维·ubuntu
高级IT技术专家secops9982 小时前
在统信UOS/麒麟Kylin OS操作系统中配置APT和GIT代理
运维·服务器·git·系统安全·kylin