kubernetes部署postgresql高可用集群
部署步骤
参考官网地址:https://artifacthub.io/packages/helm/bitnami/postgresql-ha
准备工作
需安装kubernetes集群;
需安装Helm;
需安装Nexus3;
需安装NFS持久化插件。
如果未安装参考我的【kubernetes集群部署教程】【kubernetes部署Nexus3教程】
Helm部署postgresql
# 添加仓库源
helm repo add bitnami https://charts.bitnami.com/bitnami
在官网上查看到截止目前的版本如下图:

经过一些测试,决定采用部署11.7.7这个版本的postgresql-ha。
# 拉取镜像
helm pull bitnami/postgresql-ha --version 11.7.7
# 解压
tar -xvf postgresql-ha-11.7.7.tgz
cd postgresql-ha
vi values.yaml
# 管理镜像到自己的nexus3私服,如果不采用私服可以不管
# 查看values.yaml可以查看到相关镜像
docker pull bitnami/postgresql-repmgr:15.3.0-debian-11-r16
docker tag bitnami/postgresql-repmgr:15.3.0-debian-11-r16 10.108.69.78:8082/bitnami/postgresql-repmgr:15.3.0-debian-11-r16
docker push 10.108.69.78:8082/bitnami/postgresql-repmgr:15.3.0-debian-11-r16
docker pull bitnami/pgpool:4.4.3-debian-11-r10
docker tag bitnami/pgpool:4.4.3-debian-11-r10 10.108.69.78:8082/bitnami/pgpool:4.4.3-debian-11-r10
docker push 10.108.69.78:8082/bitnami/pgpool:4.4.3-debian-11-r10
docker pull bitnami/postgres-exporter:0.13.1-debian-11-r0
docker tag bitnami/postgres-exporter:0.13.1-debian-11-r0 10.108.69.78:8082/bitnami/postgres-exporter:0.13.1-debian-11-r0
docker push 10.108.69.78:8082/bitnami/postgres-exporter:0.13.1-debian-11-r0
docker pull bitnami/bitnami-shell:11-debian-11-r130
docker tag bitnami/bitnami-shell:11-debian-11-r130 10.108.69.78:8082/bitnami/bitnami-shell:11-debian-11-r130
docker push 10.108.69.78:8082/bitnami/bitnami-shell:11-debian-11-r130
# 主要编辑如下内容
#########================#########
global.storageClass: "nfs-storage"
# 设置镜像拉取为nexus3的docker私服,如果不采用私服留空
global.imageRegistry: "10.108.69.78:8083"
global.postgresql.username: "postgres"
global.postgresql.password: "xxxxxxx"
global.postgresql.repmgrUsername: "repmgr"
global.postgresql.repmgrPassword: "yyyyyy"
#########================#########
# 安装
helm install postgresql-ha .
需要修改的位置有:
global.storageClass: “nfs-storage”
nfs-storage的值为安装NFS插件的时候设定好的默认值,当然也可以设置固定的账户和密码,我这里就不设置了。
其中pgpool.replicaCount的值为1即一个pgpool副本,如果服务器有条件的话可以设置为2保障数据库的绝对高可用,默认值为1任然有数据库宕机的风险。
其中postgresql.replicaCount的值为3即三个postgresql副本(至少3个才可以仲裁)。
安装成功后有如下提示:
[root@master postgresql-ha]# helm status postgresql-ha
NAME: postgresql-ha
LAST DEPLOYED: Thu Jul 13 12:06:05 2023
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
CHART NAME: postgresql-ha
CHART VERSION: 11.7.7
APP VERSION: 15.3.0
** Please be patient while the chart is being deployed **
PostgreSQL can be accessed through Pgpool via port 5432 on the following DNS name from within your cluster:
postgresql-ha-pgpool.default.svc.cluster.local
Pgpool acts as a load balancer for PostgreSQL and forward read/write connections to the primary node while read-only connections are forwarded to standby nodes.
To get the password for "postgres" run:
export POSTGRES_PASSWORD=$(kubectl get secret --namespace default postgresql-ha-postgresql -o jsonpath="{.data.password}" | base64 -d)
To get the password for "repmgr" run:
export REPMGR_PASSWORD=$(kubectl get secret --namespace default postgresql-ha-postgresql -o jsonpath="{.data.repmgr-password}" | base64 -d)
To connect to your database run the following command:
kubectl run postgresql-ha-client --rm --tty -i --restart='Never' --namespace default --image docker.io/bitnami/postgresql-repmgr:15.3.0-debian-11-r16 --env="PGPASSWORD=$POSTGRES_PASSWORD" \
--command -- psql -h postgresql-ha-pgpool -p 5432 -U postgres -d postgres
To connect to your database from outside the cluster execute the following commands:
kubectl port-forward --namespace default svc/postgresql-ha-pgpool 5432:5432 &
psql -h 127.0.0.1 -p 5432 -U postgres -d postgres
就可以参考执行如下命令查看设定的随机密码了:
kubectl get secret --namespace default postgresql-ha-postgresql -o jsonpath="{.data.password}" | base64 -d
kubectl get secret --namespace default postgresql-ha-postgresql -o jsonpath="{.data.repmgr-password}" | base64 -d
高可用测试
安装完毕后应该有如下项:
存储卷:

pod:

service:

修改局域网中需要远程连接的windows电脑的hosts文件
10.102.108.221 postgresql-ha-pgpool
使用工具连接测试:


可以尝试创建数据库和表,然后插入数据在查看数据,发现各个pg库数据都同步即可。
可以测试把其中的某一个pod关闭掉甚至关闭某一台node节点服务(只要不关闭pgpool所在的node服务器,如果设置pgpool.replicaCount=2可以随意关闭任意台node),发现程序可以继续读写数据库,当服务器再次开机的时候发现数据将会自动同步则表示集群搭建完毕。

817

被折叠的 条评论
为什么被折叠?



