# docker-redis-cluster **Repository Path**: jessedev/docker-redis-cluster ## Basic Information - **Project Name**: docker-redis-cluster - **Description**: Redis Cluster集群 - **Primary Language**: Docker - **License**: MulanPSL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 5 - **Forks**: 0 - **Created**: 2023-07-01 - **Last Updated**: 2025-11-06 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ### 使用方式 ##### 1.进入项目 cd docker-redis-cluster ##### 2.环境变量配置等 # 环境变量 cp .env.example .env # 自动拉取阿里私服镜像 cp ./docker-compose-example.yml ./docker-compose.yml ##### 3.构建服务 docker-compose up -d ##### 4.创建集群 # 进入master容器中 # -a 密码 redis-cli -a a123456 --cluster create --cluster-replicas 1 172.0.1.3:6379 172.0.1.4:6379 172.0.1.7:6379 172.0.1.5:6379 172.0.1.6:6379 172.0.1.8:6379 --cluster-yes # 查看节点信息 redis-cli -a a123456 --cluster info 172.0.1.3:6379 # 记得去哨兵服务器查看主从状态 info sentinel ##### 5.哨兵下查看服务器状态 redis-cli -p 26379 # 查看哨兵集群信息 info sentinel # 查看所有主服务器状态 SENTINEL masters # 查看某个主服务器 SENTINEL master # 查看从服务器 SENTINEL slaves ##### 6.主服务器查看从信息 info replication ##### 7.查看集群信息 # 登陆redis redis-cli auth a123456 # 查看集群信息 cluster info # 查看集群节点 cluster nodes ##### 8.扩容机制 ###### 8.1 加入集群 # master01容器执行 redis-cli -a a123456 --cluster add-node 172.0.1.9:6379 172.0.1.3:6379 # 172.0.1.10:6379 设置为172.0.1.9的从服务器 redis-cli -a a123456 --cluster add-node 172.0.1.10:6379 172.0.1.9:6379 --cluster-slave # 查看节点信息 redis-cli -a a123456 --cluster info 172.0.1.9:6379 # 查看节点信息 redis-cli auth a123456 CLUSTER nodes ###### 8.2 手动扩容迁移数据 redis-cli -a a123456 --cluster reshard 172.0.1.3:6379 ---------------------- # 示例: How many slots do you want to move (from 1 to 16384)? 4096 //需要迁移的槽位数量,也就是要拿出多少个槽位给新节点,我们输入4096,因为16384除4刚好是4096 What is the receiving node ID? 6b6ca5d58187ecbf0bff15d71a5789f4aa78cfa2 //迁移给目标节点的ID号,也就是新节点的6390ID号,6390作为新节点的主库 Please enter all the source node IDs. Type 'all' to use all the nodes as source nodes for the hash slots. Type 'done' once you entered all the source nodes IDs. Source node #1:all //迁移方式:all将所有主节点分出一部分槽位给新节点 Do you want to proceed with the proposed reshard plan (yes/no)? yes ---------------------- # 查看分槽后的节点 redis-cli -a a123456 --cluster info 172.0.1.9:6379 ###### 8.3 自动平衡集群各个节点哈希槽分布(自动扩容) redis-cli -a a123456 --cluster rebalance 172.0.1.3:6379 --cluster-use-empty-masters ##### 9.缩容机制 # 查看节点ID redis-cli auth a123456 CLUSTER nodes # 查看节点槽数 redis-cli -a a123456 --cluster info 172.0.1.9:6379 # 缩容 # --cluster-from 指定一个源节点,从该节点迁移槽位。 # --cluster-to 指定一个目标节点,将槽位迁移到该节点 # --cluster-slots 指定要迁移的槽位数量 redis-cli -a a123456 --cluster reshard 172.0.1.9:6379 \ --cluster-from 16b9559de448e0ffd6dd5604f18703a6d7aa67c5 \ --cluster-to 7f46eef7c0fff296a4c87198a83744402ab5ee8d \ --cluster-slots 1821 \ --cluster-yes # 查看节点槽数, 确认为0 slots redis-cli -a a123456 --cluster info 172.0.1.9:6379 # 删除节点 redis-cli -a a123456 --cluster del-node 172.0.1.10:6379 760dc09204fcf2bbf1abff70625d7f4481300f16 redis-cli -a a123456 --cluster del-node 172.0.1.9:6379 16b9559de448e0ffd6dd5604f18703a6d7aa67c5 # 平衡各各节点数据 redis-cli -a a123456 --cluster rebalance 172.0.1.3:6379 --cluster-use-empty-masters # 查看删除的节点信息 redis-cli -a a123456 --cluster info 172.0.1.3:6379 ##### 10.删除空节点 # 查看节点信息 redis-cli auth a123456 CLUSTER NODES # 760dc09204fcf2bbf1abff70625d7f4481300f16 172.0.1.10:6379@16379 master - 0 1688226860587 0 connected # 16b9559de448e0ffd6dd5604f18703a6d7aa67c5 172.0.1.9:6379@16379 master - 0 1688226860079 7 connected # 删除节点 redis-cli -a a123456 --cluster del-node 172.0.1.10:6379 760dc09204fcf2bbf1abff70625d7f4481300f16 redis-cli -a a123456 --cluster del-node 172.0.1.9:6379 16b9559de448e0ffd6dd5604f18703a6d7aa67c5 ##### 11.问题点:当发故障时, 一台哨兵服务器 172.0.1.7主服务器 转移到 172.0.1.5从服务器. 此时172.0.1.5升为主服务器, 172.0.1.7为从服务器 同时我重启哨兵, 这时候哨兵还是把172.0.1.7当为主服务器 # 可能集群哨兵可以解决此问题