我已經學習 Kubernetes 幾個星期了,現在我正在嘗試找出將 Web 服務器正確連接到 statefulset 的正確方法。假設我部署了一個主從 Postgres 狀態集,現在我將我的 Web 服務器連接到它。通過使用集群 IP 服務,讀取(SELECT)和寫入(UPDATE、INSERT、DELETE)記錄的請求將在 master 和 slaves 之間進行負載平衡,對吧?但我不能這樣做,因為寫入請求應該由主處理。但是,當我使用無頭服務將我的 Web 服務器指向主服務器時,該服務將為我們提供每個 pod 的 DNS 條目,我不會對其他從屬復制進行任何負載平衡,并且所有請求都將由一個實體處理,并且那是主人。那么我應該如何以正確的方式連接它們呢?通過在讀取記錄和將寫入記錄請求轉發到主服務器時獲得所有復制的負載平衡以及從服務器?
我應該在 Web 服務器中使用兩個端點并在寫入和讀取記錄中配置它們嗎?
或者,由于我是 Kubernetes 的新手,所以我可能以錯誤的方式使用無頭服務和 statefulsets?
uj5u.com熱心網友回復:
好吧,你的想法是正確的 - 主節點應該是可讀寫的,副本應該是只讀的。如何正確配置?有不同的可能方法。
第一種方法是你在想什么,設定兩個無頭服務 - 一個用于訪問主實體,第二個用于訪問副本實體 - 很好的例子是Kubegres:
在此示例中,Kubegres 使用 YAML 中定義的名稱(例如“mypostgres”)創建了 2 個 Kubernetes Headless 服務(默認型別為 ClusterIP):
- Kubernetes 服務“mypostgres”允許訪問主 PostgreSql 實體
- Kubernetes 服務“mypostgres-replica”允許訪問副本 PostgreSql 實體
然后你將有兩個端點:
因此,在 Kubernetes 集群內運行的客戶端應用程式將使用主機名“mypostgres”連接到主 PostgreSql 以進行讀寫請求,并且可選地它也可以使用主機名“mypostgres-replica”連接到任何可用的用于讀取請求的副本 PostgreSql。
查看此入門指南了解更多詳情。
值得注意的是,有許多資料庫解決方案都在使用這種方法——另一個例子是 MySQL。這是 Kubernetes 檔案中關于使用 Stateful set 設定 MySQL 的一篇好文章。
另一種方法是使用一些中間件組件作為集群的看門人,例如 Pg-Pool:
Pg 池是一個中間件組件,位于 Postgres 服務器前面,充當集群的看門人。
它主要有兩個目的:負載平衡和限制請求。
- 負載均衡: Pg 池接受連接請求和查詢。它分析查詢以確定應將查詢發送到何處。
- 只讀查詢可以由只讀副本處理。寫操作只能由主服務器處理。通過這種方式,它可以平衡集群的負載。
- 限制請求: 像任何其他系統一樣,Postgres 有一個限制。它可以優雅地處理并發連接數。
- pg-pool 限制了數量。它占用的連接數并將剩余的排入佇列。因此,優雅地處理過載。
然后,您將擁有一個用于所有操作的端點 - Pg-Pool 服務。查看這篇文章了解更多詳細資訊,包括整個設定程序。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/349810.html
標籤:Kubernetes
