centos pgadmin集群部署方法
导读:总体架构与前提 目标是在 CentOS 上部署多实例的 pgAdmin 4,通过 Nginx 做反向代理与负载均衡,实现对外统一入口与高可用;pgAdmin 管理的后端是 PostgreSQL 高可用集群(推荐 Patroni + etc...
总体架构与前提
- 目标是在 CentOS 上部署多实例的 pgAdmin 4,通过 Nginx 做反向代理与负载均衡,实现对外统一入口与高可用;pgAdmin 管理的后端是 PostgreSQL 高可用集群(推荐 Patroni + etcd)。pgAdmin 默认监听 5050 端口(RPM 包常见),也可使用 pgadmin4-web + Apache 方案。为消除单点,pgAdmin 的用户配置与会话需做共享或外部化存储。
部署 PostgreSQL 高可用集群
- 安装 PostgreSQL 官方仓库与软件(以 15 为例):
- sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-$(rpm -E %{ rhel} )-x86_64/pgdg-redhat-repo-latest.noarch.rpm
- sudo yum install -y postgresql15-server postgresql15-devel
- sudo /usr/pgsql-15/bin/postgresql-15-setup initdb & & sudo systemctl enable --now postgresql-15
- 主库基础配置(postgresql.conf):
- listen_addresses = ‘*’
- wal_level = replica
- max_replication_slots = 5
- hot_standby = on
- 主库认证(pg_hba.conf):
- host replication replicator < 从节点IP> /32 md5
- host all all 0.0.0.0/0 md5
- 安装 Patroni(每个节点):sudo yum install -y python3-pip & & sudo pip3 install patroni[etcd]
- Patroni 配置示例(/etc/patroni.yml,节选):
- scope: postgres_cluster
- name: node1
- restapi: { listen: 0.0.0.0:8008, connect_address: < 主节点IP> :8008 }
- etcd: { hosts: [“< 节点1IP> :2379”,“< 节点2IP> :2379”] }
- postgresql:
- use_pg_rewind: true
- parameters: { wal_level: replica, hot_standby: on, max_replication_slots: 5 }
- 启动与验证:
- 主从节点分别执行:sudo patroni /etc/patroni.yml
- 验证:curl http://< 节点IP> :8008/patroni 查看角色与状态。
部署多实例 pgAdmin
- 安装 pgAdmin(每个实例节点,二选一):
- RPM 方式(常见默认端口 5050):
- 添加仓库:sudo rpm -i https://download.pgadmin.org/pub/pgadmin/pgadmin4/yum/pgadmin4-redhat.repo
- 安装:sudo yum install -y pgadmin4
- 启动:sudo systemctl start pgadmin4 & & sudo systemctl enable pgadmin4
- Web 方式(pgadmin4-web + Apache):
- 安装:sudo yum install -y pgadmin4-web
- 初始化:sudo /usr/pgadmin4/bin/pgadmin4-web-setup.sh(设置管理员邮箱与密码)
- 配置 Apache:编辑 /etc/httpd/conf.d/pgadmin4.conf(如需远程访问,将 Listen/ServerName 调整为 0.0.0.0 或域名)
- 启动:sudo systemctl restart httpd & & sudo systemctl enable httpd
- RPM 方式(常见默认端口 5050):
- 访问测试:
- RPM 方式:http://< 实例IP> :5050
- Web 方式:http://< 域名或IP> /
- 防火墙放行:
- sudo firewall-cmd --permanent --add-service=http
- sudo firewall-cmd --permanent --add-port=5432/tcp
- sudo firewall-cmd --reload。
配置高可用访问与配置同步
- Nginx 反向代理与负载均衡(对外统一入口,示例域名 pgadmin.yourdomain.com):
- 安装:sudo yum install -y nginx & & sudo systemctl enable --now nginx
- /etc/nginx/nginx.conf 关键片段:
- upstream pgadmin_cluster { server < pg1_IP> :5050; server < pg2_IP> :5050; }
- server {
listen 80;
server_name pgadmin.yourdomain.com;
- location / { proxy_pass http://pgadmin_cluster; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } }
- 重启:sudo systemctl restart nginx
- pgAdmin 配置同步与共享(消除实例间数据不一致与单点):
- 方式 A(推荐):将用户配置存入外部数据库(SQLAlchemy)
- 编辑 pgAdmin 配置(常见路径如:/var/lib/pgadmin/config_local.py 或 /etc/pgadmin/config_systemd.py)
- 设置:STORAGE_TYPE = ‘sqlalchemy’
- 设置:SQLALCHEMY_DATABASE_URI = ‘postgresql://pgadmin_user:StrongPass@< PG_HOST> /pgadmin’
- 在目标 PostgreSQL 创建库与用户并授权:CREATE DATABASE pgadmin; CREATE USER pgadmin WITH PASSWORD ‘StrongPass’; GRANT ALL PRIVILEGES ON DATABASE pgadmin TO pgadmin;
- 重启 pgAdmin 使配置生效
- 方式 B(可选):共享文件系统(如 GlusterFS/Ceph)挂载到 pgAdmin 数据目录(/var/lib/pgadmin),保证多实例看到同一份配置与文件存储。
- 方式 A(推荐):将用户配置存入外部数据库(SQLAlchemy)
在 pgAdmin 中添加 PostgreSQL 集群
- 登录 pgAdmin(通过 Nginx 域名或实例 IP:5050),左侧 Servers → Create → Server:
- General:Name(如:PostgreSQL_Cluster)
- Connection:
- Host:填入 Patroni 的 VIP 或当前主库 IP
- Port:5432
- Username/Password:使用具备管理员权限的数据库用户(如 postgres 或专用管理账号)
- 保存后验证连接;建议将主从节点分别添加为服务器对象,便于维护与故障切换观测。
安全与运维要点
- 加密传输:
- 对外启用 HTTPS(Nginx 配置 TLS 证书),对内建议启用 SSL 直连数据库(PostgreSQL 配置 ssl=on、证书与客户端验证)。
- 访问控制:
- 通过 firewalld 仅开放必要端口(HTTP/HTTPS、数据库端口仅对 pgAdmin 网段开放),并限制数据库 pg_hba.conf 的来源网段与认证方式。
- 备份与恢复:
- 定期备份 pgAdmin 的外部配置库(如 pgadmin 数据库)与元数据;验证恢复流程。
- 监控与故障演练:
- 利用 Patroni REST API 与 pgAdmin 的服务器状态功能巡检主从角色、复制延迟与连接健康度,定期演练故障切换。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: centos pgadmin集群部署方法
本文地址: https://pptw.com/jishu/783376.html
