[英]How to reconnect Redis cluster nodes?
我有一个由6个节点组成的Redis集群,作为状态集在我的Kubernetes集群中运行。 由于它是用于测试且尚未投入生产,因此所有Redis节点都在同一台机器上。 当然,机器出现故障,Redis的所有节点立即崩溃。 当计算机恢复运行时,将重新创建Pod,并为其分配了不同的群集ip,因此它们无法相互重新连接。
我需要找到针对此类灾难案例的解决方案。 假设所有节点都被重新分配了不同的ip,如何配置这些节点以获取其他ip?
使用CLUSTER RESET命令可以很容易地重置从站,但是主站包含不应删除的插槽和数据。
我应该手动重写nodes.conf吗? 恐怕会使情况变得更糟? 我有已知的处理方法吗?
谢谢!
找到一个解决方案:
第一步是在Pod启动时更改node.conf中的当前Pod ip。 您可以使用此脚本来实现
#!/bin/sh
CLUSTER_CONFIG="/data/nodes.conf"
if [ -f ${CLUSTER_CONFIG} ]; then
if [ -z "${POD_IP}" ]; then
echo "Unable to determine Pod IP address!"
exit 1
fi
echo "Updating my IP to ${POD_IP} in ${CLUSTER_CONFIG}"
sed -i.bak -e "/myself/ s/[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}/${POD_IP}/" ${CLUSTER_CONFIG}
fi
exec "$@"
您应该通过调用此脚本并将原始的redis-server start命令传递给该脚本来启动任何pod。
现在,群集中的每个Pod都已设置了正确的IP。
redis-cli shutdown
重新启动您已编辑的pod。 Kubernetes将为此设置一个新的pod。 新容器的IP将由我在上面添加的脚本设置。 我认为,在应用程序中任何位置引用Redis集群时,您都不应完全依赖Pods的内部IP地址。 豆荚是致命的,这意味着它们被设计成会崩溃的。 因此,当节点死亡时,它们也会被破坏。 当节点复活时,将使用新的IP地址重新创建POD。
定位您荚正确的方法是通过他们的DNS名称(如解释在这里 ),如果您创建的Redis集群有状态应用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.