Tus*_*jan 1 redis-cluster kubernetes-statefulset azure-aks
我在我的有状态集中使用了 redis:5.0.1-alpine,有状态集有 6 个 Pod,并且使用以下命令完成了 Redis 集群形成
redis-cli --cluster create {IPlist放在这里} --cluster-replicas 1
现在,如果 Pod 被意外删除或 AKS 停止服务,那么 AKS 恢复后创建的 Pod 将具有不同的 IP。
我尝试故意删除 Pod,当重新创建 Pod 时,集群状态更改为“失败”(集群最初创建时为“正常”)
此外,当我尝试将旧数据集放入集群时,会出现一条消息,告知“集群已关闭”
我已经显示了用于创建集群的 redis.conf 文件的代码
apiVersion: v1
kind: ConfigMap
metadata:
name: redis-cluster
namespace: redis
data:
update-node.sh: |
#!/bin/sh
REDIS_NODES="/data/nodes.conf"
sed -i -e "/myself/ s/[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-
9]\{1,3\}/${POD_IP}/" ${REDIS_NODES}
exec "$@"
redis.conf: |+
cluster-enabled yes
cluster-require-full-coverage no
cluster-node-timeout 15000
cluster-config-file /data/nodes.conf
cluster-migration-barrier 1
appendonly yes
protected-mode no
Run Code Online (Sandbox Code Playgroud)
Redis 集群节点和槽位相关数据作为附加的 Redis 集群节点和槽位
当您重新启动单个 Pod 时,该 Pod 会使用新的 IP,将其发布到其他 Pod,并且它们都会更新有关 IP 更改的配置。
如果所有 Pod 同时关闭和启动(例如,集群中的所有节点都重新启动),Pod 无法相互通信,因为其 Nodes.conf 中的 IP 是错误的。
一种可能的解决方案是更新所有正在运行的 Pod 上的 Nodes.conf 中的 IP,然后逐个重新启动它们。
我通过在每个 pod 中植入这个脚本来做到这一点:
恢复pod.sh
#!/bin/sh
set -e
REDIS_NODES_FILE="/data/nodes.conf"
for redis_node_ip in "$@"
do
redis_node_id=`redis-cli -h $redis_node_ip -p 6379 cluster nodes | grep myself | awk '{print $1}'`
sed -i.bak -e "/^$redis_node_id/ s/[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}/${redis_node_ip}/" ${REDIS_NODES_FILE}
done
Run Code Online (Sandbox Code Playgroud)
并从 Kubernetes 节点之一运行它:
恢复集群.sh
#!/bin/bash
for i in {0..5}
do
echo "Updating the correct IPs in nodes.conf on redis-cluster-redis-cluster-statefulset-$i"
kubectl exec -it redis-cluster-redis-cluster-statefulset-$i /readonly-config/recover-pod.sh $(kubectl get pods -l app=redis-cluster -o jsonpath='{range.items[*]}{.status.podIP} ' )
done
kubectl patch statefulset redis-cluster-redis-cluster-statefulset --patch '{"spec": {"template": {"metadata": {"labels": {"date": "'`date +%s`'" }}}}}'
Run Code Online (Sandbox Code Playgroud)
这使得Redis集群恢复到健康状态。
| 归档时间: |
|
| 查看次数: |
1642 次 |
| 最近记录: |