k8s 中 搭建redis集群,pod重启后IP变化,集群失败,请问怎么解决
大佬们,我在k8s 中 搭建redis集群成功,pod重启后IP变化,redis集群就有问题了,请问有什么方案能解决这个问题,redis 6.0.9 的版本。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
大佬们,我在k8s 中 搭建redis集群成功,pod重启后IP变化,redis集群就有问题了,请问有什么方案能解决这个问题,redis 6.0.9 的版本。
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(30)
此方案过于繁琐,当前选择简单的swarm方案代替
第一个问题:为什么你的可以正常更新其他POD的IP信息?自己的IP你可以写脚本更新。写一个update-node.sh的脚本。参考这个:https://rancher.com/blog/2019/deploying-redis-cluster?#
用外部端口,会转发POD的ip,外部应用没法连接。
redis cluster是p2p模式,不走代理,无法外部访问
必须搭配一个redis cluster proxy
删除所有pod,重新创建你试过没,其他POD的IP能自动更新吗
第二个问题:你的外部网络不能访问集群,你有创建service吗?我的是可以的。
回复
@活灬在当灬下 : 有创建service,nodeport类型的,部署服务到k8s,用内部端口访问redis,是没有问题的。但是如果在集群外启动应用(比如用idea intellij执行本地启动java应用),然后用k8s集群中任意一个node的ip+nodeport去访问,就会发生timeout。博主我不知道你是不是这样试的,具体你看我下面的截图。
回复
@活灬在当灬下 : 一下子删除所有pod,再重新创建我试过,是不能的。整个集群就直接不可用了。slot的分布都是混乱的。
用的就是statefulset
关键是pv中nodes.conf 里面都是IP啊
我也是用的statefulset部署的,百度中的部署方案都是雷同的,一个抄一个。我目前遇到两个我自己无法解决的问题,其中一个就是博主你问题的问题:
回复
@活灬在当灬下 : 你配置成服务名称就行:bowtie:
关键nodes.conf里使用的是IP啊
回复
@_snake_ : redis-cli或者redis-trib工具,都只能支持ip来初始化集群吧,你是怎么操作的?
回复
@活灬在当灬下 : svc的ip不变
这种就不能用ip了,应该用servicename(类似于一长串 域名地址,比如:xxxx.redis.cn ) 的形式访问了吧。
redis地址采用svc.namespace:port方式即可
用的是headless,主要是nodes.conf里面 存的是 pod的IP,怎么解决啊
使用headless发布服务,使用pod的域名进行连接
回复
邮箱私信发给你了,感谢:pray:
回复
@活灬在当灬下 : 这回复里面不能提交附件啊,好几个文件。
回复
求一份邮箱 zhuchance@126.com
回复
@活灬在当灬下 : https://gitee.com/overroot/redis-cluster-on-k8s 刚建立了一个git库,你试试吧。
回复
@潇洒北冥鱼 :https://gitee.com/overroot/redis-cluster-on-k8s 在这个库里面
使用update-node.sh的方案,也不行。
是用的这个但是不行啊。
回复
@活灬在当灬下 : 使用helm chart没有,参考这个https://github.com/helm/charts/tree/master/stable/redis
回复
@活灬在当灬下 : 肯定能解决的,不然那些大厂的redis集群是怎么上云的
回复
@活灬在当灬下 : 你把你的chart放到github上或者gitee上,我们一起来看下
使用statefuleset