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从的集群模式。

相关推荐
朝九晚五ฺ7 小时前
【Linux探索学习】第十四弹——进程优先级:深入理解操作系统中的进程优先级
linux·运维·学习
Kkooe8 小时前
GitLab|数据迁移
运维·服务器·git
wuxingge8 小时前
k8s1.30.0高可用集群部署
云原生·容器·kubernetes
久醉不在酒8 小时前
MySQL数据库运维及集群搭建
运维·数据库·mysql
志凌海纳SmartX9 小时前
趋势洞察|AI 能否带动裸金属 K8s 强势崛起?
云原生·容器·kubernetes
锅总9 小时前
nacos与k8s service健康检查详解
云原生·容器·kubernetes
BUG弄潮儿9 小时前
k8s 集群安装
云原生·容器·kubernetes
意疏9 小时前
【Linux 篇】Docker 的容器之海与镜像之岛:于 Linux 系统内探索容器化的奇妙航行
linux·docker
虚拟网络工程师10 小时前
【网络系统管理】Centos7——配置主从mariadb服务器案例(下半部分)
运维·服务器·网络·数据库·mariadb
墨鸦_Cormorant10 小时前
使用docker快速部署Nginx、Redis、MySQL、Tomcat以及制作镜像
redis·nginx·docker