今天遇到一个问题,kubernetes集群中的redis显示如下错误:
2021-11-16T05:32:18 [INFO] - increment delete failed...,MobcError(RedisCMDError(An error was signalled by the server: You can't write against a read only replica.))
Run Code Online (Sandbox Code Playgroud)
我检查了我的 redis 配置,发现配置 url 如下所示:
redisConnectionStr="redis://default:password@cruise-redis-headless.reddwarf-cache.svc.cluster.local:6379/3"
Run Code Online (Sandbox Code Playgroud)
我检查了servcie,发现它映射到了redis集群的master和replica,我想知道headness服务用户是什么情况?为什么不只保留主服务和副本服务?如果是读操作,使用任何一个服务就可以了。如果写入,则仅使用master服务。我什么时候应该使用 Headness 服务?
为什么不只保留主服务和副本服务?
如果你能实现它,你就能做到。由于 redis helm 可能不使用特定标签来运行读/写副本,因此很难转移和创建不同的读和写服务。
如果您使用 helm 部署Redis,它将在K8s集群中创建两个服务
一种是Headless服务,另一种是具有ClusterIP 的普通服务。
在应用程序端,我们应该使用正常的服务。
因此,想法是无头返回副本 IP,如果您使用的是哨兵或 Redis 集群,应用程序将进一步使用这些 IP 来管理集群。
如果您使用的是普通服务,它将根据条件自动将流量移动或路由到读/写副本。
如果您使用的是哨兵,您可以 ping 哨兵服务,它将返回主副本和只读副本 IP。
现在您可以根据要求使用内部代码,因为您可以使用哨兵获取写入和读取 IP。
在helm图表中您可以看到一种配置
sentinel:
enabled: true
Run Code Online (Sandbox Code Playgroud)
在 bitnami文档中,他们明确提到此命令将返回当前主节点的地址,可以从集群内部访问该地址。
了解更多信息: https: //github.com/bitnami/charts/tree/master/bitnami/redis#master-replicas-with-sentinel
归档时间: |
|
查看次数: |
7185 次 |
最近记录: |