关于redis多个哨兵sentinel在阿里云的坑 sdown sentinel或者failover-abort-not-elected

关于redis多个哨兵sentinel在阿里云的坑

  • sentinel之间不能相互通信的坑
  • 解决方案(下面两个选一)
    • (1)阿里云安全组内网访问
    • (2)推荐:定义sentinel通信被发现的ip地址

sentinel之间不能相互通信的坑

这两天在三台阿里云服务器上搭建redis集群,遇到个问题,试了网上的bind 0.0.0.0protected-mode no仍然还是有问题,网上百度和谷歌了很久,都没有看到网上有解决办法,故记录这个坑,便别人参考。

redis环境: 一主二从三哨兵,都运行在阿里云服务器上

运行主服务器两从服务器,ok,相互数据也没问题,然后在三台服务器上运行这三个哨兵

+sdown sentinel xxxxxxxxx

在检测时间到后(默认30s),3个哨兵都显示另外两哨兵挂了(sdown sentinel)
模拟 主服务器 宕机,shutdown掉, 三个哨兵都无法选举 并且各自都显示+sdown master
,但是无法+odown master
因为设置的哨兵投票需要2票(sentinel monitor mymaster xx.xx.xx.xx 6379 2),然后三个哨兵都只显示sdown并不能odown所以无法重新选举,故想着把投票数要求设置为1(sentinel monitor mymaster xx.xx.xx.xx 1),这次再模拟挂机,能够成功odown了,但是却任然无法重新选举:

failover-abort-not-elected

解决方案(下面两个选一)

这里问题在于sentinel无法相互通信,而我已经放行了阿里的外网端口对应安全组,和linux的防火墙,仍然无法通信,这个为什么呢?其实是sentinel默认使用的阿里云服务器17开头的内网ip,并不是对应的外网ip,而它们内网之间默认是无法访问的,解决办法自然就是让他们正常访问就行了:

(1)阿里云安全组内网访问

这个在这里只是提供一种思路,你去百度就行了,一搜一大把,让安全组内网之间可以相互通信就可以了

关于redis多个哨兵sentinel在阿里云的坑 sdown sentinel或者failover-abort-not-elected_第1张图片

(2)推荐:定义sentinel通信被发现的ip地址

这个方法是推荐的方法,很简单,你只需要在sentinel.conf中定义sentinel announce-ip "你服务器的ip"来指定sentinel对外发现的ip地址就可以了,这样,其它sentinel相互通信的时候就不是使用内网ip了,直接使用你定义的当前服务器的ip,就能成功通信了。
在这里插入图片描述

你可能感兴趣的:(关于redis多个哨兵sentinel在阿里云的坑 sdown sentinel或者failover-abort-not-elected)