今天遇到一個問題,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.))
我檢查了我的 redis 配置,發現配置 url 是這樣的:
redisConnectionStr="redis://default:[email protected]:6379/3"
我查了servcie,發現它映射到redis集群的master和replica,不知道headness服務用戶是什么情況?為什么不只保留主服務和副本服務?如果讀取操作,使用任何服務都可以。如果寫,只使用主服務。我應該什么時候使用 headness 服務?
uj5u.com熱心網友回復:
為什么不只保留主服務和副本服務?
如果你能實施它,你就可以做到。由于 redis helm 可能不使用特定標簽來運行讀/寫副本,因此很難轉移和創建不同的讀寫服務。
如果您使用 helm部署Redis,它將在K8s集群中創建兩個服務
一個是Headless服務,另一個是帶有ClusterIP 的普通服務。
在應用端,我們應該使用正常的服務。
所以想法是無頭回傳副本 IP,如果您使用哨兵或 Redis 集群,應用程式將進一步使用這些 IP 來管理集群。
如果您使用的是 Normal 服務,它將根據條件自動將流量移動或路由到讀/寫副本。
如果您使用哨兵,則可以 ping 哨兵服務,它將回傳主副本和只讀副本 IP。
您現在可以根據要求使用內部代碼,因為您可以通過哨兵獲得寫入和讀取 ip。
在掌舵圖中,您可以看到一種配置
sentinel:
enabled: true
在 bitnami檔案中,他們明確提到此命令將回傳當前主節點的地址,可以從集群內部訪問該地址。
閱讀更多資訊:https : //github.com/bitnami/charts/tree/master/bitnami/redis#master-replicas-with-sentinel
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/359003.html
標籤:Kubernetes Redis
上一篇:無法訪問EKS集群上的nginx
