集群与高可用
Valkey 提供两种高可用方案:主从复制 + Sentinel 用于故障自动切换,Cluster 用于水平扩展数据分片。
主从复制
主从复制是 Valkey 高可用的基础。主节点(Master)处理写操作,从节点(Replica)同步数据并提供读服务。
conf复制
# 从节点配置 replicaof 192.168.1.100 6379 # 主节点密码(如果设置了 requirepass) masterauth your-master-password # 从节点是否可写(默认 no) replica-read-only yes # 无节点连接时从节点是否仍提供服务 replica-serve-stale-data yes
复制过程分为两个阶段:
- 全量同步:首次连接时,主节点生成 RDB 快照发送给从节点,并缓冲期间的写命令
- 增量同步:基于复制偏移量(offset),主节点将新的写命令实时传播给从节点(PSYNC)
Sentinel 哨兵
Sentinel 是一个分布式系统,用于监控 Valkey 实例并在主节点故障时自动执行故障转移。
conf复制
# sentinel.conf # 监控名为 mymaster 的主节点,quorum 为 2 sentinel monitor mymaster 192.168.1.100 6379 2 # 主节点密码 sentinel auth-pass mymaster your-password # 15秒无响应认为主节点下线 sentinel down-after-milliseconds mymaster 15000 # 故障转移超时 sentinel failover-timeout mymaster 60000 # 故障转移时最多同步的从节点数 sentinel parallel-syncs mymaster 1
部署建议:至少部署 3 个 Sentinel 节点,分布在不同物理机或可用区。Quorum 设置为 ceil(节点数/2) + 1,避免脑裂。
Cluster 集群
Valkey Cluster 是原生的分布式方案,通过哈希槽(hash slot)将数据分布到多个节点。总共 16384 个槽,每个主节点负责一部分。
创建集群
bash复制
# 最少 3 主 + 3 从(6个节点)
valkey-cli --cluster create \
192.168.1.10:6379 \
192.168.1.11:6379 \
192.168.1.12:6379 \
192.168.1.13:6379 \
192.168.1.14:6379 \
192.168.1.15:6379 \
--cluster-replicas 1
关键配置
conf复制
# 开启集群模式 cluster-enabled yes # 集群配置文件(自动管理,不要手动编辑) cluster-config-file nodes.conf # 节点超时判定 cluster-node-timeout 15000 # 是否允许在部分槽不可用时继续服务 cluster-require-full-coverage no
集群运维
valkey复制
# 查看集群信息 CLUSTER INFO CLUSTER NODES # 添加新节点 valkey-cli --cluster add-node 192.168.1.16:6379 192.168.1.10:6379 # 重新分片 valkey-cli --cluster reshard 192.168.1.10:6379 # 检查集群健康 valkey-cli --cluster check 192.168.1.10:6379
方案对比
选择哪种方案取决于你的需求:
- 单实例:开发/测试环境,或数据量小、可接受短暂停机
- 主从 + Sentinel:数据量在单机内存范围内,需要自动故障转移和读写分离
- Cluster:数据量超过单机内存,需要水平扩展吞吐量和存储容量
跨槽限制:Cluster 模式下,多键操作(如 MGET、MSET)要求所有键在同一个槽中。可使用 Hash Tag 强制相关键落入同一槽:SET user:{1001}:name "张三"。