Redis Sentinel配置详解和实践

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/IT_10/article/details/89430325

由于主从复制存在一个问题:master宕机,需要选中一个slave,执行“slaveof no one”,然后对其余slave执行“slaveof new master”,客户端选择读写新的master,可手动转移,也可写脚本(实现复杂),从而出现Redis Sentinel架构,实现监控节点异常,故障转移,通知客户端的功能,对于客户端来说不会去记录redis地址,而是记录sentinel地址,与sentinel通信。
Redis Sentinel故障转移步骤:

  1. 多个sentinel发现并确认master有问题
  2. 选举一个sentinel作为领导
  3. 选举一个slave作为master
  4. 通知其余slave成为新的master的slave
  5. 通知客户端主从变化
  6. 等待老的master复活成为新master的slave

配置

我的redis目录结构,其中,各种自定义的配置都放在config目录下,日志等放在data下
在这里插入图片描述
先配置主从redis,参见https://blog.csdn.net/IT_10/article/details/89424422
在这里插入图片描述
其中,7000端口为master,7001和7002为slave
Sentinel主从配置主要部分:

  1 port 26379
  2 daemonize yes
  3 pidfile /var/run/redis-sentinel.pid
  4 dir /usr/local/redis/redis-5.0.4/data/
  5 logfile "sentinel-26379.log"
  # 2 的意思是当两个 sentinel monitor发现master有问题时则认定该master有问题
  6 sentinel monitor mymaster 127.0.0.1 7000 2   
  #ping了30000毫秒还没ping通则认定master有问题
  7 sentinel down-after-milliseconds mymaster 30000
  #选择新的master后,slave要对新的master进行复制,1表示并发,每次复制一个,减轻master压力
  8 sentinel parallel-syncs mymaster 1
  #180000表示故障转移时间
  9 sentinel failover-timeout mymaster 180000
 10 sentinel deny-scripts-reconfig yes

将redis目录下的sentinel.conf文件复制一份到config目录下,在利用以下命令将sentinel.conf中的代码去掉注释和空行后的代码输入到redis-sentinel-26379.conf文件中,然后做简单的修改就生成上述代码。

cat sentinel.conf | grep -v "#"| grep -v "^$" > redis-sentinel-26379.conf

需要的配置文件如下
在这里插入图片描述
7000端口监听主redis,7001和7002端口监听从redis,其余三个是sentinel的配置文件
输入命令 redis-cli -p 26380 info查看sentinel信息
在这里插入图片描述
可以看到,sentinels=3,slaves=2
再次输入命令netstat -ntlp查看启动状态
在这里插入图片描述

测试

现在,kill -9 4667,也就是模拟7000端口的redis宕机
然后查看7001端口redis的日志,其尝试连接7000失败后,受到命令MASTER MODE enabled…,即让它成为主redis
在这里插入图片描述
可以看到,7001成为主redis
在这里插入图片描述
再看7002端口redis的日志
在这里插入图片描述

相关概念

三个定时任务
1.每10s每个sentinel对master和slave执行info;
发现slave节点、确认主从关系
2.每2s每个sentinel通过master节点的channel交换信息,达成共识;
如加入一个sentinel节点的时候,其他节点都会知道加入新的节点
其通信方法是通过一个_sentinel _ :hello的管道,每个sentinel将消息发布到这个管道,并且订阅这个管道。
3 每1s每个sentinel对其他sentinel和redis执行ping命令。
领导者选举
因为只有一个sentinel节点能够完成故障转移,所以通过选举,选出这个sentinel在这里插入图片描述故障转移
在这里插入图片描述
选择slave当做新的master
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/IT_10/article/details/89430325