Redis-ha(sentinel)
redis的sendtinel 是用来管理多个redis服务器的
- 作用
• 监控:监控主从服务器是否运作正常(通过给服务器发送心跳包的方式)
• 提醒:当某个Redis服务器出现异常时,可以通过api发送通知给管理员
• 自动故障转义:当主服务器失效时他会执行故障转移,他会将失效的主服务器标识为不可用,然后通过选举协议 在失效的主服务器中的从节点中选出来一个新的master,告诉其他的从服务器从新的master复制,当客户端连接master服务器时,sentinel也会将新的master地址告诉客户端(从这个地方可以看出,客户端要连接master,要从sentinel那里获取master的真实地址)
- 启动sentinel
redis-server /path/to/sentinel.conf --sentinel (使用redis-server 后面必须带上 --sentinel)
或者
src/redis-sentinel sentinel.conf
启动sentinel服务,必须要指定他的配置文件,系统会通过配置文件记录sentinel状态,当sendtinel重启,再通过配置文件还原sentinel状态
如果没有指定配置文件,或者指定的配置文件不可写,那么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 monitor resque 192.168.1.3 6380 4 // sentinel down-after-milliseconds resque 10000 // sentinel failover-timeout resque 180000 // sentinel parallel-syncs resque 5 //
• sentinel monitor mymaster 127.0.0.1 6379 2: 指定sentinel所监控的主服务器:127.0.0.1,服务器的端口号:6379,将这个服务器判断为失效至少需要2个sentinel同意。(注意:无论设置多少个sentinel·同意,同意执行sentinel的数量必须要大于 所有sentinel数量的一半)才会执行故障转移
• sentinel down-after-milliseconds mymaster 60000:指定了sentinel 认为主服务断线的毫秒数,如果在给定的时间内,主服务器没有返回sentinel ping命令的回复,或者回复个错误,那么sentinel就认为服务挂了,这时该sentinel会将服务标记为sdown(主观下线),当大多数sentinel也认为服务挂掉时,会标记这个服务为(odown)客观下线。将主服务器标记为客观下线的sentinel数量,由主服务器的配置决定
• sentinel parallel-syncs:在执行故障转移时,最多有几个从服务器同时对新的master做同步数据请求,这个值越小指定故障转移的时间就越长。
如果从服务器允许使用过期数据,可能你不想同时所有的从服务器都向new master发送同步请求,虽然在复制的过程中大多数步骤不会堵塞从服务器,但是从服务器在载人new master过来的rdb文件时,任然会有短时间不能处理命令请求,所以如果所有从服务器同时发送同步请求,可能短时间所有的服务将都不可访问。
所以可以将这个值设置:1 。每次都只有一个从服务同步数据(不能处理请求命令)
- 主观下线和客观下线
• 主观下线:单个sentinel实例对master 做出下线判断
如果master在【sentinel down-after-milliseconds mymaster】这个配置的时间内,没有对向他发送ping命令的sentinel一个有效的回复,那么这个sentinel就会标识这个服务为主观下线
• 客观下线:大多数sentinel实例对master 做出主观下线判断
他们是通过【SENTINEL is-master-down-by-addr】命令来交流判断得出master是否下线。也就是说一个sentinel 可以通过【SENTINEL is-master-down-by-addr】命令,向另一个sentinel 询问他所监控的master是否下线
master对ping命令的有效回复是下面三个:
• 返回 +PONG 。
• 返回 -LOADING 错误。
• 返回 -MASTERDOWN 错误。
如果在给定的时间没有回复 或者 不是上面的三种回复,sentinel都认为是无效回复。
注意:master必须在【sentinel down-after-milliseconds mymaster】这个配置的时间内,一直给sentinel返回无效回复,sentinel才会给master标记为主观下线。例如:【sentinel down-after-milliseconds mymaster】配置时间为30秒,那么只要master在29秒之内有一次返回的是有效回复,那么就不会标记为主观下线。
当sentinel 从其他sentinel收集到足够数量的主观下线的报告后,就会将master置为客观下线,并开始执行故障转移
- 每个sentinel都需要定期执行的任务
• 每个sentinel都会以每秒一次的频率向它所知的master,salve,其他 sentinel 发送ping 命令
• 如果master 在 【sentinel down-after-milliseconds mymaster】这个配置的时间内 没有回复给监控它的sentinel 回复一个有效的ping 回复,那么master就会被监控的它的sentinel标记为主观下线
• 如果master被标记为主观下线,那么监控它的所有sentinel 都将会以每秒一次的频率确认
• 主服务器是否进入主观下线状态
• 如果master被确认为主观下线 并有一定数量(配置文件配置)sentinel 都同意这一次判断,那么master将切换到客观下线状态
• 一般情况下,没个sentinel 会向他所知的master和slave 以10秒一次的频率发送info指令;当master被标记为客观下线时 这个频率会改到一秒一次
• 当在【sentinel down-after-milliseconds mymaster】这个配置的时间内 没有一定数量的sentinel同意master下线时,客观状态就会移除,再切换到主观状态,当主服务器从新向sentinel返回有效的ping 回复时,master就会移除主观下线状态
参考文档:http://www.redis.cn/topics