菜单

Administrator
发布于 2026-05-16 / 1 阅读
0
0

Redis高可用

Redis高可用

哨兵(Sentinel)机制

Redis提供了哨兵(Sentinel)机制来解决主服务器挂了的问题。如果主服务器挂了,可以将从服务器升级为主服务器,等到旧的主服务器重连上来,会将它变成从服务器。这个过程叫做主备切换(故障转移)。

一、哨兵(Sentinel)机制功能

  1. Monitoring:Sentinel不停地监控Redis主从服务器是否正常工作
  2. Notification:如果某个Redis实例有故障,Sentinel负责发送消息通知管理员
  3. Automatic failover:如果主服务器挂掉了,会自动将从服务器提升为主服务器
  4. Configuration provider:Sentinel可以作为配置中心,能够提供当前主服务器的信息

二、启动和初始化Sentinel

Sentinel本质上只是一个运行在特殊模式下的Redis服务器。Sentinel在初始化的时候并不会载入AOF/RDB文件。

Sentinel会创建两个连向主服务器的网络连接:

  • 命令连接(发送和接收命令)
  • 订阅连接(订阅主服务器的_sentinel_:hello频道)

三、获取和更新信息

Sentinel通过主服务器发送INFO命令来获得主服务器属下所有从服务器的地址信息。

在Sentinel运行的过程中,通过命令连接会以每两秒一次的频率向监视的主从服务器的_sentinel_:hello频道发送命令。

四、判断主服务器是否下线

主观下线

Sentinel以每秒一次的频率向实例发送PING命令,如果一个主服务器在down-after-milliseconds毫秒内连续向Sentinel发送无效回复,那么当前Sentinel就会主观认为该主服务器已经下线了。

客观下线

当Sentinel将一个主服务器判断为主观下线以后,会向同样监视该主服务器的Sentinel询问,如果足够多的Sentinel认为该主服务器是下线的,那么就判定该主服务为客观下线,并对主服务器执行故障转移操作。

五、选举领头Sentinel和故障转移

当一个主服务器认为为客观下线以后,监视这个下线的主服务器的各种Sentinel会进行协商,选举出一个领头的Sentinel,领头的Sentinel会对下线的主服务器执行故障转移操作。

故障转移包括三个步骤:

  1. 在已下线主服务器属下的从服务器中,挑选一个转换为主服务器
  2. 让已下线主服务器属下的所有从服务器改为复制新的主服务器
  3. 已下线的主服务器重新连接时,让他成为新的主服务器的从服务器

挑选从服务器作为主服务器的策略:

  1. 跟master断开连接的时长
  2. slave优先级
  3. 复制offset
  4. run id

六、数据丢失

Redis主从+哨兵架构可能会丢失数据的情况:

  1. 异步复制导致的数据丢失:有部分数据还没复制到从服务器,主服务器就宕机了
  2. 脑裂导致的数据丢失:主服务器脱离正常网络,跟其他从服务器不能连接,哨兵将某个从服务器切换成了主服务器,但旧主服务器还运行着

可以通过以下配置尽量减少数据丢失:

min-slaves-to-write 1
min-slaves-max-lag 10

评论