架构
用户在 rds.valkey.buf.red/v1alpha1 中声明一个 Valkey 资源。Valkey
Operator 会将其转换为更底层的资源,并负责其生命周期。
不要编辑由 Operator 管理的 Cluster、Failover 或 Sentinel 资源。请对其所属的 Valkey 资源应用更改,并让 controller 传播这些更改。
Reconciliation 流程
controller 会持续将声明状态与这些资源进行比较。对生成对象的手动更改可能会被覆盖,也可能掩盖失败操作的真实根因。
Cluster 架构
Cluster 有 16,384 个 hash slots。spec.replicas.shards 控制 shard 数量,必须介于 3 到 128 之间。spec.replicas.replicasOfShard 控制每个 shard 中的成员数量,必须介于 1 到 5 之间。
Operator 会为每个 shard 创建一个 StatefulSet,分配槽位,加入新成员,在 shard 扩缩容期间重新平衡槽位,并在 Pod 替换后修复成员关系。replicasOfShard: 1 会创建一个不带从节点的主节点;若要实现主从冗余,请至少使用 2 个。
Cluster 复制是异步的。在拓扑变更或故障期间,客户端必须遵循 MOVED 和 ASK 重定向,并且在 Valkey Cluster protocol 所描述的故障窗口内,已确认的写入仍可能丢失。
Failover 架构
一个 Failover 实例只有一个数据 shard。其数据成员数量为 spec.replicas.replicasOfShard。Operator 还会创建或引用一个 Valkey Sentinel deployment。当 Operator 创建 Sentinel 时,其数量必须为奇数且至少为 3。Sentinel 监控主节点并协调故障切换。
Operator 暴露独立的读写 Service 和只读 Service。必须写入的客户端应使用读写 Service,并在故障切换后重新连接。
Replica 架构
Replica 架构使用与 Failover 相同的主从数据工作负载,但不部署 Sentinel。只有一个成员时,它的行为类似单节点实例。多个成员时,Operator 会维护复制并管理恢复,但应用程序不具备 Sentinel 发现或由 Sentinel 协调的故障切换。恢复依赖于 Operator 成功协调;应用程序继续使用按角色选择的读写 Service,并且在所选主节点发生变化时必须重新连接。
选择架构
Cluster 的多键命令要求相关键映射到同一个 hash slot。Failover 和 Replica 会将完整数据集保留在每个数据成员上,因此受限于单个成员的可用内存。
存储和故障域
持久化存储可在 Pod 重新创建期间保护数据文件,这取决于 StorageClass、卷健康状况和 PVC 保留行为。它不能防止逻辑删除、数据损坏、namespace 或 cluster 丢失,也不能防止 Operator 错误。请使用经过独立测试的外部数据保护流程。
只有在存在足够的符合条件的 Kubernetes 节点和故障域时,反亲和性才能改善调度位置。部署在单个节点或单个存储故障域上的冗余 Valkey 拓扑无法提供基础设施级高可用性。
Reconciliation 和状态
高级资源报告以下阶段:
使用以下方式检查完整的观测状态:
此架构引用的上游行为定义于 Valkey Cluster 规范、复制文档 和 Sentinel 文档。