Huaweicloud helm安装PostgreSQL HA

在 《Huaweicloud CCE helm install Bitnami PostgreSQL》写了下如何通过helm部署单节点 PG 和 master/standy架构。但神奇的会发现 Bitnami 除了提供这个helm chart外,还有一个 PostgreSQL HA 的chart,两者之间有何异同呢?

一、PostgreSQL-HA 和 PostgreSQL Helm chart之间的差异

有两种不同的方法来部署 PostgreSQL 集群:使用 PostgreSQL Helm 图表或 PostgreSQL 高可用性 (HA) Helm 图表。这两种解决方案都提供了一种在生产环境中运行 PostgreSQL 的简单可靠的方法。继续阅读以发现它们之间的差异,并检查哪一个更适合您的需求。

  • PostgreSQL HA 和 PostgreSQL chart 都配置具有主从拓扑的集群。主节点具有写入权限,而复制则在具有只读权限的从节点上进行。
  • PostgreSQL HA Helm chart 默认部署一个三节点集群,一个节点用于启动 pgpool,还有一主一从的PostgreSQL。PostgreSQL chart 默认配置有两个节点的集群(一主一从)。
  • PostgreSQL HA Helm chart 使用 pgpool 来处理与节点的连接。pgpool 负责在节点之间传播查询。
  • PostgreSQL HA Helm chart 包含一个 repmgr 模块,该模块通过自动成员资格控制确保高可用性。如果主节点宕机,任何一个从节点都会被提升为主节点以避免数据丢失。

下图显示了两者的区别:

pg-ha-different

二、PostgreSQL-HA 的安装

因为华为云CCE使用的存储类型是csi-disk,这里我们指定下,

helm install pgha  oci://registry-1.docker.io/bitnamicharts/postgresql-ha \
    --set postgresql.password=pgpasswd \
    --set postgresql.repmgrPassword=pgreppasswd \
    --set persistence.storageClass=csi-disk

# 查看安装结果
[root@testcce-92497 ~]# kubectl get pods
NAME                                        READY   STATUS    RESTARTS   AGE
pgha-postgresql-ha-pgpool-d47b5575b-qc8gh   1/1     Running   0          101s
pgha-postgresql-ha-postgresql-0             1/1     Running   0          101s
pgha-postgresql-ha-postgresql-1             1/1     Running   0          101s
pgha-postgresql-ha-postgresql-2             1/1     Running   0          101s
[root@testcce-92497 ~]#
[root@testcce-92497 ~]#
[root@testcce-92497 ~]# kubectl get pods
NAME                                        READY   STATUS    RESTARTS   AGE
pgha-postgresql-ha-pgpool-d47b5575b-qc8gh   1/1     Running   0          109s
pgha-postgresql-ha-postgresql-0             1/1     Running   0          109s
pgha-postgresql-ha-postgresql-1             1/1     Running   0          109s
pgha-postgresql-ha-postgresql-2             1/1     Running   0          109s
[root@testcce-92497 ~]# kubectl get svc
NAME                                     TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)    AGE
kubernetes                               ClusterIP   10.247.0.1       <none>        443/TCP    4d2h
pgha-postgresql-ha-pgpool                ClusterIP   10.247.181.238   <none>        5432/TCP   113s
pgha-postgresql-ha-postgresql            ClusterIP   10.247.179.184   <none>        5432/TCP   113s
pgha-postgresql-ha-postgresql-headless   ClusterIP   None             <none>        5432/TCP   113s
[root@testcce-92497 ~]# kubectl get pvc
NAME                                   STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   AGE
data-pgha-postgresql-ha-postgresql-0   Bound    pvc-ba91a1f2-2678-4a97-b5e5-19e90e6e8d9d   8Gi        RWO            csi-disk       2m1s
data-pgha-postgresql-ha-postgresql-1   Bound    pvc-d31b0210-0861-4cdb-8564-b376df5adf9f   8Gi        RWO            csi-disk       2m1s
data-pgha-postgresql-ha-postgresql-2   Bound    pvc-6d5c9774-9cdc-466b-9a40-159487f25e44   8Gi        RWO            csi-disk       2m1s

# 登录验证
[root@testcce-92497 ~]# kubectl exec -it pgha-postgresql-ha-pgpool-d47b5575b-qc8gh -- /bin/bash
I have no name!@pgha-postgresql-ha-pgpool-d47b5575b-qc8gh:/$ psql -h pgha-postgresql-ha-pgpool -p 5432 -U postgres -d postgres
Password for user postgres:
psql (14.8, server 15.3)
WARNING: psql major version 14, server major version 15.
         Some psql features might not work.
Type "help" for help.

postgres=# \l
                                  List of databases
   Name    |  Owner   | Encoding |   Collate   |    Ctype    |   Access privileges
-----------+----------+----------+-------------+-------------+-----------------------
 postgres  | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 |
 repmgr    | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 |
 template0 | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres          +
           |          |          |             |             | postgres=CTc/postgres
 template1 | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres          +
           |          |          |             |             | postgres=CTc/postgres
(4 rows)

如果需要涉及指定版本和副本数,也可以使用如下指令进行更新:

helm upgrade my-release --version 8.0.0 oci://registry-1.docker.io/bitnamicharts/postgresql-ha \
    --set postgresql.password=[POSTGRESQL_PASSWORD] \
    --set postgresql.repmgrPassword=[REPMGR_PASSWORD] \
    --set postgresql.replicaCount=1 \
    --set postgresql.upgradeRepmgrExtension=true

参考页面:

https://artifacthub.io/packages/helm/bitnami/postgresql-ha

https://docs.bitnami.com/kubernetes/infrastructure/postgresql/get-started/compare-solutions/

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注