集群与高可用

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

复制过程分为两个阶段:

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

方案对比

选择哪种方案取决于你的需求:

跨槽限制:Cluster 模式下,多键操作(如 MGET、MSET)要求所有键在同一个槽中。可使用 Hash Tag 强制相关键落入同一槽:SET user:{1001}:name "张三"。