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

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

发布:TangLu2018-10-1 10:14分类: Redis 标签: redis nosql sentinel

试想这样一种情况,如果当前Redis部署为一主多从的结构,主节点发生故障宕机,写操作就无法进行了(Redis的从服务器一般是read-only),用户通过从服务器读取到的数据也就有可能不是精确的。为了解决这种问题,Redis提供了sentinel哨兵机制来监控Redis所有节点的工作状态,然后客户端程序也是连接sentinel服务器的地址来获取服务。如果主服务器宕机,sentinel会重新选举切换一个从节点作为主节点来继续工作,而且会告诉客户端新的主节点是哪一台。为了防止sentinel自身故障或者自身网络无法连接到主节点导致误判的情况,还可以对sentinel做基数个节点(防止投票时发生脑裂)的集群,当一台sentinel无法连接主节点时,会同其他sentinel节点进行协商,然后以多数为准。


sentinel相关程序:

部署好Redis后在bin目录下就会有一个redis-sentinel的程序用于启动sentinel,也可以使用redis-server --sentinel来启动,所以我们要在每个正常工作的Redis节点上额外配置sentinel并启动

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


sentinel工作流程:

sentinel存在主观下线和客观下线两种情况

主观下线:一个sentinel节点实例判断出某主节点下线

客观下线:多个sentinel节点协商后作出判断

sentinel每秒都会向Redis的所有节点发出ping命令,如果Redis节点没有响应pong,那么就会被认为是主观下线


sentinel的配置:

在Redis所安装的目录下会有一个sentinel.conf配置文件,先看看一个配置示例:

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
sentinel down-after-milliseconds mymaster 30000
sentinel parallel-syncs mymaster 1
sentinel failover-timeout  mymaster 180000
#sentinel auth-pass mymaster redispassword

前面几个内容和redis.conf是一样的,不再做解释,看看sentinel新增配置:


1、通过sentinel monitor配置来指定要监控的Redis master服务器(只需要master服务器就可以了,哨兵会通过master自动发现其他slave服务器,该选项可以出现多次,一组sentinel可以监控多组Redis)以及sentinel防止误判时进行投票的选举票数,一般设定为sentinel服务器的半数+1,如果只有一台sentinel就设置为1

语法格式:

#sentinel monitor <master_name> <master_ip> <port> <quorum>
#<master_name>:给master起个别名
#<master_ip>:redis master节点的IP地址
sentinel monitor redis-host1 192.168.1.100 6379 2

2、通过sentinel down-after-milliseconds配置来判断master节点是否存活,超过这个时长就将其下线。单位是毫秒,默认是30秒

sentinel down-after-milliseconds mymaster 30000


3、哨兵服务器执行转移后,允许多少台slave服务器对新master服务器进行连接,这个是为了减轻服务压力

sentinel parallel-syncs <master-name> <numslaves>


4、主节点出现故障时,sentinel进行failover故障转移的超时时间,超出这个时间范围代表切换失败,默认是3分钟

sentinel failover-timeout  <master-name> <milliseconds>
sentinel failover-timeout  mymaster 180000


5、如果Redis做了密码验证,那么还需要在sentinel做如下配置

sentinel auth-pass mymaster redispassword


6、当服务启动后redis还会自动重写一次配置文件,增加部分配置选项

# Generated by CONFIG REWRITE
sentinel known-slave mymaster 192.168.145.85 6379
sentinel known-sentinel mymaster 192.168.145.69 26379 be5863ca822028416afdc2edf4f391df0a0302c1
sentinel current-epoch 1


启动与验证sentinel:

在所有Redis主从节点上都配置和启动sentinel,需要注意sentinel配置文件上的monitor都必须是master的地址,默认监听端口是26379,可以用redis-cli连接sentinel查看下信息,注意端口

redis-cli -p 26379 -h 192.168.1.100
info


登录redis sentinel客户端后可以使用以下命令查看状态:

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


验证redis sentinel:

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

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

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

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

已有 0/2092 人参与

发表评论:

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

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