激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

云服務器|WEB服務器|FTP服務器|郵件服務器|虛擬主機|服務器安全|DNS服務器|服務器知識|Nginx|IIS|Tomcat|

服務器之家 - 服務器技術 - 服務器知識 - 在 Kubernetes 上運行 Pgpool-Il 實現 PostgreSQL 查詢(讀)負載均衡和連接池

在 Kubernetes 上運行 Pgpool-Il 實現 PostgreSQL 查詢(讀)負載均衡和連接池

2022-03-01 22:14黑客下午茶 服務器知識

因為 PostgreSQL 是一個有狀態的應用程序,并且管理 PostgreSQL 有非常具體的要求(例如備份、恢復、自動故障轉移等),Kubernetes 的內置功能無法處理這些任務。因此,需要一個擴展 Kubernetes 功能以創建和管理 PostgreSQL 的 Operator。

介紹

因為 PostgreSQL 是一個有狀態的應用程序,并且管理 PostgreSQL 有非常具體的要求(例如備份、恢復、自動故障轉移等),Kubernetes 的內置功能無法處理這些任務。因此,需要一個擴展 Kubernetes 功能以創建和管理 PostgreSQL 的 Operator。

PostgreSQL operator 有好幾種,比如 Crunchy PostgreSQL Operator、Zalando PostgreSQL Operator 和 KubeDB。但是,這些 operator 不提供查詢負載均衡功能。

  • Crunchy PostgreSQL Operator

https://github.com/CrunchyData/postgres-operator

  • Zalando PostgreSQL Operator

https://github.com/zalando/postgres-operator

  • KubeDB

https://github.com/kubedb/operator

結合 PostgreSQL Operator 和 Pgpool-II 在 Kubernetes 上部署具有查詢負載均衡和連接池能力的 PostgreSQL 集群。Pgpool-II 可以與上面提到的任何 PostgreSQL Operator 結合使用。

架構

在 Kubernetes 上運行 Pgpool-Il 實現 PostgreSQL 查詢(讀)負載均衡和連接池

前提條件

在開始配置過程之前,請檢查以下前提條件。

  • 確保你有一個 Kubernetes 集群,并且安裝了 kubectl。
  • PostgreSQL Operator 和 PostgreSQL cluster 已安裝。

部署 Pgpool-II

Kubernetes 不需要 Pgpool-II 的健康檢查、自動故障轉移、watchdog 和在線恢復功能。您只需要啟用負載平衡和連接池。

Pgpool-II pod 應該使用以下最低配置:

backend_hostname0 = '' backend_hostname1 = '' backend_port0 = '5432' backend_port1 = '5432' backend_flag0 = 'ALWAYS_PRIMARY|DISALLOW_TO_FAILOVER' backend_flag1 = 'DISALLOW_TO_FAILOVER' failover_on_backend_error = off

sr_check_period = 10 (when using streaming replication check) sr_check_user='username of PostgreSQL user' (when using streaming replication check) load_balance_mode = on connection_cache = on listen_addresses = '*'

有兩種配置 Pgpool-II 的方法。

1.使用環境變量

https://kubernetes.io/docs/tasks/inject-data-application/define-environment-variable-container/

2.使用 ConfigMap

https://kubernetes.io/docs/concepts/configuration/configmap/

您可能需要在生產環境中配置客戶端身份驗證和更多參數。在生產環境中,我們建議使用 ConfigMap 來配置 pgpool.conf 和 pool_hba.conf。

使用環境變量配置 Pgpool-II

Kubernetes 環境變量可以傳遞給 pod 中的容器。您可以在部署清單中定義環境變量來配置 Pgpool-II 的參數。pgpool-deploy-minimal.yaml 是一個示例清單,包括環境變量的最小設置。您可以下載 pgpool-deploy-minimal.yaml 并修改此清單中的環境變量。

$ curl -LO https://raw.githubusercontent.com/pgpool/pgpool2_on_k8s/master/pgpool-deploy-minimal.yaml

以 PGPOOL_PARAMS_ 開頭的環境變量可以轉換為 Pgpool-II 的配置參數,這些值可以覆蓋默認設置。

在 Kubernetes 上,您只需要指定兩個后端節點。根據您的 PostgreSQL 集群信息更新 pgpool-deploy-minimal.yaml。將主服務名稱指定為 backend_hostname0。將副本服務名稱指定為 backend_hostname1。因為故障轉移由 Kubernetes 管理,所以將 DISALLOW_TO_FAILOVER 標志指定給兩個節點的 backend_flag,并將 ALWAYS_PRIMARY 標志指定給 backend_flag0。 backend_data_directory 的設置不是必需的。

  • backend_hostname

https://www.pgpool.net/docs/42/en/html/runtime-config-backend-settings.html#GUC-BACKEND-HOSTNAME

  • backend_flag

https://www.pgpool.net/docs/42/en/html/runtime-config-backend-settings.html#GUC-BACKEND-FLAG

  • backend_data_directory

https://www.pgpool.net/docs/42/en/html/runtime-config-backend-settings.html#GUC-BACKEND-DATA-DIRECTORY

例如,清單中定義的以下環境變量,

env: - name: PGPOOL_PARAMS_BACKEND_HOSTNAME0
  value: "mypostgres" - name: PGPOOL_PARAMS_BACKEND_HOSTNAME1
  value: "mypostgres-replica" - name: PGPOOL_PARAMS_BACKEND_FLAG0
  value: "ALWAYS_PRIMARY|DISALLOW_TO_FAILOVER" - name: PGPOOL_PARAMS_BACKEND_FLAG1
  value: "DISALLOW_TO_FAILOVER"

將在 pgpool.conf 中轉換為以下配置參數。

backend_hostname0 = 'mypostgres' backend_hostname1 = 'mypostgres-replica' backend_flag0 = 'ALWAYS_PRIMARY|DISALLOW_TO_FAILOVER' backend_flag1 = 'DISALLOW_TO_FAILOVER'

然后,您需要定義包含 PostgreSQL 用戶的用戶名和密碼的環境變量,用于客戶端身份驗證。

配置清單后,運行以下命令部署 Pgpool-II。

kubectl apply -f pgpool-deploy-minimal.yaml

使用 ConfigMap 配置 Pgpool-II

或者,您可以使用 Kubernetes ConfigMap 來存儲整個 pgpool.conf 和 pool_hba.conf。ConfigMap 可以作為卷掛載到 Pgpool-II 的容器中。

您可以從以下存儲庫下載定義 ConfigMap 和 Deployment 的示例清單文件。

  • pgpool2_on_k8s

https://github.com/pgpool/pgpool2_on_k8s

curl -LO https://raw.githubusercontent.com/pgpool/pgpool2_on_k8s/master/pgpool-configmap.yaml curl -LO https://raw.githubusercontent.com/pgpool/pgpool2_on_k8s/master/pgpool-deploy.yaml

定義 ConfigMap 的清單采用以下格式。您可以根據您的配置偏好對其進行更新。要使用 pool_hba.conf 進行客戶端身份驗證,您需要打開 enable_pool_hba。默認為關閉。

  • enable_pool_hba

https://www.pgpool.net/docs/42/en/html/runtime-config-connection.html#GUC-ENABLE-POOL-HBA

apiVersion: v1
kind: ConfigMap
metadata: name: pgpool-config
  labels: name: pgpool-config
data: pgpool.conf: |- listen_addresses = '*' port = 9999 socket_dir = '/var/run/pgpool' pcp_listen_addresses = '*' pcp_port = 9898 pcp_socket_dir = '/var/run/pgpool' backend_hostname0 = 'postgres' ...
  pool_hba.conf: |- local   all         all                               trust
    host    all         all 127.0.0.1/32 trust
    host    all         all ::1/128 trust
    hostssl all         all 0.0.0.0/0 

然后,您需要定義包含 PostgreSQL 用戶的用戶名和密碼的環境變量,用于客戶端身份驗證。

運行以下命令創建 ConfigMap 并部署引用此 ConfigMap 的 Pgpool-II pod。

kubectl apply -f pgpool-configmap.yaml kubectl apply -f pgpool-deploy.yaml

部署 Pgpool-II 后,您可以使用 kubectl get pod 和 kubectl get svc 命令查看 Pgpool-II pod 和服務。

Pgpool-II 配置

后端設置

在 Kubernetes 上,您只需要指定兩個后端節點。指定主服務名稱為 backend_hostname0,副本服務名稱為 ackend_hostname1。

backend_hostname0 = '' backend_hostname1 = '' backend_port0 = '5432' backend_port1 = '5432'

自動故障轉移

Pgpool-II 能夠定期連接到已配置的 PostgreSQL 后端并檢查 PostgreSQL 的狀態。如果檢測到錯誤,Pgpool-II 將觸發故障轉移。在 Kubernetes 上,Kubernetes 會監控 PostgreSQL 的 Pod,如果一個 Pod 宕機,Kubernetes 會重啟一個新的 Pod。您需要禁用 Pgpool-II 的自動故障轉移,因為 Kubernetes 不需要 Pgpool-II 的自動故障轉移。

將 PostgreSQL node 0 指定為主節點 (ALWAYS_PRIMARY),因為即使主節點或副本 pod 擴展、重新啟動或發生故障轉移,服務名稱也不會更改。

backend_flag0 ='ALWAYS_PRIMARY|DISALLOW_TO_FAILOVER' backend_flag1 ='DISALLOW_TO_FAILOVER' failover_on_backend_error = off

將密碼注冊到 pool_passwd

Pgpool-II 使用包含 PostgreSQL 用戶密碼的 pool_passwd 文件執行身份驗證。

  • pool_passwd

https://www.pgpool.net/docs/42/en/html/runtime-config-connection.html#GUC-POOL-PASSWD

在 Pgpool-II pod 啟動時,Pgpool-II 自動執行 pg_md5 命令,根據 _USERNAME 和 _PASSWORD 格式定義的環境變量生成 pool_passwd。

  • pg_md5

https://www.pgpool.net/docs/42/en/html/pg-md5.html

代表 PostgreSQL 用戶的用戶名和密碼的環境變量必須按以下格式定義:

username: <some string>_USERNAME
password: <some string>_PASSWORD

使用 Secret 定義環境變量是保證用戶憑據安全的推薦方法。在大多數 PostgreSQL Operators 中,創建 PostgreSQL 集群時會自動創建幾個定義 PostgreSQL 用戶憑據的 Secret。使用 kubectl get secret 命令檢查現有的 Secret。

例如,創建 mypostgres-postgres-secret 來存儲 postgres 用戶的用戶名和密碼。要引用這個 secret,您可以定義如下環境變量:

env: - name: POSTGRES_USERNAME
  valueFrom: secretKeyRef: name: mypostgres-postgres-secret
       key: username - name: POSTGRES_PASSWORD
  valueFrom: secretKeyRef: name: mypostgres-postgres-secret
       key: password

啟動 Pgpool-II pod 時,會在 /opt/pgpool-II/etc 下自動生成 pool_passwd 和 pcp.conf。

$ kubectl exec <pgpool pod> -it -- cat /opt/pgpool-II/etc/pool_passwd postgres:md53175bce1d3201d16594cebf9d7eb3f9d

$ kubectl exec <pgpool pod> -it -- cat /opt/pgpool-II/etc/pcp.conf postgres:e8a48653851e28c69d0506508fb27fc5

流復制檢查

Pgpool-II 能夠定期連接到已配置的 PostgreSQL 后端并檢查復制延遲。要使用此功能,需要 sr_check_user 和 sr_check_password。如果 sr_check_password 留空,Pgpool-II 將嘗試從 pool_passwd 獲取 sr_check_user 的密碼。

  • sr_check_user

https://www.pgpool.net/docs/42/en/html/runtime-streaming-replication-check.html#GUC-SR-CHECK-USER

  • sr_check_password

https://www.pgpool.net/docs/42/en/html/runtime-streaming-replication-check.html#GUC-SR-CHECK-PASSWORD

下面是一個使用 postgres 用戶每隔 10 秒連接到 PostgreSQL 以執行流式復制檢查的示例。因為 sr_check_password 留空,所以 Pgpool-II 會從 pool_passwd 中獲取 postgres 用戶的密碼。

sr_check_period = 10 sr_check_user='postgres'

創建 secret 存儲 sr_check_user 中指定的 PostgreSQL 用戶的用戶名和密碼,并配置環境變量以引用創建的 Secret。在大多數 PostgreSQL Operators 中,創建 PostgreSQL 集群時會自動創建幾個定義 PostgreSQL 用戶憑據的 secret。使用 kubectl get secret 命令檢查現有的 secret。

例如,下面的環境變量引用了 Secret mypostgres-postgres-secret。

env: - name: POSTGRES_USERNAME
  valueFrom: secretKeyRef: name: mypostgres-postgres-secret
       key: username - name: POSTGRES_PASSWORD
  valueFrom: secretKeyRef: name: mypostgres-postgres-secret
       key: password

但是,在 Kubernetes 上,Pgpool-II 連接到任何副本,而不是連接到所有副本。即使有多個副本,Pgpool-II 也將它們作為一個副本進行管理。因此,Pgpool-II 可能無法正確確定復制延遲。要禁用此功能,請配置以下參數:

sr_check_period = 0

SSL 設置

打開 ssl 以啟用 SSL 連接。

ssl = on

當 ssl = on 時,在 Pgpool-II 啟動時,會在 /opt/pgpool-II/certs/ 下自動生成私鑰文件和證書文件。 ssl_key 和 ssl_cert 會自動配置私鑰文件和證書文件的路徑。

此外,要僅允許 SSL 連接,請將以下記錄添加到 pool_hba.conf 中。

hostssl    all         all 0.0.0.0/0 md5

帶監控的 Pgpool-II

Pgpool-II Exporter 是 Pgpool-II 指標的 Prometheus 導出器。

  • Pgpool-II Exporter

https://github.com/pgpool/pgpool2_exporter

示例清單 pgpool-deploy-metrics.yaml 用于在 Pgpool-II Pod 中部署 Pgpool-II 容器和 Pgpool-II Exporter 容器。

spec: containers: - name: pgpool
    image: pgpool/pgpool
  ... - name: pgpool-stats
    image: pgpool/pgpool2_exporter
  ...

下載示例清單 pgpool-deploy-metrics.yaml。

$ curl -LO https://raw.githubusercontent.com/pgpool/pgpool2_on_k8s/master/pgpool-deploy-metrics.yaml

然后,配置 Pgpool-II 和 Pgpool-II Exporter。以下是 Pgpool-II Exporter 容器中用于連接 Pgpool-II 的環境變量的設置。

env: - name: POSTGRES_USERNAME
  valueFrom: secretKeyRef: name: mypostgres-postgres-secret
      key: username - name: POSTGRES_PASSWORD
  valueFrom: secretKeyRef: name: mypostgres-postgres-secret
      key: password - name: PGPOOL_SERVICE
  value: "localhost" - name: PGPOOL_SERVICE_PORT
  value: "9999"

配置 Pgpool-II 和 Pgpool-II Exporter 后,部署 Pgpool-II Pod。

kubectl apply -f pgpool-configmap.yaml kubectl apply -f pgpool-deploy-metrics.yaml

原文地址:https://mp.weixin.qq.com/s/1X65AAs8O1qcddf5wqpRRQ

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 美女色影院 | 欧美一级黄色影院 | 男女羞羞视频在线免费观看 | 欧美性成人 | 黄色7777| 久久久精品视频免费看 | 牛牛热这里只有精品 | 国产在线1区 | 久久精品资源 | 成人免费毛片一 | 欧美亚洲综合在线 | xxxxhdhdhdhd日本| 免费人成在线观看网站 | 精品久久久久久久久久久久久久久久久久久 | 国产精品久久在线观看 | 日本一区二区三区视频在线 | 黄色av免费电影 | 大胆在线日本aⅴ免费视频 永久免费毛片 | 国产老师做www爽爽爽视频 | 毛片视频免费观看 | 欧美日韩精品一区二区三区不卡 | 1024亚洲天堂 | 美女毛片在线观看 | 亚洲精品一区中文字幕 | 亚洲小视频| 嫩草91在线 | 国产精品99久久久久久久女警 | 国产大片中文字幕在线观看 | 热久久成人 | 深夜免费福利视频 | 午夜男人免费视频 | 黄色网www | 国产午夜精品一区二区三区不卡 | 国产欧美日韩一区二区三区四区 | 色视频欧美 | 日韩欧美视频一区二区三区 | 久久影院国产精品 | 欧美亚洲国产成人综合在线 | 欧美亚洲国产一区二区三区 | 亚洲午夜视频在线 | 天堂二区 |