[英]How to keep long lived connection alive even when the Kubernetes pod get killed?
我有以下 PostgreSQL 集群架構:
在這里,有多個客戶端通過 pgpool 與 PostgreSQL pod 交互,問題是,當 pod(可能是pgpool
或PostgreSQL
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.