本站所有文章均为原创,如对您有帮助,恳请帮忙点击任何一处广告
  • 首页
  • Redis
  • Redis教程(八)使用sentinel哨兵机制实现Redis的高可用

Redis教程(八)使用sentinel哨兵机制实现Redis的高可用

发布:TangLu2019-10-15 10:44分类: Redis 标签: redis nosql sentinel

一、Redis哨兵的作用

在Redis主从架构中,如果主节点发生故障宕机,由于从服务器配置为只读,写操作就无法进行了。用户通过从服务器读取到的数据也就有可能不是精确的。为了解决这种问题,Redis提供了sentinel哨兵机制来监控Redis所有节点的工作状态,客户端只需要连接到sentinel的地址就可以得知当前环境中的主节点是哪一台。


二、Sentinel工作机制与工作流程

1、主从架构中发生节点下线情况

对于sentinel来说存在主观下线和客观下线两种情况sentinel每秒都会向主从架构中所有节点发出ping命令,如果某个节点没有响应pong就会被认为是主观下线主观下线是指一个sentinel节点判断出主节点下线,而客观下线则是多个sentinel节点协商后作出判断。


2、sentinel的选举

如果主服务器宕机,sentinel会重新选举一个从节点作为主节点来继续工作,而且会告诉客户端新的主节点是哪一台。选举有优先级,优先选举偏移量最大的Slave节点(代表数据最完整),然后选举runID最小的Slave节点(代表最先启动的从节点)。为了防止sentinel自身故障或者自身网络无法连接到主节点导致误判的情况,还可以对sentinel做基数个节点(防止投票时发生脑裂)的集群,当一台sentinel无法连接主节点时,会同其他sentinel节点进行协商,然后以多数为准。


三、Sentinel的配置

在Redis所安装的目录下会有一个sentinel.conf配置文件,建议配置基数个sentinel防止脑裂

bind 192.168.145.85
daemonize yes
protected-mode no  
port 26379
logfile /usr/local/redis/log/sentinel.log
dir /usr/local/redis/data/

sentinel monitor mymaster 192.168.145.85 6379 1  #配置要监控的节点名字、IP、端口以及选举票数。哨兵会通过master自动发现其他slave服务器,该选项可以出现多次,一组sentinel可以监控多组Redis。选举票数建议为节点数/2+1,如果只有一台sentinel就设置为1
sentinel down-after-milliseconds mymaster 30000  #判断master节点是否存活,超过这个时长就将其下线。单位是毫秒,默认是30秒
sentinel parallel-syncs mymaster 1  #哨兵发生切换后允许多少台slave服务器对新master进行同时同步,该项用于减轻压力
sentinel failover-timeout  mymaster 180000  #主节点出现故障时,故障转移超时时间,超出这个时间范围代表切换失败,默认是3分钟
sentinel auth-pass mymaster redispassword  #如果Redis做了密码验证,那么还需要在sentinel做如下配置

# Generated by CONFIG REWRITE  #服务启动后redis会自动重写配置文件增加部分配置
sentinel known-slave mymaster 192.168.145.85 6379
sentinel known-sentinel mymaster 192.168.145.69 26379 be5863ca822028416afdc2edf4f391df0a0302c1
sentinel current-epoch 1



四、启动与验证sentinel

1、配置文件修改好以后,使用bin/redis-sentinel脚本即可启动sentinel,也可以使用redis-server --sentinel的形式来启动,哨兵需要在每个Redis节点上都启动

redis-sentinel /path/to/file.conf  #启动方法1,推荐
redis-server /path/to/file.conf --sentinel #启动方法2

redis-cli -p 26379 -h 192.168.1.100  info  #哨兵端口默认为26379


2、登录redis sentinel查看状态

sentinel masters:列出所有正在监视的主节点
sentinel slaves <master name>:获取指定服务器的所有从节点,这个master name就是配置文件里写的那个名字
sentinel get-master-addr-by-name <master>:根据主节点名字获取其地址,用来查看主节点地址
sentinel reset:重置
sentinel failover mymaster:手动进行故障转移,会根据拥有最新key、序列号最小、配置最高等算法来选举一个从变为主


3、验证redis sentinel的切换

· 手动将主节点的redis服务kill掉,或者登录客户端执行shutdown

· 当主节点redis服务的超时时间达到sentinel down-after-milliseconds所设置的时间后,登录任意一台sentinel执行info命令查看信息,观察address的值是否自动切换,在配置正常的情况下主节点如果下线,那么其他从节点会接替主节点的角色(多个从节点的情况下会将优先级低的从节点提升为主节点,优先级在redis.con中设置),IP也就会发生变化sentinel.png

· 将之前下线的主节点重新上线后,可以看到它成为了一个新的从节点,并且会自动向现在的主库同步数据,它不会自动恢复成主节点。

温馨提示如有转载或引用以上内容之必要,敬请将本文链接作为出处标注,谢谢合作!
et_highlighter51
版权所有:《Linux运维技术学习站点
文章标题:《Redis教程(八)使用sentinel哨兵机制实现Redis的高可用
除非注明,文章均为 《Linux运维技术学习站点》 原创
转载请注明本文短网址:http://www.linuxe.cn/post-374.html  [生成短网址]

已有 0/5081 人参与

发表评论:

欢迎分享Linux运维技术学习站点

欢迎使用手机扫描访问本站,还可以关注微信哦~