簡體   English   中英

即使 Kubernetes pod 被殺死,如何保持長期連接?

[英]How to keep long lived connection alive even when the Kubernetes pod get killed?

我有以下 PostgreSQL 集群架構:

在此處輸入圖片說明

在這里,有多個客戶端通過 pgpool 與 PostgreSQL pod 交互,問題是,當 pod(可能是pgpoolPostgreSQL pod)終止(出於多種原因)客戶端受到影響並且必須重新創建連接時。 例如,在此圖中,如果postgresql-1 pod 終止,則client-0將不得不重新創建與集群的連接。

kubernetes 有沒有辦法處理它,以便對pgpool k8s service連接進行負載平衡/重新創建到其他 pod,這樣客戶端就不會看到切換並且不會受到影響

請注意,這些是 TCP 連接,而不是 HTTP 連接(無狀態)。 此外,所有 PostgreSQL pod 始終與 remote_apply 同步

kubernetes 中有沒有辦法處理它,以便與 pgpool k8s 服務的連接負載平衡/重新創建到其他 pod...

與 pgpool k8s 服務的連接由 kube-proxy 進行負載平衡。 每當 Pod 數量發生變化(例如擴展)時,支持服務的端點(pgpool Pod)將自動更新。

...這樣客戶端就不會看到切換並且不會受到影響?

如果客戶端連接的 pgpool pod 終止,客戶端 tcp 狀態將變為無效(例如,無效遠程 IP)。 沒有必要保持這種連接處於活動狀態,而是重新連接到 pgpool服務,kube-proxy 會將您路由到下一個可用的 pgpool pod。 與后端數據庫的實際連接由 pgpool 管理,包括數據庫故障轉移。 使用 pgpool 作為代理,您無需擔心數據庫切換。

如果沒有大量的自定義代碼來允許主機之間的 TCP 連接傳輸,你就不能。 當一個進程關閉時,它打開的所有 TCP 流都將關閉,這就是正常的 Linux 網絡功能。 如果您在您選擇的搜索引擎上搜索諸如“TCP 連接遷移”之類的內容,您會發現很多關於此的研究工作,但很少有實際代碼。 更多的時候你只是終止一些長期存在的邊緣代理的TCP連接,如果重新啟動你吃的重新連接。

暫無
暫無

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

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