温馨提示×

centos pgadmin集群部署方法

小樊
33
2025-12-29 10:11:44
栏目: 智能运维

总体架构与前提

  • 目标是在 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 方式: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),保证多实例看到同一份配置与文件存储。

在 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 的服务器状态功能巡检主从角色、复制延迟与连接健康度,定期演练故障切换。

0