本文档风哥主要介绍Redis Cluster部署与Slot实战,包括集群概念、Slot概念、集群优势、集群规划、硬件要求、网络要求、集群搭建、Slot管理、集群操作、集群监控以及实战案例等内容,风哥教程参考Redis官方文档Cluster等内容编写,适合DBA人员和开发人员在生产环境中使用。
Part01-基础概念与理论知识
1.1 集群概念
Redis Cluster是Redis的分布式解决方案,它将数据分布在多个Redis节点上,实现数据的分片存储和高可用性。集群的核心概念:
- 节点:Redis Cluster中的每个Redis实例称为一个节点
- 主节点:负责处理Slot的读写操作
- 从节点:主节点的备份,当主节点故障时可以晋升为主节点
- 故障转移:当主节点故障时,从节点晋升为主节点的过程
- Gossip协议:节点之间通过Gossip协议交换集群状态信息
1.2 Slot概念
Redis Cluster的Slot概念:
- Slot数量:Redis Cluster将数据空间划分为16384个Slot
- Slot分配:每个主节点负责一部分Slot,从节点复制主节点的Slot
- 键的哈希:通过CRC16算法计算键的哈希值,然后对16384取模,得到键对应的Slot
- 数据路由:客户端发送请求时,节点会根据键的哈希值找到对应的Slot,如果Slot不在当前节点,会返回MOVED指令,引导客户端连接到正确的节点
- Slot迁移:当集群扩缩容时,Slot会在节点之间迁移
1.3 集群优势
Redis Cluster的优势:
- 高可用性:当主节点故障时,从节点会自动晋升为主节点
- 水平扩展:可以通过添加节点来扩展集群的容量和性能
- 数据分片:数据分布在多个节点上,避免单节点内存限制
- 自动故障转移:当主节点故障时,自动进行故障转移
- 负载均衡:请求会被分散到多个节点上,提高系统的并发处理能力
更多视频教程www.fgedu.net.cn
Part02-生产环境规划与建议
2.1 集群规划
生产环境集群规划:
- 节点数量:建议部署3个或以上的主节点,每个主节点至少有一个从节点
- 硬件配置:根据业务负载配置合理的硬件资源
- 网络规划:确保节点之间的网络连接稳定
- Slot分配:合理分配Slot,确保负载均衡
- 高可用性:确保每个主节点都有足够的从节点
2.2 硬件要求
- CPU:每个节点需要足够的CPU处理请求,建议至少2核
- 内存:每个节点的内存应根据数据量和业务负载进行配置,建议至少4GB
- 磁盘:每个节点需要足够的磁盘空间存储持久化文件,建议至少50GB
- 网络:节点之间需要稳定的网络连接,建议使用千兆网卡
2.3 网络要求
## 1. 网络延迟
– 节点之间的网络延迟应尽可能低,建议不超过10ms
– 网络延迟过高会影响集群的性能和稳定性
## 2. 网络带宽
– 节点之间需要足够的网络带宽,特别是在数据迁移和故障转移时
– 建议使用千兆或万兆网络
## 3. 网络稳定性
– 确保节点之间的网络连接稳定,避免频繁中断
– 网络中断会导致集群分裂和数据不一致
## 4. 网络安全
– 配置防火墙规则,只允许节点之间的通信
– 考虑使用专线或VPN连接
学习交流加群风哥QQ113257174
Part03-生产环境项目实施方案
3.1 集群搭建
## 1. 环境准备
# 节点1:192.168.1.100:7000(主节点)
# 节点2:192.168.1.101:7000(主节点)
# 节点3:192.168.1.102:7000(主节点)
# 节点4:192.168.1.100:7001(从节点)
# 节点5:192.168.1.101:7001(从节点)
# 节点6:192.168.1.102:7001(从节点)
## 2. 配置节点1
$ mkdir -p /redis/cluster/7000
$ vi /redis/cluster/7000/redis.conf
bind 192.168.1.100
port 7000
dir /redis/cluster/7000
cluster-enabled yes
cluster-config-file nodes-7000.conf
cluster-node-timeout 15000
appendonly yes
requirepass fgedu@2026
masterauth fgedu@2026
## 3. 配置节点2
$ mkdir -p /redis/cluster/7000
$ vi /redis/cluster/7000/redis.conf
bind 192.168.1.101
port 7000
dir /redis/cluster/7000
cluster-enabled yes
cluster-config-file nodes-7000.conf
cluster-node-timeout 15000
appendonly yes
requirepass fgedu@2026
masterauth fgedu@2026
## 4. 配置节点3
$ mkdir -p /redis/cluster/7000
$ vi /redis/cluster/7000/redis.conf
bind 192.168.1.102
port 7000
dir /redis/cluster/7000
cluster-enabled yes
cluster-config-file nodes-7000.conf
cluster-node-timeout 15000
appendonly yes
requirepass fgedu@2026
masterauth fgedu@2026
## 5. 配置节点4
$ mkdir -p /redis/cluster/7001
$ vi /redis/cluster/7001/redis.conf
bind 192.168.1.100
port 7001
dir /redis/cluster/7001
cluster-enabled yes
cluster-config-file nodes-7001.conf
cluster-node-timeout 15000
appendonly yes
requirepass fgedu@2026
masterauth fgedu@2026
## 6. 配置节点5
$ mkdir -p /redis/cluster/7001
$ vi /redis/cluster/7001/redis.conf
bind 192.168.1.101
port 7001
dir /redis/cluster/7001
cluster-enabled yes
cluster-config-file nodes-7001.conf
cluster-node-timeout 15000
appendonly yes
requirepass fgedu@2026
masterauth fgedu@2026
## 7. 配置节点6
$ mkdir -p /redis/cluster/7001
$ vi /redis/cluster/7001/redis.conf
bind 192.168.1.102
port 7001
dir /redis/cluster/7001
cluster-enabled yes
cluster-config-file nodes-7001.conf
cluster-node-timeout 15000
appendonly yes
requirepass fgedu@2026
masterauth fgedu@2026
## 8. 启动所有节点
$ /redis/app/bin/redis-server /redis/cluster/7000/redis.conf # 节点1
$ /redis/app/bin/redis-server /redis/cluster/7000/redis.conf # 节点2
$ /redis/app/bin/redis-server /redis/cluster/7000/redis.conf # 节点3
$ /redis/app/bin/redis-server /redis/cluster/7001/redis.conf # 节点4
$ /redis/app/bin/redis-server /redis/cluster/7001/redis.conf # 节点5
$ /redis/app/bin/redis-server /redis/cluster/7001/redis.conf # 节点6
## 9. 创建集群
$ /redis/app/bin/redis-cli –cluster create 192.168.1.100:7000 192.168.1.101:7000 192.168.1.102:7000 192.168.1.100:7001 192.168.1.101:7001 192.168.1.102:7001 –cluster-replicas 1 -a fgedu@2026
# 输出示例
>>> Performing hash slots allocation on 6 nodes…
Master[0] -> Slots 0-5460
Master[1] -> Slots 5461-10922
Master[2] -> Slots 10923-16383
Adding replica 192.168.1.101:7001 to 192.168.1.100:7000
Adding replica 192.168.1.102:7001 to 192.168.1.101:7000
Adding replica 192.168.1.100:7001 to 192.168.1.102:7000
>>> Trying to optimize slaves allocation for anti-affinity
…
>>> Nodes configuration updated
>>> Assign a different config epoch to each node
>>> Sending CLUSTER MEET messages to join the cluster
Waiting for the cluster to join
…
>>> Performing Cluster Check (using node 192.168.1.100:7000)
M: xxxxxxxx… 192.168.1.100:7000
slots:[0-5460] (5461 slots) master
1 additional replica(s)
M: xxxxxxxx… 192.168.1.101:7000
slots:[5461-10922] (5462 slots) master
1 additional replica(s)
M: xxxxxxxx… 192.168.1.102:7000
slots:[10923-16383] (5461 slots) master
1 additional replica(s)
S: xxxxxxxx… 192.168.1.100:7001
slots: (0 slots) slave
replicates xxxxxxxx…
S: xxxxxxxx… 192.168.1.101:7001
slots: (0 slots) slave
replicates xxxxxxxx…
S: xxxxxxxx… 192.168.1.102:7001
slots: (0 slots) slave
replicates xxxxxxxx…
[OK] All nodes agree about slots configuration.
>>> Check for open slots…
>>> Check slots coverage…
[OK] All 16384 slots covered.
3.2 Slot管理
## 1. 查看Slot分配
$ /redis/app/bin/redis-cli -h 192.168.1.100 -p 7000 -a fgedu@2026 cluster slots
## 2. 计算键的Slot
$ /redis/app/bin/redis-cli -h 192.168.1.100 -p 7000 -a fgedu@2026 cluster keyslot user:1001:name
# 输出示例
(integer) 12345
## 3. 查看Slot对应的节点
$ /redis/app/bin/redis-cli -h 192.168.1.100 -p 7000 -a fgedu@2026 cluster getslot 12345
## 4. 重新分片
$ /redis/app/bin/redis-cli –cluster reshard 192.168.1.100:7000 -a fgedu@2026
# 按照提示输入要移动的Slot数量、目标节点ID、源节点ID等信息
## 5. 平衡Slot
$ /redis/app/bin/redis-cli –cluster rebalance 192.168.1.100:7000 -a fgedu@2026
## 6. 检查Slot覆盖情况
$ /redis/app/bin/redis-cli -h 192.168.1.100 -p 7000 -a fgedu@2026 cluster info | grep cluster_slots
# 输出示例
cluster_slots_assigned:16384
cluster_slots_ok:16384
cluster_slots_pfail:0
cluster_slots_fail:0
3.3 集群操作
## 1. 查看集群状态
$ /redis/app/bin/redis-cli -h 192.168.1.100 -p 7000 -a fgedu@2026 cluster info
## 2. 查看节点信息
$ /redis/app/bin/redis-cli -h 192.168.1.100 -p 7000 -a fgedu@2026 cluster nodes
## 3. 添加节点
$ /redis/app/bin/redis-cli –cluster add-node 192.168.1.103:7000 192.168.1.100:7000 -a fgedu@2026
## 4. 添加从节点
$ /redis/app/bin/redis-cli –cluster add-node 192.168.1.103:7001 192.168.1.100:7000 –cluster-slave –cluster-master-id
## 5. 删除节点
$ /redis/app/bin/redis-cli –cluster del-node 192.168.1.100:7000
## 6. 测试集群
$ /redis/app/bin/redis-cli -h 192.168.1.100 -p 7000 -a fgedu@2026 set test:key “test value”
$ /redis/app/bin/redis-cli -h 192.168.1.100 -p 7000 -a fgedu@2026 get test:key
# 输出示例
OK
“test value”
## 7. 手动故障转移
$ /redis/app/bin/redis-cli -h 192.168.1.100 -p 7001 -a fgedu@2026 cluster failover
3.4 集群监控
## 1. 查看集群状态
$ /redis/app/bin/redis-cli -h 192.168.1.100 -p 7000 -a fgedu@2026 cluster info
## 2. 查看节点状态
$ /redis/app/bin/redis-cli -h 192.168.1.100 -p 7000 -a fgedu@2026 cluster nodes
## 3. 查看Slot状态
$ /redis/app/bin/redis-cli -h 192.168.1.100 -p 7000 -a fgedu@2026 cluster slots
## 4. 查看节点信息
$ /redis/app/bin/redis-cli -h 192.168.1.100 -p 7000 -a fgedu@2026 info replication
## 5. 使用监控工具
# 可以使用Prometheus + Grafana监控Redis Cluster
# 可以使用Redis自带的监控命令
$ /redis/app/bin/redis-cli -h 192.168.1.100 -p 7000 -a fgedu@2026 monitor
风哥提示:Redis接口限流是保护系统的重要机制,合理的限流策略可以防止系统过载,确保系统的稳定性和可用性。在实际应用中,需要根据具体业务场景和数据特点,选择合适的限流算法和策略。
Part04-生产案例与实战讲解
4.1 集群部署实战
## 1. 环境准备
# 节点1:192.168.1.100:7000(主节点)
# 节点2:192.168.1.101:7000(主节点)
# 节点3:192.168.1.102:7000(主节点)
# 节点4:192.168.1.100:7001(从节点)
# 节点5:192.168.1.101:7001(从节点)
# 节点6:192.168.1.102:7001(从节点)
## 2. 配置所有节点
# 为每个节点创建配置文件,设置相应的端口和绑定地址
## 3. 启动所有节点
$ /redis/app/bin/redis-server /redis/cluster/7000/redis.conf # 节点1
$ /redis/app/bin/redis-server /redis/cluster/7000/redis.conf # 节点2
$ /redis/app/bin/redis-server /redis/cluster/7000/redis.conf # 节点3
$ /redis/app/bin/redis-server /redis/cluster/7001/redis.conf # 节点4
$ /redis/app/bin/redis-server /redis/cluster/7001/redis.conf # 节点5
$ /redis/app/bin/redis-server /redis/cluster/7001/redis.conf # 节点6
## 4. 创建集群
$ /redis/app/bin/redis-cli –cluster create 192.168.1.100:7000 192.168.1.101:7000 192.168.1.102:7000 192.168.1.100:7001 192.168.1.101:7001 192.168.1.102:7001 –cluster-replicas 1 -a fgedu@2026
## 5. 验证集群状态
$ /redis/app/bin/redis-cli -h 192.168.1.100 -p 7000 -a fgedu@2026 cluster info
# 输出示例
cluster_state:ok
cluster_slots_assigned:16384
cluster_slots_ok:16384
cluster_slots_pfail:0
cluster_slots_fail:0
cluster_known_nodes:6
cluster_size:3
cluster_current_epoch:6
cluster_my_epoch:1
cluster_stats_messages_ping_sent:1234
cluster_stats_messages_pong_sent:1234
cluster_stats_messages_sent:2468
cluster_stats_messages_ping_received:1234
cluster_stats_messages_pong_received:1234
cluster_stats_messages_meet_received:5
cluster_stats_messages_received:2468
## 6. 测试集群功能
$ /redis/app/bin/redis-cli -h 192.168.1.100 -p 7000 -a fgedu@2026 set user:1001:name “张三”
$ /redis/app/bin/redis-cli -h 192.168.1.100 -p 7000 -a fgedu@2026 set user:1002:name “李四”
$ /redis/app/bin/redis-cli -h 192.168.1.100 -p 7000 -a fgedu@2026 set user:1003:name “王五”
# 输出示例
OK
OK
OK
$ /redis/app/bin/redis-cli -h 192.168.1.101 -p 7000 -a fgedu@2026 get user:1001:name
$ /redis/app/bin/redis-cli -h 192.168.1.102 -p 7000 -a fgedu@2026 get user:1002:name
$ /redis/app/bin/redis-cli -h 192.168.1.100 -p 7000 -a fgedu@2026 get user:1003:name
# 输出示例
“张三”
“李四”
“王五”
4.2 Slot分配实战
## 1. 查看初始Slot分配
$ /redis/app/bin/redis-cli -h 192.168.1.100 -p 7000 -a fgedu@2026 cluster slots
## 2. 计算多个键的Slot
$ /redis/app/bin/redis-cli -h 192.168.1.100 -p 7000 -a fgedu@2026 cluster keyslot product:1001
$ /redis/app/bin/redis-cli -h 192.168.1.100 -p 7000 -a fgedu@2026 cluster keyslot order:1001
$ /redis/app/bin/redis-cli -h 192.168.1.100 -p 7000 -a fgedu@2026 cluster keyslot user:1001
## 3. 查看Slot对应的节点
$ /redis/app/bin/redis-cli -h 192.168.1.100 -p 7000 -a fgedu@2026 cluster getslot
## 4. 重新分片
$ /redis/app/bin/redis-cli –cluster reshard 192.168.1.100:7000 -a fgedu@2026
# 按照提示输入:
# 1. 要移动的Slot数量:1000
# 2. 目标节点ID:输入节点2的ID
# 3. 源节点ID:输入all
# 4. 确认:yes
## 5. 验证重新分片结果
$ /redis/app/bin/redis-cli -h 192.168.1.100 -p 7000 -a fgedu@2026 cluster slots
## 6. 平衡Slot
$ /redis/app/bin/redis-cli –cluster rebalance 192.168.1.100:7000 -a fgedu@2026
## 7. 验证平衡结果
$ /redis/app/bin/redis-cli -h 192.168.1.100 -p 7000 -a fgedu@2026 cluster slots
4.3 故障转移测试
## 1. 查看集群状态
$ /redis/app/bin/redis-cli -h 192.168.1.100 -p 7000 -a fgedu@2026 cluster info
## 2. 查看节点信息
$ /redis/app/bin/redis-cli -h 192.168.1.100 -p 7000 -a fgedu@2026 cluster nodes
## 3. 模拟主节点故障
$ pkill -f “redis-server.*7000” # 停止节点1
## 4. 监控故障转移
$ /redis/app/bin/redis-cli -h 192.168.1.101 -p 7000 -a fgedu@2026 cluster info
## 5. 查看新的主节点
$ /redis/app/bin/redis-cli -h 192.168.1.101 -p 7000 -a fgedu@2026 cluster nodes
## 6. 测试集群功能
$ /redis/app/bin/redis-cli -h 192.168.1.101 -p 7000 -a fgedu@2026 set test:failover “failover success”
$ /redis/app/bin/redis-cli -h 192.168.1.101 -p 7000 -a fgedu@2026 get test:failover
# 输出示例
OK
“failover success”
## 7. 恢复故障节点
$ /redis/app/bin/redis-server /redis/cluster/7000/redis.conf # 启动节点1
## 8. 查看节点状态
$ /redis/app/bin/redis-cli -h 192.168.1.101 -p 7000 -a fgedu@2026 cluster nodes
4.4 扩缩容实战
## 1. 添加新节点
# 配置新节点
$ mkdir -p /redis/cluster/7002
$ vi /redis/cluster/7002/redis.conf
bind 192.168.1.103
port 7002
dir /redis/cluster/7002
cluster-enabled yes
cluster-config-file nodes-7002.conf
cluster-node-timeout 15000
appendonly yes
requirepass fgedu@2026
masterauth fgedu@2026
# 启动新节点
$ /redis/app/bin/redis-server /redis/cluster/7002/redis.conf
# 添加新节点到集群
$ /redis/app/bin/redis-cli –cluster add-node 192.168.1.103:7002 192.168.1.100:7000 -a fgedu@2026
## 2. 重新分片
$ /redis/app/bin/redis-cli –cluster reshard 192.168.1.100:7000 -a fgedu@2026
# 按照提示输入:
# 1. 要移动的Slot数量:4096
# 2. 目标节点ID:输入新节点的ID
# 3. 源节点ID:输入all
# 4. 确认:yes
## 3. 验证扩缩容结果
$ /redis/app/bin/redis-cli -h 192.168.1.100 -p 7000 -a fgedu@2026 cluster info
$ /redis/app/bin/redis-cli -h 192.168.1.100 -p 7000 -a fgedu@2026 cluster nodes
## 4. 删除节点
# 首先确保节点没有Slot
$ /redis/app/bin/redis-cli –cluster del-node 192.168.1.100:7000
## 5. 验证删除结果
$ /redis/app/bin/redis-cli -h 192.168.1.100 -p 7000 -a fgedu@2026 cluster info
$ /redis/app/bin/redis-cli -h 192.168.1.100 -p 7000 -a fgedu@2026 cluster nodes
更多学习教程公众号风哥教程itpux_com
Part05-风哥经验总结与分享
5.1 最佳实践
Redis Cluster部署与Slot实战最佳实践:
- 节点数量:部署3个或以上的主节点,每个主节点至少有一个从节点,学习交流加群风哥微信: itpux-com
- 硬件配置:根据业务负载配置合理的硬件资源
- 网络配置:确保节点之间的网络连接稳定
- Slot分配:合理分配Slot,确保负载均衡
- 监控配置:监控集群状态,及时发现问题
- 故障转移测试:定期测试故障转移流程,确保其可靠性
- 客户端配置:客户端应使用集群模式连接,自动处理节点故障
- 安全配置:配置集群的认证和加密
5.2 常见问题
- 集群无法启动:检查配置文件和网络连接
- Slot分配不均:使用redis-cli –cluster rebalance命令重新平衡Slot
- 故障转移失败:检查从节点状态和网络连接
- 集群分裂:检查网络连接,确保所有节点都能通信
- 数据不一致:检查主从复制状态,确保数据同步
- 性能问题:优化硬件配置和网络连接,合理分配Slot
5.3 优化技巧
## 1. 集群配置优化
– 合理设置cluster-node-timeout,平衡故障检测速度和误判概率
– 合理设置cluster-migration-barrier,确保主节点有足够的从节点
– 启用appendonly,确保数据的持久性
– 配置合适的内存限制,避免内存溢出
## 2. 网络优化
– 确保节点之间的网络延迟低
– 确保网络带宽足够,特别是在数据迁移和故障转移时
– 配置防火墙规则,只允许节点之间的通信
– 考虑使用专线或VPN连接
## 3. 性能优化
– 合理分配Slot,确保负载均衡
– 优化硬件配置,提高节点性能
– 使用SSD存储,提高持久化性能
– 合理设置maxmemory和maxmemory-policy,优化内存使用
## 4. 监控优化
– 监控集群状态,及时发现问题
– 监控节点资源使用情况,避免资源不足
– 设置合理的告警机制,当集群状态发生变化时及时通知
– 定期检查集群日志,找出潜在问题
## 5. 扩缩容优化
– 合理规划扩缩容策略,避免影响业务
– 在低峰期进行扩缩容操作
– 监控数据迁移过程,确保数据安全
– 扩缩容后验证集群状态,确保一切正常
通过本文档的学习,您应该掌握了Redis Cluster部署与Slot实战,能够在生产环境中合理部署和配置Redis Cluster,实现数据的分布式存储和高可用性。在实际应用中,需要根据具体业务场景选择合适的集群配置,确保系统的可靠性和性能。
风哥提示:Redis Cluster是实现Redis分布式和高可用的重要解决方案。在实际应用中,需要合理部署和配置集群,确保数据的可靠性和系统的性能。
from Redis视频:www.itpux.com
本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
