连接 Failover 和 Replica 实例
Failover 和 Replica 架构会暴露按角色选择的 Service。读写 Service 选择当前主节点,只读 Service 选择从节点。
Failover 还会额外部署或引用 Valkey Sentinel。Replica 架构不会部署 Sentinel;应用程序使用同一个读写 Service,但不能假设存在基于 Sentinel 的自动故障转移。
发现 endpoint
对于集群内客户端,稳定的 DNS 名称如下:
请替换为适用于你环境的实例名称和 namespace。应发现实际的 Service 名称,而不是在生产自动化中自行构造。
测试写入端点
不使用 access control list (ACL) 身份验证:
使用自定义 ACL 用户时,交互式请求密码:
仅使用环境批准的临时 key 测试写入:
测试只读端点
当没有可用从节点时,只读 Service 可能没有 endpoint。复制是异步的,因此从节点可能返回较旧的值。在主节点故障和晋升期间,已确认的写入也可能不会出现在已晋升的从节点上。不要将此端点用于写后读一致性。
使用 TLS
当 spec.access.enableTLS 为 true 时,请通过经批准的证书分发流程获取受信任的客户端身份。生成的 server 默认需要受信任的客户端证书,因此仅有 certificate authority (CA) 还不够:
在此示例中,rfr-valkey-failover-readwrite.default 包含在生成的证书中;.svc 形式不包含在内。请检查 Certificate.spec.dnsNames 并使用其中列出的精确名称。实例 TLS Secret 包含一个供 Operator 内部使用的 server 私钥;不要将该密钥作为通用应用程序客户端身份分发。不要将 --insecure 作为正常连接方式。
外部访问
对于 LoadBalancer,请检查按角色选择的 Service,并等待 ingress 地址:
对于 NodePort,请获取分配的端口和可达的 Kubernetes 节点地址。Firewall 规则和路由必须允许该连接:
生成的证书不包含 LoadBalancer ingress 或 Kubernetes 节点地址。因此,外部 TLS 需要一条产品批准的证书路径,其 subject alternative names 覆盖客户端 hostname;高层 2.0.0 API 不暴露任意 subject-alternative-name 字段。
不要为 2.0.0 发布固定的 spec.access.ports 示例:检查到的 custom resource definition (CRD) schema 和运行时解析器使用不兼容的格式。除非交付构建文档中说明了已验证的格式,否则请保持该字段未设置。
客户端行为
- 写入和对一致性敏感的读取应使用读写端点。
- 配置有界的连接、命令和重试超时。
- 在主节点切换后重新解析 DNS 并重新连接。
- 仅重试对应用程序幂等性模型安全的操作。
- 在向只读端点发送生产读取请求之前,监控从节点健康状况。
上述一致性和故障转移边界遵循官方 Valkey replication 和 Sentinel 文档。请从 Valkey client catalog 中选择客户端,并在该客户端自身的文档中验证其重试和 TLS 行为。