Cluster 集群模式
理解 Cluster 集群的原理与分片机制
掌握集群搭建方法
了解路由与重定向机制
核心讲解
(1)为什么要集群
单节点内存、性能都有上限,数据量太大、并发太高的时候,需要集群,水平扩展。
数据分片:数据分成 16384 个槽,每个节点负责一部分槽
去中心化:每个节点都可以读写,客户端连任意节点
高可用:每个主节点可以配从节点,故障自动转移
横向扩展:加节点就能扩容
(2)分片原理
16384 个哈希槽(slot),每个 key 对 16384 取模,得到对应的槽
每个主节点负责一段槽
客户端连任意节点,key 在这个节点就直接返回,不在就重定向到正确节点
新增 / 删除节点,自动迁移槽
(3)集群架构
至少 3 个主节点,才能组成集群
每个主节点配 1 个从节点,共 6 节点,是标准高可用集群
主节点负责读写,从节点备份和读扩展
(4)搭建步骤
准备多个节点(至少 3 主 3 从 6 个节点)
每个节点开启集群模式配置
启动所有节点
创建集群,分配槽
验证集群状态
操作示例
# 每个节点的配置
port 7001
cluster-enabled yes
cluster-config-file nodes-7001.conf
cluster-node-timeout 15000
appendonly yes
# 启动6个节点:7001-7003主,7004-7006从
# 创建集群,--cluster-replicas 1 表示每个主1个从
redis-cli --cluster create \
127.0.0.1:7001 \
127.0.0.1:7002 \
127.0.0.1:7003 \
127.0.0.1:7004 \
127.0.0.1:7005 \
127.0.0.1:7006 \
--cluster-replicas 1
# 确认输入yes,等待创建完成
# 查看集群状态
redis-cli -c -p 7001 CLUSTER INFO
redis-cli -c -p 7001 CLUSTER NODES
# 测试自动路由
redis-cli -c -p 7001 SET key1 hello
# 会自动重定向到对应节点
常见误区
2 个节点也能集群:至少 3 个主节点,因为需要大多数投票
集群也支持多库:Cluster 模式只有 0 号库,不支持 SELECT 切换库
事务跨槽可用:事务、Lua 脚本涉及多个 key 必须在同一个槽,不然报错
加节点自动均衡:加节点后需要手动迁移槽,不会自动均衡
课后练习
搭建 3 主 3 从的 Cluster 集群
验证数据写入自动分片
查看集群节点和槽分布
思考:哨兵模式和 Cluster 模式的区别是什么?
