Redis单节点分片集群实现

(/≧▽≦)/~┴┴ 嗨~我叫小奥 ✨✨✨

👀👀👀 个人博客:小奥的博客

👍👍👍:个人CSDN

⭐️⭐️⭐️:Github传送门

🍹 本人24应届生一枚,技术和水平有限,如果文章中有不正确的内容,欢迎多多指正!

📜 欢迎点赞收藏关注哟! ❤️

文章目录

因为工作中需要使用到单节点redis分片集群,所以在网上参考了别人的一些实现之后,借助ai工具生成的使用方案,均已验证可行。

参考开源项目:

GitHub - diorman/redis-single-node-cluster: Redis cluster with all slots assigned to a single node for development, testing and CI/CD

dockerfile部署

  1. 准备redis.conf配置文件
plain 复制代码
port 6379
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly no
save ""
  1. 准备初始化脚本init.sh
bash 复制代码
#!/bin/sh
set -e
echo "Waiting for Redis to start..."
until redis-cli -p 6379 ping; do sleep 1; done
echo "Assigning all 16384 slots to this node..."
SLOTS=$(seq 0 16383 | tr '\n' ' ')
redis-cli -p 6379 cluster addslots $SLOTS
echo "Cluster setup complete."
redis-cli -p 6379 cluster info
  1. Dockerfile 编写
shell 复制代码
# 使用官方 Redis 镜像作为基础镜像
FROM redis:7.2-alpine

# 创建目录存放配置文件和初始化脚本
WORKDIR /etc/redis

# 将本地的 redis.conf 和 init.sh 拷贝到镜像中
COPY redis.conf /etc/redis/redis.conf
COPY init.sh /etc/redis/init.sh

# 给予 init.sh 可执行权限
RUN chmod +x /etc/redis/init.sh

# 设置容器启动命令
CMD ["sh", "-c", "redis-server /etc/redis/redis.conf --daemonize no && /etc/redis/init.sh"]
  1. 构建镜像和运行容器
shell 复制代码
docker build -t redis-single-node-cluster .
docker run -d --name redis-single-node-cluster -p 6379:6379 redis-single-node-cluster

kubernetes部署

  1. 准备redis-single-node-cluster.yaml如下:
yaml 复制代码
---
apiVersion: v1
kind: ConfigMap
metadata:
  name: redis-cluster-config
data:
  redis.conf: |
    port 6379
    cluster-enabled yes
    cluster-config-file nodes.conf
    cluster-node-timeout 5000
    appendonly no
    save ""
  init.sh: |
    #!/bin/sh
    set -e
    echo "Waiting for Redis to start..."
    until redis-cli -p 6379 ping; do sleep 1; done
    echo "Assigning all 16384 slots to this node..."
    SLOTS=$(seq 0 16383 | tr '\n' ' ')
    redis-cli -p 6379 cluster addslots $SLOTS
    echo "✅ Cluster setup complete."
    redis-cli -p 6379 cluster info
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: redis-single-node-cluster
spec:
  replicas: 1
  selector:
    matchLabels:
      app: redis-single-node-cluster
  template:
    metadata:
      labels:
        app: redis-single-node-cluster
    spec:
      containers:
        - name: redis
          image: redis:7.2-alpine
          ports:
            - containerPort: 6379
          command:
            - /bin/sh
            - -c
            - |
              redis-server /etc/redis/redis.conf &
              sleep 3
              /etc/redis/init.sh
              wait
          volumeMounts:
            - name: config
              mountPath: /etc/redis
          resources:
            requests:
              memory: "64Mi"
              cpu: "10m"
            limits:
              memory: "128Mi"
              cpu: "100m"
      volumes:
        - name: config
          configMap:
            name: redis-cluster-config
            defaultMode: 0755
---
apiVersion: v1
kind: Service
metadata:
  name: redis-single-node-cluster
spec:
  selector:
    app: redis-single-node-cluster
  ports:
    - port: 6379
      targetPort: 6379
  type: ClusterIP
  1. 部署
shell 复制代码
# redis-single 为命名空间 
kubectl apply -n redis-single -f redis-single-node-cluster.yaml
  1. 检查服务状态
shell 复制代码
# 查看 Pod 是否创建
kubectl get pod -n redis-single

# 如果 Pod 卡在 ContainerCreating 或 Error,查看日志
kubectl describe pod -n redis-single -l app=redis-single-node-cluster

# 如果 Pod Running 但初始化失败,看日志
kubectl logs -n redis-single -l app=redis-single-node-cluster --tail=50

正常情况下日志如下:

plain 复制代码
Waiting for Redis to start...
Assigning all 16384 slots to this node...
✅ Cluster setup complete.
cluster_state:ok
cluster_slots_assigned:16384
...
相关推荐
xfhuangfu23 分钟前
Oracle中建立到CDB和PDB的连接
数据库·oracle·rpc
小小龙学IT36 分钟前
DuckDB 深度实战:用 C++ 在进程内跑一个「分析型数据库」
数据库·c++
NineData1 小时前
DTCC 2026 预告|NineData CEO& 创始人叶正盛:面向 AI Agent 的数据库 DevOps 与数据复制实践
数据库·人工智能·数据库开发·devops·ninedata·数据库技术·dtcc
J_bean1 小时前
MySQL 事务是否必须手动开启?
数据库·mysql·数据库事务·自动提交·手动提交
J_bean2 小时前
MySQL InnoDB 如何检测死锁、判定死锁、处理死锁
数据库·mysql·死锁·死锁检测·处理死锁·死锁判定
浪子明X2 小时前
从 MongoDB 文档到关系模型:构建可重跑、可对账的数据迁移流水线
数据库·mongodb·oracle
杜子不疼.2 小时前
国产数据库撑起固井软件自主化:金仓 × 中海油服「海恒 Cemsol」落地解析
数据库
隔窗听雨眠2 小时前
GBase 8s并发控制深度解析:封锁机制、隔离级别与死锁处理全攻略
服务器·数据库·oracle
刀客Doc3 小时前
即时零售不只是多一个渠道,品牌开始重做终端生意
大数据·数据库
就叫飞六吧3 小时前
防抖、幂等、唯一约束三件套 ;
数据库