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

标签 redis kubernetes redis-cluster kubernetes-statefulset

我有一个包含 6 个节点的 Redis 集群,作为有状态集在我的 Kubernetes 集群中运行。由于它是用于测试而不是生产,所有的 Redis 节点都在同一台机器上。当然,机器出了故障,Redis 的所有节点都立即崩溃了。 当机器恢复正常时,pods 被重新创建并被赋予不同的集群 ip,因此它们无法相互重新连接。

我需要为这样的灾难案例找到解决方案。假设所有节点都重新分配了不同的 ip,我如何配置节点以获取其他 ip?

slaves 很容易用 CLUSTER RESET 命令重置,但是 masters 包含不应该被删除的槽和数据。

我应该手动重写 nodes.conf 吗?恐怕这会让事情变得更糟?我有已知的方法来处理它吗?

谢谢!

最佳答案

找到解决方案:

第一步是在pod启动时在nodes.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 启动命令传递给它来启动任何 pod。

现在集群中的每个 pod 都设置了正确的 IP。

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

关于redis - 如何重新连接Redis集群节点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54707843/

相关文章:

Redis 客户端服务栈超时

java - spring中使用k8s configmap

redis - Redis 排序集插入的时间复杂度

kubernetes - kubespray 仪表板警告禁止弹出窗口

python - mongodb 连接字符串 uri 在 Kubernetes 中不起作用

redis - 如何使用redis-cluster配置2个节点的主从

linux - Redis集群创建无法连接到服务器,怎么回事?

c++ - Redis命令ERR:参数数量不正确hiredis

list - 将最近两分钟的数据存储在Redis列表中

java - Spring Data Redis(1.3.2.RELEASE)是否支持jedis的JedisSentinelPool?