Redis从入门到放弃系列(九) Sentinel

Redis从入门到放弃系列(九) Sentinel

本文例子基于:5.0.4

Redis Sentinel作为Redis高可用方案,具有监听,通知,自动故障转移等功能.这一切都是依赖主备同步的大前提(参考上一节:Redis从入门到放弃系列(八) 主备同步).

  • 监听: Sentinel会不断检查master节点跟replica节点是否正常工作
  • 通知: 当某个节点运行出现问题的时候,能够通知其他的进程(eg:客户端)
  • 自动故障转移: 当master节点down了,Sentinel会启用故障转移进程,将replica节点提升为master节点,其他的replica节点重新配置新的master节点,并且告知客户端需要重新连接的是哪个master地址.

在互联网应用中,程序如果只是单台部署的话,都会存在单点问题,那么作为Redis高可用方案的Sentinel是如何解决这一问题呢?

欢迎关注微信公众号黑搜丶D(black-search)

启动方式

  • redis-server sentinel配置文件 --sentinel
  • redis-sentinel sentinel配置文件

Sentinel配置

sentinel monitor mymaster 127.0.0.1 6379 2
sentinel down-after-milliseconds mymaster 60000
sentinel failover-timeout mymaster 180000
sentinel parallel-syncs mymaster 1

以上配置为Sentinel最少配置。

  • sentinel monitor <master-group-name> <ip> <port> <quorm> 监听127.0.0.1地址的6379端口,为其命名为mymaster,当集群有2个Sentinel节点认为mymaster节点down了才客观的下线。

其他Sentinel配置

sentinel <option_name> <master_name> <option_value>
  • down-after-milliseconds 以毫秒为单位,当超过该时间没有心跳,Sentinel则主观认为该节点已经关闭,只有绝大部分Sentinel判定该节点已经关闭,才会启动故障转移(即客观下线)
  • parallel-syncs 指定了在执行故障转移时,最多可以有多少个从服务器同时对新的主服务器进行同步,这个数字越小,完成故障转移所需的时间就越长(当故障转移的时候,每次只允许该值数量的replica节点同步到新节点,那么如果集群中有比较多的replica节点,就需要耗时长一些,但是设置比较多的replica又会因为RDB造成replica节点短时间不可用)
  • failover-timeout 故障转移超时时间
    • 在先前的故障转移已经由一个给定的Sentinel对同一个主机进行了尝试之后,重新启动故障转移所需的时间是故障转移超时的两倍
    • 使用新的replicate节点作为master节点,并且强制使用新master的数据备份作为其他replica节点的数据的超时时间
    • 取消已在进行中但未产生任何配置更改的故障转移所需的时间(新master节点还没有同步到其他的replica节点)
    • 正在进行的故障转移等待所有replica重新配置为新master服务器副本的最长时间

主观下线 && 客观下线

  • 主观下线: 单个sentinel程序对服务器做出的下线判断
  • 客观下线: 指多于quorm个sentinel程序对服务器做出的下线判断.

sentinel程序会对redis节点发送PING命令,如果redis节点没有正确回复sentinel的请求的话 or 指定时间内没有回复,那么sentinel程序会认为该redis主观下线.

有效回复:

  • +PONG
  • -LOADING
  • -MASTERDOWN

客观下线条件只适用于master节点,对于其他的replica节点,sentinel在将他们判断为主观下线的话即下线. 只有参与了判断客观下线的sentinel程序才有可能参与故障转移操作.

我们在设置sentinel集群程序的时候,不需要在对应的配置文件中设置不同节点的sentinel的配置信息,那么sentinel是如何知道彼此且发送消息的呢?

自动发现sentinel和replica节点

sentinel通过发布/订阅功能来发现其他的sentinel程序,这一功能是通过向频道__sentinel__:hello发送信息来实现的。 发现replica节点是通过询问master节点来获取所有从服务器的信息.

  • 每个sentinel按照2秒一次的频率向被它监听的master跟replica节点的__sentinel__:hello频道发送一条包含sentinel的信息的消息.
  • 每个sentinel都订阅了被它监听的频道,查找没有出现的sentinel,将其加入sentinel列表

搭建sentinel集群

首先要确保已经搭建了master-replica主备

1.copy一份sentinel.conf配置文件,分别修改为sentinel_26379.conf sentinel_26380.conf sentinel_26381.conf.修改如下内容:

//指定端口
port 26379
//设置后台启动
daemonize yes
//设置pidfile
pidfile "/var/run/redis-sentinel_26379.pid"
//设置日志存放地点,方便查看问题
logfile "/var/log/redis-sentinel_26379.log"
//设置监听的master节点
sentinel monitor mymaster 127.0.0.1 6379 2

2.分别执行 redis-sentinel sentinel_26379.conf配置文件启动。 启动sentinel之前需要先准备好redis master-replica主备已经启动~

赞(52) 打赏
未经允许不得转载:优客志 » 数据库

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏