redis announce 的问题排查,真的是 Redis 运维里的一个老大难。你是不是也遇到过明明服务好好的,Sentinel 突然就说主节点下线?挺烦人的。其实多时候都是announce-ip没配置好,节点对外报了个内网地址,Sentinel 或客户端压根连不上,就直接判你“死亡”了。

Redis 的主从复制机制,简单说就是主节点负责写,从节点负责读。主节点一边求,一边把数据同步到从节点,响应也快,扩展性还不错。问题是,一旦主节点挂了,从节点得赶紧顶上。这时候,Sentinel就得站出来搞故障切换了。

redis announce是干啥的?其实就是 Redis 节点之间互相“打招呼”,告诉别人自己还活着。Sentinel 会不停地PING主从节点,要是对方不搭理,那就要报警了。你看,这跟平时心跳检测其实一个套路。

重点在于announce-ipannounce-port。默认情况下,Redis 会把自己启动时的 IP 和端口告诉别的节点,但有时候你部署在 Docker 里或者用了内网 IP,对外不可达。这时候你就得手动设定announce-ip,不然别人找不到你,干着急也没用。

排查这类问题,我一般看几个点:网络能不能通(直接ping);redis.confannounce-ip有没有配对;再就是看Sentinel 日志,有没有出现“无法连接”“主节点失效”之类的提示。想更彻底点,可以自己模拟主节点宕机,看看 Sentinel 反应是不是合逻辑。

还有一个坑,客户端连接信息最好和 Sentinel 监控的信息对得上。别你客户端还连着旧主节点,Sentinel 都早换人了。那就读写都乱套,麻烦就大了。

啊,想让 Redis 集群稳定跑,redis announce真不能忽略。你要是用 Redis 搭高可用服务,建议每次部署后都手动确认下announce-ipannounce-port设没设对,日志有没有异常。提前踩坑,总比上线翻车强。

如果你还在理主从复制的配置,可以看看这几篇文章,挺有: