PostgreSQL高可用集群部署
这是在 K3s 中部署 Bitnami PostgreSQL 高可用性的指南。

概述
Bitnami 的 PostgreSQL 高可用性(HA)解决方案利用 PostgreSQL 复制管理器(repmgr)来管理 PostgreSQL 集群内的复制和故障转移过程。它确保数据冗余、负载均衡和自动故障转移,以维护数据库的可用性。
架构
PostgreSQL 节点:
主节点: 处理所有写操作。
副本节点: 处理读操作并从主节点复制数据。
Pgpool-II:
充当 PostgreSQL 节点的代理和负载均衡器。
将写查询路由到主节点,将读查询路由到副本节点。
监控节点健康状况,并在主节点故障时促进故障转移。
复制管理器(repmgr):
管理复制并自动化故障转移。
在故障期间将副本提升为主角色。
部署步骤
1. 添加 Bitnami Helm 仓库:
helm repo add bitnami https://charts.bitnami.com/bitnami2. 安装 PostgreSQL-HA Chart:
helm install access-postgresql-ha bitnami/postgresql-ha \
--namespace access \
--create-namespace \
-f values.yaml3. 配置值:
自定义 values.yaml 文件以设置所需的配置。示例:
选项 1:基本初始化
postgresql:
username: PA_NON_ROOT_USER
password: postgres
database: pbsworks
postgresPassword: '$POSTGRS_PASSWORD'选项 2:自定义初始化脚本
postgresql:
initdbScripts: |
CREATE USER myuser WITH PASSWORD 'mypassword';
CREATE DATABASE mydatabase;
GRANT ALL PRIVILEGES ON DATABASE mydatabase TO myuser;高可用性故障转移演示
集群状态:
在故障之前检查集群状态:
kubectl exec -it access-postgresql-ha-postgresql-2 -n access \
-- /opt/bitnami/scripts/postgresql-repmgr/entrypoint.sh repmgr -f /opt/bitnami/repmgr/conf/repmgr.conf cluster show示例输出:
ID | Name | Role | Status | Upstream | Timeline
1 | access-postgresql-ha-postgresql-0 | Primary | Running | | 9
2 | access-postgresql-ha-postgresql-1 | Replica | Running | access-postgresql-ha-postgresql-0 | 9触发故障转移:
手动使主节点故障并观察故障转移过程:
kubectl delete pod access-postgresql-ha-postgresql-0 -n access再次检查集群状态以确认新的主节点:
kubectl exec -it access-postgresql-ha-postgresql-2 -n access \
-- /opt/bitnami/scripts/postgresql-repmgr/entrypoint.sh repmgr -f /opt/bitnami/repmgr/conf/repmgr.conf cluster show在 10-20 秒内,副本应该被提升为主角色。
部署后配置
Pgpool-II 配置:
Pgpool-II 管理查询路由和故障转移。要访问 Pgpool-II:
kubectl port-forward svc/access-postgresql-ha-pgpool 5432:5432 -n access访问数据库:
使用 values.yaml 配置中的以下凭据:
psql -h localhost -p 5432 -U <username> -d <database>扩展节点:
要添加副本节点:
helm upgrade access-postgresql-ha bitnami/postgresql-ha \
--namespace access \
--set postgresql.replicaCount=<desired_count>故障排除
常见问题:
节点连接错误:
验证网络策略并确保所有节点能够通信。
集群未就绪:
检查 Pgpool-II 或复制管理器的日志。
故障转移延迟:
验证
values.yaml中的健康检查和超时设置。
日志访问:
kubectl logs <pod_name> -n access监控
启用监控以跟踪集群健康状况和性能。在 values.yaml 中添加以下内容:
metrics:
enabled: true通过 Prometheus 或其他监控工具访问指标。
结论
在 K3s 上部署 Bitnami PostgreSQL-HA 提供了一个强大的、高可用的数据库解决方案。通过遵循上述步骤,您可以确保最小的停机时间,并在 Kubernetes 环境中保持一致的数据库性能。

