本文主要是介绍用sentinel作Redis集群,总结下自己遇到的坑,以及探讨下改如何设置哨兵模式,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
先写总结
1.sentinel 的配置文件要配置master的密码:sentinel auth-pass mymaster phFUND_linux_redis。
2.为了主从能自由切换请给主从都配置好密码,而且要设置相同的密码(完成切换后,因为从没有配置masterauth,导致重启后连接不上主):
masterauth "phFUND_linux_redis"
requirepass "phFUND_linux_redis"
3.因为使用了别人的配置文件,在主从切换时一直超时,所以强烈建议各位在部署时,使用该版本redis自带的配置文件进行配置,且一定要保证配置项的顺序和原版保持一致。针对自己的需要修改配置项。如果不一致,可能会报错。
4.会看sentinel的日志。:
+try-failover master mymaster 172.**.**.117 6379(开始尝试进行failover)
+vote-for-leader e2a313dd66f8e8df829628d4580d77f840ebb068 4(sentinel配置文件中的myid,确认leader sentinel)
+elected-leader master mymaster 172.**.**.117 6379(已存在的master节点)
+failover-state-select-slave master mymaster 172.**.**.117 6379(分析master的slave状态)
+selected-slave slave 172.**.**.117:7379 172.**.**.117 7379 @ mymaster 172.**.**.117 6379(已选出一个原master的slave)
+failover-state-send-slaveof-noone slave 172.**.**.117:7379 172.**.**.117 7379 @ mymaster 172.**.**.117 6379(将新的slave进行主从切换)
+failover-state-wait-promotion slave 172.**.**.117:7379 172.**.**.117 7379 @ mymaster 172.**.**.117 6379(等待slave升级中)
+promoted-slave slave 172.**.**.117:7379 172.**.**.117 7379 @ mymaster 172.**.**.117 6379(升级完成)
+failover-state-reconf-slaves master mymaster 172.**.**.117 6379(重写原master的配置文件)
+slave-reconf-sent slave 172.**.**.117:7381 172.**.**.117 7381 @ mymaster 172.**.**.117 6379(重写所有slave的配置文件)
+slave-reconf-inprog slave 172.**.**.117:7381 172.**.**.117 7381 @ mymaster 172.**.**.117 6379(重写所有slave的配置文件)
+slave-reconf-done slave 172.**.**.117:7381 172.**.**.117 7381 @ mymaster 172.**.**.117 6379(重写所有slave的配置文件)
+slave-reconf-sent slave 172.**.**.117:7380 172.**.**.117 7380 @ mymaster 172.**.**.117 6379(重写所有slave的配置文件)
+slave-reconf-inprog slave 172.**.**.117:7380 172.**.**.117 7380 @ mymaster 172.**.**.117 6379(重写所有slave的配置文件)
+slave-reconf-done slave 172.**.**.117:7380 172.**.**.117 7380 @ mymaster 172.**.**.117 6379(重写所有slave的配置文件)
+failover-end master mymaster 172.**.**.117 6379(failover结束)
+switch-master mymaster 172.**.**.117 6379 172.**.**.117 7379(slave节点已经升级为master)
+slave slave 172.**.**.117:7381 172.**.**.117 7381 @ mymaster 172.**.**.117 7379(为新的master节点确认slave节点)
+slave slave 172.**.**.117:7380 172.**.**.117 7380 @ mymaster 172.**.**.117 7379(为新的master节点确认slave节点)
+slave slave 172.**.**.117:6379 172.**.**.117 6379 @ mymaster 172.**.**.117 7379(为新的master节点确认slave节点)
+sdown slave 172.**.**.117:6379 172.**.**.117 6379 @ mymaster 172.**.**.117 7379(原master节点变为slave,且主观下线)
-sdown slave 172.**.**.117:6379 172.**.**.117 6379 @ mymaster 172.**.**.117 7379(重启了,恢复状态)
+convert-to-slave slave 172.**.**.117:6379 172.**.**.117 6379 @ mymaster 172.**.**.117 7379(已转换为新master 的slave)
5.sentienl常用命令:1)进入sentinel : redis-cli -h <IP> -p <port> 。2)查看集群所有master的状态:sentinel masters 。 3)查看某个master的所有slave:sentinel slaves <mastername> 4)Ssentinel failover <master name> 强制进行一次故障转移,并通知其他sentinel转移情况。
6.sentinel的配置:
port 26379
protected-mode no(允许所有地址的访问,如果是yes则只允许本机,默认是yes。文档显示设置了bind和密码的话该设置不会生效)
logfile "/home/session/redis/logs/redis_26379.log"(日志地址,如果配置了该地址,则不会打印堆栈。)
sentinel myid e2a313dd66f8e8df829628d4580d77f840ebb068(sentinel的唯一ID)
sentinel monitor mymaster 172.18.50.117 7379 1
sentinel down-after-milliseconds mymaster 30000(多少毫秒判定master宕机) sentinel parallel-syncs mymaster 1(同步时允许最多几台slave同步master,数字越小同步时间越久,在同步的过程中不能提供服务,所以配置大了也不好,依情况而定)
daemonize yes(守护线程模式)
dir "/tmp"
# Generated by CONFIG REWRITE
maxclients 4064(自动生成,也可以自己配置)
sentinel failover-timeout mymaster 150000(多少毫米未切换完成则判定失败)
sentinel auth-pass mymaster phFUND_linux_redis(密码要配置)
sentinel config-epoch mymaster 4(自动生成)
sentinel leader-epoch mymaster 4(自动生成)
sentinel known-slave mymaster 172.18.50.117 6379(自动生成)
sentinel known-slave mymaster 172.18.50.117 7381(自动生成)
sentinel known-slave mymaster 172.18.50.117 7380(自动生成)
sentinel current-epoch 4(自动生成)
项目和环境介绍
因为公司的测试环境的Redis老是挂,导致系统启动报错。一直没人管,所幸我自己看看。
问题:一台master挂掉,无法进行故障转移,不能选举从。
先上个测试环境的架构图:
分片规则是在应用层实现的,比较简单,直接用hash值对接连数取模计算节点,没有用一致性hash,扩展性很差。
而且,一个哨兵监控了两个master,实在不明白如果请求sentinel它到底会把请求发给哪个master。
即便可以,也不建议这样配置,一个哨兵挂了,会导致两个主从集群的监控都出问题。
建议用这个作者的设置:https://blog.csdn.net/men_wen/article/details/72724406。
因为测试环境只有两台服务器,一般哨兵不太可能会挂,所以我改成了如下:
这篇关于用sentinel作Redis集群,总结下自己遇到的坑,以及探讨下改如何设置哨兵模式的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!