簡體   English   中英

有沒有辦法用生菜在 Redis 集群中自動發現新的集群節點 IP

[英]Is there a way to auto discover new cluster node IP in Redis Cluster with Lettuce

我有一個 Redis 集群(3 個主和 3 個從)Kubernetes集群中運行。 集群通過Kubenetes-Service (Kube-Service)公開。

我的應用程序服務器通過 Redis 的 Lettuce java 客戶端連接到 Redis 集群(使用Kube-Service作為 URI)。 我還在生菜連接 object 上設置了以下客戶端選項:

ClusterTopologyRefreshOptions topologyRefreshOptions = ClusterTopologyRefreshOptions.builder()
              .enablePeriodicRefresh(Duration.ofMinutes(10))
              .enableAllAdaptiveRefreshTriggers()
              .build();

ClusterClientOptions clusterClientOptions = ClusterClientOptions.builder()
              .topologyRefreshOptions(topologyRefreshOptions)
              .autoReconnect(true)
              .disconnectedBehavior(ClientOptions.DisconnectedBehavior.REJECT_COMMANDS)
              .build();
redisClient.setOptions(clusterClientOptions);

現在,當我通過殺死我的一個 Redis 主(pod)來測試此設置時,Kubernetes 通過重新安排新的 pod 來完成其工作。 但是新的 pod 有一個新的 IP 地址,它從未被 Lettuce 發現。 生菜如何處理重新發現。 上面的拓撲刷新邏輯似乎沒有為新 IP 再次執行 DNS 查找。

是否有任何樣品或任何處理過這個的人。 我已經閱讀了關於生菜本身的多個 Github 問題,這些問題並沒有明確說明它是如何處理的。

最好的

感謝對上述問題的第一條評論。

所以我能夠解決這個問題,如下所示。

  • 具有給定選項的客戶端的上述設置很好。 但是,我必須將disconnectedBehavior設置為ACCEPT_COMMANDS 這確保了客戶端在故障轉移期間繼續與 Redis 進行操作。
  • 由於這種不斷接受操作的結果,對於在故障轉移成功選舉新主節點后到達客戶端的第一個 READ 或 WRITE,集群將正確返回新節點的新 IP 地址。 從今以后,客戶端知道故障節點持有的插槽的新 IP 是什么。

這是在下次嘗試讀取或寫入時協調的一種惰性方法。 但它有效,我相信它已經足夠好了。 我不確定是否有更好的方法來處理這個問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM