繁体   English   中英

如何重新连接Redis集群节点?

[英]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。

  1. 确保群集的Pod稳定且不会崩溃。
  2. 在其中一个窗格中手动编辑nodes.conf。 设置正确的IP而不是已弃用的IP。
  3. 使用redis-cli shutdown重新启动您已编辑的pod。 Kubernetes将为此设置一个新的pod。 新容器的IP将由我在上面添加的脚本设置。

我认为,在应用程序中任何位置引用Redis集群时,您都不应完全依赖Pods的内部IP地址。 豆荚是致命的,这意味着它们被设计成会崩溃的。 因此,当节点死亡时,它们也会被破坏。 当节点复活时,将使用新的IP地址重新创建POD。

定位您荚正确的方法是通过他们的DNS名称(如解释在这里 ),如果您创建的Redis集群有状态应用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM