Redis哨兵架构

目录

一. 简介

二. Redis 哨兵架构的主要组成部分

三. 主从切换

四. 故障转移策略

五. 哨兵架构搭建

1. 复制sentinel.conf文件

2. 修改配置文件

3. 启动哨兵 


一. 简介

        当 Redis 的主节点发生故障时,哨兵(Sentinel)架构可以自动进行主从切换,使得从节点能够接替主节点的功能,并保持服务的可用性。Redis 哨兵架构由多个 Sentinel 节点组成,其中一个充当领头 Sentinel 角色,负责执行自动故障转移的任务。

二. Redis 哨兵架构的主要组成部分

  1. 主节点:提供 Redis 服务的节点。
  2. 从节点:复制主节点数据的节点,负责在主节点失效时提供服务。
  3. 哨兵节点:监控主节点状态,并在主节点失效时执行自动故障转移操作的节点。
  4. 领头 Sentinel:负责自动故障转移操作的 Sentinel 节点,它会选举产生,并负责协调其他 Sentinel 节点进行主从切换。

 三. 主从切换

        哨兵节点定期向主节点发送 ping 命令来检查其健康状态,一旦检测到主节点失效,则会触发自动故障转移过程。领头 Sentinel 节点将对其他 Sentinel 节点进行询问,以获取当前可用的从节点列表,并根据预定义的故障转移策略,选择一个从节点作为新的主节点。然后,领头 Sentinel 节点会通知所有 Sentinel 新的主节点节点进行主从切换,并将信息广播给所有客户端。

需要注意的是,Redis 的哨兵架构可以保证高可用性和数据一致性,但在故障转移期间可能会出现服务不可用或者短暂的数据丢失。因此,在使用哨兵架构时,需要根据实际情况选择合适的故障转移策略,并定期测试故障转移过程以确保其可靠性。

四. 故障转移策略

Redis 哨兵架构的故障转移策略是根据预定义的 quorum(仲裁数)来执行自动故障转移操作的。quorum 是 Sentinel 集群中的一个属性,它定义了多少个 Sentinel 节点必须同意进行故障转移操作。

在哨兵节点监测到主节点失效后,领头 Sentinel 会先向其他 Sentinel 节点询问当前可用的从节点列表,并根据 quorum 的值选择在哪些 Sentinel 节点上执行自动故障转移操作。具体而言,假设 quorum 的值为 n,则需要满足以下条件才能执行故障转移操作:

  1. 至少有 n 个 Sentinel 节点认定主节点已经失效。
  2. 所选出的新主节点必须与至少 n 个 Sentinel 节点保持连接,以确保新主节点已经被大多数 Sentinel 节点认可。

在确定了可以执行故障转移的 Sentinel 节点后,领头 Sentinel 会将新的主节点信息广播给所有客户端,并将新的主节点信息写入配置文件中,以便下次启动时使用。

需要注意的是,在执行自动故障转移操作时,可能会出现数据丢失或者短时间的服务不可用情况。因此,在设计 quorum 的值时,需要根据实际情况进行权衡,并定期测试故障转移过程以确保可靠性。

五. 哨兵架构搭建

这次我是基于一台机器搭建的哨兵架构

1. 复制sentinel.conf文件

[root@jwen redis-5.0.14]# cp sentinel.conf config/sentinel-26380.conf
[root@jwen redis-5.0.14]# cp sentinel.conf config/sentinel-26381.conf

2. 修改配置文件

port 26379

daemonize yes

pidfile "/var/run/redis‐sentinel‐26379.pid"

logfile "26379.log"

dir /usr/local/redis‐5.0.14/data

# sentinel monitor <master‐redis‐name> <master‐redis‐ip> <master‐redis‐port> <quorum>

# quorum是一个数字,指明当有多少个sentinel认为一个master失效时

(值一般为:sentinel总数/2 +1),master才算真正失效

 

 可以自己再配置两个sentinel,端口26380和26381,注意上述配置文件里的对应数字都要修改

3. 启动哨兵 

[root@jwen redis-5.0.14]# src/redis-sentinel sentinel.conf
[root@jwen redis-5.0.14]# src/redis-sentinel config/sentinel-26380.conf
[root@jwen redis-5.0.14]# src/redis-sentinel config/sentinel-26381.conf

可以看到三个哨兵已经全部启动了

进入其中一个哨兵,查看连接状况

sentinel集群都启动完毕后,会将哨兵集群的元数据信息写入所有sentinel的配置文件里去(追加在文件的最下面),我们查看下如下配置文件sentinel-26379.conf,如下所示:

当redis主节点如果挂了,哨兵集群会重新选举出新的redis主节点,同时会修改所有sentinel节点配置文件的集群元数据信息,比如6379的redis如果挂了,选举出的新主节点是6381,则sentinel文件里的集群元数据信息会变成如下所示:

 同时还会修改sentinel文件里之前配置的mymaster对应的6379端口,改为6381

 当6379的redis实例再次启动时,哨兵集群根据集群元数据信息就可以将6379端口的redis节点作为从节点加入集群

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

骑着猪猪去旅行A

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值