基于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
posted @ 2026-03-06 16:54  Y99017  阅读(2)  评论(0)    收藏  举报