成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

在 Kubernetes 上運(yùn)行 Pgpool-Il 實(shí)現(xiàn) PostgreSQL 查詢(xún)(讀)負(fù)載均衡和連接池

數(shù)據(jù)庫(kù) PostgreSQL
PostgreSQL operator 有好幾種,比如 Crunchy PostgreSQL Operator、Zalando PostgreSQL Operator 和 KubeDB。

介紹

因?yàn)?PostgreSQL 是一個(gè)有狀態(tài)的應(yīng)用程序,并且管理 PostgreSQL 有非常具體的要求(例如備份、恢復(fù)、自動(dòng)故障轉(zhuǎn)移等),Kubernetes 的內(nèi)置功能無(wú)法處理這些任務(wù)。因此,需要一個(gè)擴(kuò)展 Kubernetes 功能以創(chuàng)建和管理 PostgreSQL 的 Operator。

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

  • Crunchy PostgreSQL Operator

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

  • Zalando PostgreSQL Operator

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

  • KubeDB

https://github.com/kubedb/operator

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

架構(gòu)

前提條件

在開(kāi)始配置過(guò)程之前,請(qǐng)檢查以下前提條件。

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

部署 Pgpool-II

Kubernetes 不需要 Pgpool-II 的健康檢查、自動(dòng)故障轉(zhuǎn)移、watchdog 和在線(xiàn)恢復(fù)功能。您只需要啟用負(fù)載平衡和連接池。

Pgpool-II pod 應(yīng)該使用以下最低配置:

backend_hostname0 = '<primary service name>'
backend_hostname1 = '<replica service name>'
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.使用環(huán)境變量

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

2.使用 ConfigMap

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

您可能需要在生產(chǎn)環(huán)境中配置客戶(hù)端身份驗(yàn)證和更多參數(shù)。在生產(chǎn)環(huán)境中,我們建議使用 ConfigMap 來(lái)配置 pgpool.conf 和 pool_hba.conf。

使用環(huán)境變量配置 Pgpool-II

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

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

以 PGPOOL_PARAMS_ 開(kāi)頭的環(huán)境變量可以轉(zhuǎn)換為 Pgpool-II 的配置參數(shù),這些值可以覆蓋默認(rèn)設(shè)置。

在 Kubernetes 上,您只需要指定兩個(gè)后端節(jié)點(diǎn)。根據(jù)您的 PostgreSQL 集群信息更新 pgpool-deploy-minimal.yaml。將主服務(wù)名稱(chēng)指定為 backend_hostname0。將副本服務(wù)名稱(chēng)指定為 backend_hostname1。因?yàn)楣收限D(zhuǎn)移由 Kubernetes 管理,所以將 DISALLOW_TO_FAILOVER 標(biāo)志指定給兩個(gè)節(jié)點(diǎn)的 backend_flag,并將 ALWAYS_PRIMARY 標(biāo)志指定給 backend_flag0。 backend_data_directory 的設(shè)置不是必需的。

  • 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

例如,清單中定義的以下環(huán)境變量,

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 中轉(zhuǎn)換為以下配置參數(shù)。

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

然后,您需要定義包含 PostgreSQL 用戶(hù)的用戶(hù)名和密碼的環(huán)境變量,用于客戶(hù)端身份驗(yàn)證。

配置清單后,運(yùn)行以下命令部署 Pgpool-II。

kubectl apply -f pgpool-deploy-minimal.yaml

使用 ConfigMap 配置 Pgpool-II

或者,您可以使用 Kubernetes ConfigMap 來(lái)存儲(chǔ)整個(gè) pgpool.conf 和 pool_hba.conf。ConfigMap 可以作為卷掛載到 Pgpool-II 的容器中。

您可以從以下存儲(chǔ)庫(kù)下載定義 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 的清單采用以下格式。您可以根據(jù)您的配置偏好對(duì)其進(jìn)行更新。要使用 pool_hba.conf 進(jìn)行客戶(hù)端身份驗(yàn)證,您需要打開(kāi) enable_pool_hba。默認(rèn)為關(guān)閉。

  • 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 用戶(hù)的用戶(hù)名和密碼的環(huán)境變量,用于客戶(hù)端身份驗(yàn)證。

運(yùn)行以下命令創(chuàng)建 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 和服務(wù)。

Pgpool-II 配置

后端設(shè)置

在 Kubernetes 上,您只需要指定兩個(gè)后端節(jié)點(diǎn)。指定主服務(wù)名稱(chēng)為 backend_hostname0,副本服務(wù)名稱(chēng)為 ackend_hostname1。

backend_hostname0 = '<primary service name>'
backend_hostname1 = '<replica service name>'
backend_port0 = '5432'
backend_port1 = '5432'

自動(dòng)故障轉(zhuǎn)移

Pgpool-II 能夠定期連接到已配置的 PostgreSQL 后端并檢查 PostgreSQL 的狀態(tài)。如果檢測(cè)到錯(cuò)誤,Pgpool-II 將觸發(fā)故障轉(zhuǎn)移。在 Kubernetes 上,Kubernetes 會(huì)監(jiān)控 PostgreSQL 的 Pod,如果一個(gè) Pod 宕機(jī),Kubernetes 會(huì)重啟一個(gè)新的 Pod。您需要禁用 Pgpool-II 的自動(dòng)故障轉(zhuǎn)移,因?yàn)?Kubernetes 不需要 Pgpool-II 的自動(dòng)故障轉(zhuǎn)移。

將 PostgreSQL node 0 指定為主節(jié)點(diǎn) (ALWAYS_PRIMARY),因?yàn)榧词怪鞴?jié)點(diǎn)或副本 pod 擴(kuò)展、重新啟動(dòng)或發(fā)生故障轉(zhuǎn)移,服務(wù)名稱(chēng)也不會(huì)更改。

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

將密碼注冊(cè)到 pool_passwd

Pgpool-II 使用包含 PostgreSQL 用戶(hù)密碼的 pool_passwd 文件執(zhí)行身份驗(yàn)證。

  • pool_passwd

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

在 Pgpool-II pod 啟動(dòng)時(shí),Pgpool-II 自動(dòng)執(zhí)行 pg_md5 命令,根據(jù) _USERNAME 和 _PASSWORD 格式定義的環(huán)境變量生成 pool_passwd。

  • pg_md5

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

代表 PostgreSQL 用戶(hù)的用戶(hù)名和密碼的環(huán)境變量必須按以下格式定義:

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

使用 Secret 定義環(huán)境變量是保證用戶(hù)憑據(jù)安全的推薦方法。在大多數(shù) PostgreSQL Operators 中,創(chuàng)建 PostgreSQL 集群時(shí)會(huì)自動(dòng)創(chuàng)建幾個(gè)定義 PostgreSQL 用戶(hù)憑據(jù)的 Secret。使用 kubectl get secret 命令檢查現(xiàn)有的 Secret。

例如,創(chuàng)建 mypostgres-postgres-secret 來(lái)存儲(chǔ) postgres 用戶(hù)的用戶(hù)名和密碼。要引用這個(gè) secret,您可以定義如下環(huán)境變量:

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

啟動(dòng) Pgpool-II pod 時(shí),會(huì)在 /opt/pgpool-II/etc 下自動(dòng)生成 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

流復(fù)制檢查

Pgpool-II 能夠定期連接到已配置的 PostgreSQL 后端并檢查復(fù)制延遲。要使用此功能,需要 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

下面是一個(gè)使用 postgres 用戶(hù)每隔 10 秒連接到 PostgreSQL 以執(zhí)行流式復(fù)制檢查的示例。因?yàn)?sr_check_password 留空,所以 Pgpool-II 會(huì)從 pool_passwd 中獲取 postgres 用戶(hù)的密碼。

sr_check_period = 10
sr_check_user='postgres'

創(chuàng)建 secret 存儲(chǔ) sr_check_user 中指定的 PostgreSQL 用戶(hù)的用戶(hù)名和密碼,并配置環(huán)境變量以引用創(chuàng)建的 Secret。在大多數(shù) PostgreSQL Operators 中,創(chuàng)建 PostgreSQL 集群時(shí)會(huì)自動(dòng)創(chuàng)建幾個(gè)定義 PostgreSQL 用戶(hù)憑據(jù)的 secret。使用 kubectl get secret 命令檢查現(xiàn)有的 secret。

例如,下面的環(huán)境變量引用了 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 連接到任何副本,而不是連接到所有副本。即使有多個(gè)副本,Pgpool-II 也將它們作為一個(gè)副本進(jìn)行管理。因此,Pgpool-II 可能無(wú)法正確確定復(fù)制延遲。要禁用此功能,請(qǐng)配置以下參數(shù):

sr_check_period = 0

SSL 設(shè)置

打開(kāi) ssl 以啟用 SSL 連接。

ssl = on

當(dāng) ssl = on 時(shí),在 Pgpool-II 啟動(dòng)時(shí),會(huì)在 /opt/pgpool-II/certs/ 下自動(dòng)生成私鑰文件和證書(shū)文件。 ssl_key 和 ssl_cert 會(huì)自動(dòng)配置私鑰文件和證書(shū)文件的路徑。

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

hostssl    all         all         0.0.0.0/0             md5

帶監(jiān)控的 Pgpool-II

Pgpool-II Exporter 是 Pgpool-II 指標(biāo)的 Prometheus 導(dǎo)出器。

  • 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 的環(huán)境變量的設(shè)置。

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


責(zé)任編輯:武曉燕 來(lái)源: 黑客下午茶
相關(guān)推薦

2019-04-23 09:48:21

KubernetesPostgreSQL

2019-12-30 15:30:13

連接池請(qǐng)求PHP

2023-10-17 08:08:37

Dubbo服務(wù)注冊(cè)中心

2023-10-27 12:36:37

gRPCKubernetes

2022-08-31 08:30:32

kubernetesMetalLB

2023-02-13 16:39:45

Kubernetes容器負(fù)載均衡器

2018-06-25 09:54:14

LinuxDNS負(fù)載均衡

2016-07-29 15:49:58

DockerKubernetesMongoDB

2025-03-27 11:03:18

2009-07-20 14:03:43

Ado.net連接池

2023-01-26 11:56:31

Kubernete虛擬機(jī)k3s

2019-06-03 09:15:15

KubernetesKafka數(shù)據(jù)庫(kù)

2011-06-01 13:54:10

MySQL

2021-05-27 09:50:03

連接池FTP服務(wù)器

2018-02-07 16:23:58

連接池內(nèi)存池AI

2022-10-24 08:14:35

長(zhǎng)連接負(fù)載均衡Conusmer

2010-04-20 13:58:41

網(wǎng)絡(luò)負(fù)載均衡

2009-09-22 14:52:55

Hibernate p

2009-09-22 16:04:50

Hibernate連接

2009-06-17 16:22:45

Hibernate連接
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 综合二区 | 国产精品美女久久久av超清 | 91精品在线播放 | 欧美jizzhd精品欧美巨大免费 | 久久久久久国产精品免费免费 | 久久精品99| 日日操视频 | 亚洲精品黄 | h片在线看 | 精品久久久久一区 | 在线激情视频 | 国产成人一区二 | 在线看av网址 | 在线免费小视频 | 午夜在线影院 | 全免费a级毛片免费看视频免 | 国产成人精品一区 | 欧美成视频 | 最新av在线网址 | 国产精品免费看 | 91在线观看免费 | 日韩中文不卡 | 久久亚洲国产精品 | 亚洲 中文 欧美 日韩 在线观看 | 中文字幕加勒比 | 久久精品国产99国产 | 欧美日韩在线一区二区 | 国产高清精品一区二区三区 | 一区二区三区视频在线免费观看 | 狠狠色香婷婷久久亚洲精品 | 亚洲欧美精品 | 日韩欧美亚洲 | 精品国产伦一区二区三区观看体验 | 欧美在线a | 久久中文字幕一区 | 日韩二区 | 欧美国产日韩在线观看成人 | 天堂在线www | 色香婷婷 | 午夜精品久久久久久久久久久久久 | 国产精品久久9 |