zoukankan      html  css  js  c++  java
  • k8s 部署了 redis 集群,节点重启后,ip 变化导致集群不可用的问题

    通过命令查询集群状态:

    k exec -it redis-app-0 -- redis-cli cluster info
    

    第一行是 cluster_state:fail (正常应该是 ok)

    如何解决?
    这里参考了 https://github.com/redis/redis/issues/4289. 主要方法是启动参数中设置 --cluster-announce-ip 为当前 pod 的 ip. 对于已经错乱的 nodes.conf 文件,则修改其中的 ip.

    修改 redis.yaml

    # 略
                containers:
                - name: redis
                  image: redis
                  command:
                  - "redis-server"
                  args:
                  - "/etc/redis/redis.conf"
                  - "--protected-mode"
                  - "no"
                  - "--cluster-announce-ip"
                  - "$(POD_IP)"
                  env:
                  - name: POD_IP
                    valueFrom:
                      fieldRef:
                        fieldPath: status.podIP
    # 略
    
    1. 启动参数增加了 --cluster-announce-ip, 其值来自环境变量 POD_IP. 注意 $(POD_ID) 这里是小括号而非大括号。
    2. 这个环境变量的值又来自 status.podIP, 即当前 pod 的 ip. 每次 pod 启动时会分配一个不同的 ip, 通过 status.podIP 可以拿这个 ip,进而通知集群。

    修改错乱的 nodes.conf
    可以直接到 pv 中找到对应的文件修改它。修改完成后重启各个 pod 即可。

    重启集群各个 pod

    k apply -f redis.yaml
    
  • 相关阅读:
    iOS
    iOS
    iOS
    iOS
    iOS
    iOS
    iOS
    iOS
    iOS
    iOS
  • 原文地址:https://www.cnblogs.com/qkhh/p/14460816.html
Copyright © 2011-2022 走看看