[英]Synchronous vs asynchronous streaming replication for Postgres with PgPool
[英]Kubernetes postgres replication with pgpool
嘗試在 kubernetes ( https://github.com/paunin/PostDock/tree/master/k8s/example2-single-statefulset ) 中部署 postgres,
kubectl get pods -n postgres
NAME READY STATUS RESTARTS AGE
psql-db-pgpool-8****c-7**k 1/1 Running 0 35d
psql-db-pgpool-8****c-m**5 1/1 Running 0 35d
psql-db-node-0 1/1 Running 0 35d
psql-db-node-1 1/1 Running 0 35d
psql-db-node-2 1/1 Running 0 20h
root@postgres-db-node-0:/# psql -h localhost postgres -U test
psql (11.4 (Debian 11.4-1.pgdg90+1))
Type "help" for help.
postgres=> \l
psql -h NODE_IP -U test -d postgres --port NODE_PORT
psql: FATAL: md5 authentication failed
DETAIL: pool_passwd file does not contain an entry for "test"
root@psql-db-pgpool-8****c-7**k:/# cat /usr/local/etc/pool_passwd
user1:md5****422f
replica_user:md5****3
在數據庫中創建的新用戶“test”不會反映在 pgpool 中。 它是否以這種方式工作,每次創建新用戶時創建和更新 pgpool? 還是我錯過了此用戶更新的某些內容。
您部署的 postgres 示例使用秘密 object 來存儲用戶和密碼憑據。 這是在 kubernetes 部署中管理敏感數據的推薦方法。
此示例中有以下說明:
kubectl create -f./namespace/
創建命名空間kubectl create -f./configs/
kubectl create -f./volumes/
kubectl create -f./services/
kubectl create -f./nodes/
kubectl create -f./pgpool/
如果您按照正確的順序進行操作,則在從configs/secret.yml
調用kubectl create -f./configs/
時會創建mysystem-secret
secret object。
apiVersion: v1
kind: Secret
metadata:
namespace: mysystem
name: mysystem-secret
type: Opaque
data:
app.db.user: d2lkZQ== #wide
app.db.password: cGFzcw== #pass
app.db.cluster.replication.user: cmVwbGljYV91c2Vy #replica_user
app.db.cluster.replication.password: cmVwbGljYV9wYXNz #replica_pass
app.db.pool.users: d2lkZTpwYXNz #wide:pass
app.db.pool.pcp.user: cGNwX3VzZXI= #pcp_user
app.db.pool.pcp.password: cGNwX3Bhc3M= #pcp_pass
請注意,每個編碼密碼旁邊的注釋都是解碼密碼,因此在生產設置中應避免使用。
然后來自mysystem-secret
的用戶和密碼憑證在kubectl create -f./nodes/
和kubectl create -f./pgpool/
中用作所有副本中的環境值,可用於連接到數據庫。
...
- name: "POSTGRES_USER"
valueFrom:
secretKeyRef:
name: mysystem-secret
key: app.db.user
- name: "POSTGRES_PASSWORD"
valueFrom:
secretKeyRef:
name: mysystem-secret
key: app.db.password
...
如果您想使用您自己的用戶名和密碼您需要修改configs/secret.yml
文件並將您希望修改的密碼替換為 base64 編碼的密碼。
您可以使用以下命令輕松地將任何密碼編碼為 base64:
echo -n 'admin' | base64
YWRtaW4=
echo -n '1f2d1e2e67df' | base64
MWYyZDFlMmU2N2Rm
更新:
要在集群部署后添加可以使用 pgpool 的其他用戶,您可以使用工具postgres-operator 。 通過 exec 手動添加到 pod 並在本地創建的用戶不會傳播到其他節點。
按照這些說明安裝 Postgres Operator(pgo 客戶端)並將其配置為與 kubernetes 一起使用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.