容器化redis-cluster使用(一)集群自身ip变化更新问题
最近把redis-cluster集群迁移到了k8s上后发生了一个问题,当一个pod重启后,java程序报错,连不上redis服务器。我们查看集群状态后发现,当pod重启后,pod的ip发生了改变(我们并没有固定redis-cluster的pod的ip),去非重启pod使用cluster nodes查看集群信息,一切正常,但在重启pod节点查看集群信息,发现集群信息中使用的还是重启前的p...
最近把redis-cluster集群迁移到了k8s上后发生了一个问题,当一个pod重启后,java程序报错,连不上redis服务器。我们查看集群状态后发现,当pod重启后,pod的ip发生了改变(我们并没有固定redis-cluster的pod的ip),去非重启pod使用cluster nodes查看集群信息,一切正常,但在重启pod节点查看集群信息,发现集群信息中使用的还是重启前的pod的ip。也就是说,当pod重启后,该pod中的redis实例通知了集群中其他成员更新了Cluster topology,但自身却没有更新,截图如下:
这是redis集群信息,大家注意redis-0的ip地址,我们重启redis-0后,redis-0的ip地址如下:
pod启动了47s,其他都是25m,证明重启了,重启后ip地址为172.255.211.7,我们进去redis-0查看集群信息:
发现还是使用重启前的pod的ip,并没更新,再去其他redis节点查看集群信息:
发现集群信息正常,那怎么让他通知自己也更新Cluster topology呢?
参考:https://github.com/antirez/redis/issues/4289这个issue,在启动参数中加入选项
--cluster-announce-ip
最后yaml文件中启动参数如下:
- "/etc/redis.conf"
- "--protected-mode"
- "no"
- "--cluster-announce-ip"
- "$(POD_IP)"
再重启pod节点,问题解决。
更多推荐
所有评论(0)