4.1 Redis哨兵模式

引子

Master挂了,如何保证可用性,实现继续读写。

什么是哨兵

Sentinel(哨兵)用于监控Redis集群中的Master状态的工具,是Redis高可用解决方法,哨兵可以监视一个或多个redis master服务,以及这些master服务的所有从服务;当某个master服务宕机后,会把这个master下的某个从服务升级为master来替代一宕机的master继续工作。

示例图

 配置哨兵监控master

创建并配置sentinel.conf:

  • 普通配置

port 26379
pidfile "/usr/local/redis/sentinel/redis-sentinel.pid"
dir "/usr/local/redis/sentinel"
daemonize yes
protected-mode no
logfile "/usr/local/redis/sentinel/redis-sentinel.log"

  • 核心配置

# 配置哨兵
sentinel monitor mymaster 127.0.0.1 6379 2
# 密码
sentinel auth-pass <master-name> <password>
# master被sentinel认定为失效的间隔时间
sentinel down-after-milliseconds mymaster 30000
# 剩余的slaves重新和新的master做同步的并行个数
sentinel parallel-syncs mymaster 1
# 主备切换的超时时间,哨兵要去做故障转移,这个时候哨兵也是一个进程,如果他没有去执行,超过这个时间后,会由其他的哨兵来处理
sentinel failover-timeout mymaster 180000

启动哨兵 x 3

redis-sentinel  sentinel.conf

测试

  1. master挂了,看slave是否成为master
  2. master恢复,观察slave状态

结论

master挂了之后,由于哨兵监控,剩余slave会进行选举,选举后其中一个成为master,当原来的master恢复后,他会成为slave。

解决原Master恢复后不同步问题

●    解决原Master恢复后不同步问题

●    一般master数据无法同步给slave的方案检查步骤

●    解决原Master恢复后不同步问题

    ◆    原Master恢复后不同步问题

原来的Master(191)恢复成Slave,他的同步状态不OK,状态为 master_link_status:down,这是为什么?

    原因:这是因为我们只设置了 192 和 193 的masterauth,这是用于同步master的数据

            但是191一开始是 master 是不受影响的

            当master转变为slave,由于它没有设置masterauth,

            所以他不能从新的master同步数据。

            随之导致 info replication的时候,同步状态为 down,

            所以只需要修改redis.conf 中  masterauth 的密码改为一致的即可

●    一般master数据无法同步给slave的方案检查步骤

    ◆    网络通信问题,要保证互相ping通,内网互通。   

    ◆    关闭防火墙,对应的端口开放(虚拟机中建议永久关闭防火墙,云服务器的话需要保证内网互通)

    ◆    统一所有的密码,通过逐台检查机器以防某个节点被遗漏   

进入客户端状态下

sentinel master sentinel-master  查看主节点的状态

sentinel slave sentinel-master  查看从节点的状态

redis-cli -p 26379

sentinel sentinels sentinel-master 查看主节点哨兵相关的信息

总结:经典模式一主二从,不过一旦主节点宕机,从节点无法写出信息,这样就不可用了,为了解决这个问题引入哨兵监控,通过投票机制,把从节点提升为主节点;每个节点都有一个哨兵

采用少数服从多数原则,那么哨兵节点数至少有3个或者为单数,计算方法:节点数除以2再加一,所以3个节点的quorum=2

quorum=投票人数 ,成为队长以后可以负责故障转移,可以决定哪台slave节点提升为master

约定

  • 哨兵节点数要设定为奇数个,避免出现重新投票的情况

  • 哨兵部署在不同的计算机节点防止团灭

  • 一组哨兵只监听一组主从

Springboot集成Redis哨兵配置

spring:

  redis:

    database: 0

    password: 1TdhblkFcdhx2a

    sentinel:

      master: sentinel-master

      nodes: 192.168.1.191:26379,192.168.1.192:26379,192.168.1.193:26379

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

lvdapiaoliang

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

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

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

打赏作者

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

抵扣说明:

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

余额充值