基于StatefulSet控制器的Redis集群
1 部署Redis Cluster
1.1 准备Redis配置文件
Redis 配置文件示例(已过滤注释和空行):
bind 0.0.0.0
protected-mode yes
port 6379
tcp-backlog 511
timeout 0
tcp-keepalive 300
daemonize yes
supervised no
pidfile /var/run/redis_6379.pid
loglevel notice
logfile ""
databases 16
always-show-logo yes
save 900 1
save 300 10
save 60 10000
1.1.1 创建 ConfigMap
kubectl create configmap redis-conf --from-file=redis.conf -n myserver
1.1.2验证 ConfigMap
kubectl get configmaps -n myserver
kubectl describe configmaps redis-conf -n myserver
1.2 创建Redis Cluster Pod
kubectl apply -f 1.redis-statefulset.yaml
输出示例:
service/redis created
service/redis-access created
statefulset.apps/redis created
1.2.1 查看Pod创建状态
kubectl get pod -n myserver
1.2.2 Pod创建完成
kubectl get pod -n myserver
1.2.3 验证PVC状态
kubectl get pvc -n myserver
2 初始化 Redis Cluster
初始化只需执行一次。Redis 4 及之前版本使用
redis-tribe,Redis 5 开始使用redis-cli。
2.1 创建临时初始化 Pod
kubectl run -it redis-initcontainer --rm=true \
--image=harbor.zhou-kai.com/baseimages/myserver-rockylinux-base:9.3.20260214 \
--restart=Never -n myserver -- bash
在容器中安装必要工具:
yum install bind-utils redis -y
2.1.1 创建集群
redis-cli -a 123456 --cluster create \
`dig +short redis-0.redis.myserver.svc.cluster.local`:6379 \
`dig +short redis-1.redis.myserver.svc.cluster.local`:6379 \
`dig +short redis-2.redis.myserver.svc.cluster.local`:6379 \
`dig +short redis-3.redis.myserver.svc.cluster.local`:6379 \
`dig +short redis-4.redis.myserver.svc.cluster.local`:6379 \
`dig +short redis-5.redis.myserver.svc.cluster.local`:6379 \
--cluster-replicas 1
3 验证 Redis Cluster 状态
3.1 使用 redis-cli 测试读写
进入 Redis Pod:
kubectl exec -it -n myserver redis-0 -- bash
redis-cli
3.1.1 查看集群信息
127.0.0.1:6379> CLUSTER INFO
127.0.0.1:6379> CLUSTER NODES
3.1.2 测试写入与读取
kubectl exec -n myserver -it redis-2 -- bash
redis-cli -a 123456
set mykey myvalye
get mykey
set test-key test-valye
3.1.3在Slave节点验证
kubectl exec -it -n myserver redis-3 -- bash
redis-cli -a 123456
KEYS *
get mykey
3.2 使用Python脚本测试
启动测试客户端:
kubectl run -it redis-client --rm=true \
--image=registry.cn-hangzhou.aliyuncs.com/myhubregistry/ubuntu:22.04.5 \
--restart=Never -n myserver -- bash
安装依赖:
apt update
apt install python2.7 python-pip -y
pip2 install redis-py-cluster
编写测试脚本 redis-client-test.py:
#!/usr/bin/env python
#coding:utf-8
#Author:Zhang ShiJie
#python 2.7/3.8
#pip install redis-py-cluster
import sys,time
from rediscluster import RedisCluster
def init_redis():
startup_nodes = [
{'host': '172.31.7.111', 'port': 30079},
{'host': '172.31.7.112', 'port': 30079},
{'host': '172.31.7.113', 'port': 30079},
{'host': '172.31.7.111', 'port': 30079},
{'host': '172.31.7.112', 'port': 30079},
{'host': '172.31.7.113', 'port': 30079},
]
try:
conn = RedisCluster(startup_nodes=startup_nodes,
decode_responses=True, password='123456')
print('OK!!!', conn)
for i in range(100):
conn.set("key%s" % i, "value%s" % i)
time.sleep(0.1)
data = conn.get("key%s" % i)
print(data)
except Exception as e:
print("connect error ", str(e))
sys.exit(1)
init_redis()
运行脚本:
python2 redis-client-test.py

浙公网安备 33010602011771号