Redis 哨兵模式

什么是哨兵模式

        

        哨兵模式是Redis提供的一种高可用性解决方案,通过引入一组哨兵实例来监控和管理Redis主从服务器,以实现自动故障转移和高可用性。

        在哨兵模式中,有一个或多个独立的哨兵进程运行在不同的机器上,它们负责监测主服务器和从服务器的健康状态。每个哨兵进程定期向Redis实例发送PING命令来检查其可用性,并根据预定义的条件判断实例是否故障。

        当某个哨兵发现主服务器不可用时,它会与其他哨兵进行协商,通过多数派(quorum)原则选举出一个新的主服务器。一旦新的主服务器被选出,哨兵会通知所有的从服务器将它们切换到新的主服务器,并进行相应的重连操作。

哨兵的主要功能包括:

  1. 监视:哨兵周期性地检查主从服务器的健康状态,以确保它们正常运行。
  2. 自动故障检测和转移:哨兵能够自动检测主服务器的故障,并触发自动故障转移过程,选举出一个新的主服务器。
  3. 配置提供和更新:哨兵可以提供配置信息给客户端,使客户端能够获取到正确的主服务器地址和端口。
  4. 集群监听:哨兵可以监控多个Redis实例组成的集群,并在有需要时对集群进行重新配置。

在redis主从模式的基础上搭建哨兵

        在这里我们本地部署三台redis服务主服务监听端口6379,两个从服务分别监听6380和6381端口。具体部署流程请参考:

        Linux 搭建redis 主从模式_who_am_i__的博客-CSDN博客

为什么至少需要三个哨兵

         在哨兵模式中,建议至少使用三个哨兵实例,而不是两个或更少。这是因为在分布式系统中,使用一个奇数个哨兵实例可以提供更好的高可用性和决策一致性。

以下是一些原因:

  1. Quorum(法定人数):在哨兵模式中,哨兵之间使用quorum来进行投票和决策。quorum是指与实现最终决策所需的最小正确人数。使用奇数个哨兵可以确保有足够的哨兵参与决策,并且决策结果能够达到多数派的一致性。如果使用偶数个哨兵,可能会导致决策无法达成一致,进而影响自动故障转移和高可用性。

  2. 消除脑裂问题:哨兵模式中的脑裂问题是指当主服务器与哨兵之间的网络分区时,可能会导致不同的哨兵产生不同的决策,从而导致集群的不一致状态。使用奇数个哨兵可以有效降低脑裂问题的发生概率,因为在网络分区发生时,仍然有一个多数派的哨兵能够达成共识。

  3. 容错性和可扩展性:使用三个或更多的哨兵可以增加系统的容错性和可扩展性。如果某个哨兵实例发生故障,仍然有足够多的哨兵来监控和管理Redis实例。此外,当需要添加新的哨兵实例时,使用奇数个哨兵可以更好地保持quorum的正确性。

创建三个哨兵实例

        哨兵配置文件
port 6383

# 无需配置可自动生成
#sentinel myid efcb8e5cb708ec46fcf5cf611797035370b16318

sentinel deny-scripts-reconfig yes

# 监控主服务的ip 端口 故障转移的投票数量
sentinel monitor dev-master ::1 6381 2
#  主服务器2秒内无响应,下线主服务器
sentinel down-after-milliseconds dev-master 2000
# 故障转移最大时间,如果超过10秒仍没有找出一个合适的新master故障转移失败
sentinel failover-timeout dev-master 10000

        上面是哨兵配置的模板,分别添加三个配置文件:sentinel.conf、sentinel2.conf、sentinel3.conf。添加后只需要修改不同的端口号即可。三个哨兵分别使用端口:6383、6384、6385

启动哨兵

        使用下面命令启动哨兵1和2:

        redis-sentinel sentinel.conf --daemonize yes
        redis-sentinel sentinel2.conf --daemonize yes

        使用--daemonize no启动哨兵3,主要为了是监控其运行状态:

        redis-sentinel sentinel3.conf --daemonize no

        哨兵3启动日志:

验证

        验证,需要我们关闭master服务,并查看哨兵状态和从服务状态变化:

        关闭前查看master的info replication:

        

        此时6379为master节点,有两个slave分别是6380和6381.

        关闭master后:

        哨兵控制台变化:

        此时可以看到哨兵以重新选出6381节点为master节点。

        查看6381节点变化(role从slave变为master有一个从节点6380):

        

        再重启6379节点(原master服务),可以发现6379变成了6381(新master)的从节点:

        

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

who_am_i__

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

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

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

打赏作者

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

抵扣说明:

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

余额充值