在阿里云搭建 Redis 哨兵集群的坑 sdown sentinel 或者 failover-abort-not-elected

一、问题的开始

​ 前晚加班到 22:30 才下班回去。回去之后洗完澡打开了电脑(23:30)搭建 redis 的哨兵集群,直到了凌晨一点前哨兵还是无法互相通信就睡觉了,第二天还得上班。

​ 今天在公司又重新排查了 sentinel.log 日志文件,让我非常疑惑的是哨兵集群的IP地址我配置的是阿里云服务外网IP地址,怎么显示了内网地址在 sentinel.log 日志文件中,我不禁猜想无法互相通信的问题或许和这点有关。
外网IP:47.93.xxx.xxx
内网IP:172.24.xxx.xxx

2716569:X 07 May 2022 14:23:18.462 # Configuration loaded
2716569:X 07 May 2022 14:23:18.464 * Running mode=sentinel, port=26379.
2716569:X 07 May 2022 14:23:18.464 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
2716569:X 07 May 2022 14:23:18.475 # Sentinel ID is 29f04f4716d615807746be44ae05ee38eba2ddca
2716569:X 07 May 2022 14:23:18.475 # +monitor master mymaster 47.93.xxx.xxx 6379 quorum 2
2716569:X 07 May 2022 14:23:18.556 * +slave slave 106.55.xxx.xxx:6379 106.55.xxx.xxx 6379 @ mymaster 47.93.xxx.xxx 6379
2716569:X 07 May 2022 14:23:18.568 * +slave slave 120.76.xxx.xxx:6379 120.76.xxx.xxx 6379 @ mymaster 47.93.xxx.xxx 6379
2716569:X 07 May 2022 14:23:19.352 * +sentinel sentinel 7a7efa44c63878c3344f0fcb2d31a038e746e841 172.24.54.167 26379 @ mymaster 47.93.xxx.xxx 6379
2716569:X 07 May 2022 14:23:19.362 # +new-epoch 8
2716569:X 07 May 2022 14:23:29.368 # +sdown sentinel 7a7efa44c63878c3344f0fcb2d31a038e746e841 172.24.xxx.xxx 26379 @ mymaster 47.93.xxx.xxx 6379
2716569:X 07 May 2022 14:26:41.241 * +sentinel sentinel 5e4fc64cc3b7df72684e0e0fbed3e94effbed565 47.93.xxx.xxx 26379 @ mymaster 47.93.xxx.xxx 6379
2716569:X 07 May 2022 14:29:49.998 * +sentinel-invalid-addr sentinel 5e4fc64cc3b7df72684e0e0fbed3e94effbed565 47.93.xxx.xxx 26379 @ mymaster 47.93.xxx.xxx 6379
2716569:X 07 May 2022 14:29:49.998 * +sentinel sentinel 2b0f98d8ab3aba94f37f03e1b395d806a411f7d2 47.93.xxx.xxx 26379 @ mymaster 47.93..xxx.xxx 6379
2716569:X 07 May 2022 14:29:50.264 * +sentinel-address-switch master mymaster 47.93.xxx.xxx 6379 ip 47.93.xxx.xxx port 26379 for 5e4fc64cc3b7df72684e0e0fbed3e94effbed565

redis环境:一主三从三哨兵,分别一主一从在阿里云,一从在腾讯云,还有一从是树状架构从节点下的从节点在华为云(和本次的坑没关系)。

运行主从复制相互数据都没问题,然而在哨兵集群的时候出现了问题。哨兵集群一直报主节点主观下线SDOWN

2716569:X 07 May 2022 14:23:29.368 # +sdown sentinel 7a7efa44c63878c3344f0fcb2d31a038e746e841 172.24.xxx.xxx 26379 @ mymaster 47.93.xxx.xxx 6379

在百度、谷歌、必应搜索了都没有寻找到解决方案,最后在csdn 关于redis多个哨兵sentinel在阿里云的坑 sdown sentinel或者failover-abort-not-elected这一篇文章中寻找到解决方案。

二、这个坑的所在问题点:

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


由于我的集群是部署在不同云商家平台,所以我采用了定义sentinel通信被发现的ip地址的解决方案

只需要在sentinel.conf中定义 sentinel announce-ip "ip" 来指定sentinel对外发现的ip地址就可以了,这样,其它sentinel相互通信的时候就不是使用内网ip了,直接使用你定义的当前服务器的ip,就能成功通信了

三、最后解决了 sentinel 集群互相通信问题,尝试了 redis 主从故障转移也是没问题。

2716569:X 07 May 2022 15:04:49.967 # +sdown master mymaster 47.93.xxx.xxx 6379
2716569:X 07 May 2022 15:04:50.050 # +odown master mymaster 47.93.xxx.xxx 6379 #quorum 3/2
2716569:X 07 May 2022 15:04:50.050 # +new-epoch 9
2716569:X 07 May 2022 15:04:50.050 # +try-failover master mymaster 47.93.xxx.xxx 6379
2716569:X 07 May 2022 15:04:50.055 # +vote-for-leader 29f04f4716d615807746be44ae05ee38eba2ddca 9
2716569:X 07 May 2022 15:04:50.096 # 5e4fc64cc3b7df72684e0e0fbed3e94effbed565 voted for 5e4fc64cc3b7df72684e0e0fbed3e94effbed565 9
2716569:X 07 May 2022 15:04:50.096 # 2b0f98d8ab3aba94f37f03e1b395d806a411f7d2 voted for 5e4fc64cc3b7df72684e0e0fbed3e94effbed565 9
2716569:X 07 May 2022 15:04:50.915 # +config-update-from sentinel 5e4fc64cc3b7df72684e0e0fbed3e94effbed565 47.93.xxx.xxx 26379 @ mymaster 47.93.xxx.xxx 6379
2716569:X 07 May 2022 15:04:50.915 # +switch-master mymaster 47.93.xxx.xxx 6379 106.55.xxx.xxx 6379
2716569:X 07 May 2022 15:04:50.915 * +slave slave 120.76.xxx.xxx:6379 120.76.xxx.xxx 6379 @ mymaster 106.55.xxx.xxx 6379
2716569:X 07 May 2022 15:04:50.915 * +slave slave 47.93.xxx.xxx:6379 47.93.xxx.xxx 6379 @ mymaster 106.55.xxx.xxx 6379

云服务器部署微服务,Nacos注册地址及Sentinel监控地址为内网IP的解决办法