1. 首页 > Redis教程 > 正文

Redis教程FG025-Redis Cluster部署与Slot实战

本文档风哥主要介绍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管理

# 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 -a fgedu@2026

## 5. 删除节点
$ /redis/app/bin/redis-cli –cluster del-node 192.168.1.100:7000 -a fgedu@2026

## 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分配实战

# 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 -a fgedu@2026

## 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 优化技巧

风哥提示:Redis Cluster是实现Redis分布式和高可用的重要解决方案。在实际应用中,需要合理部署和配置集群,确保数据的可靠性和系统的性能。

# 优化技巧

## 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

联系我们

在线咨询:点击这里给我发消息

微信号:itpux-com

工作日:9:30-18:30,节假日休息