pgAdmin是PostgreSQL的图形化管理工具,需先搭建PostgreSQL数据库集群(主从复制+Patroni)作为后端,确保数据高可用。
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)sudo vim /var/lib/pgsql/15/data/postgresql.conf
取消注释并修改以下参数:
listen_addresses = '*' # 允许所有IP连接
wal_level = replica # 启用WAL日志归档
max_replication_slots = 5 # 最大复制槽数
hot_standby = on # 允许备库处于热备状态
pg_hba.conf)sudo vim /var/lib/pgsql/15/data/pg_hba.conf
在文件末尾添加以下行,允许从节点复制连接:
host replication replicator <从节点IP>/32 md5
host all all 0.0.0.0/0 md5
sudo systemctl restart postgresql-15
Patroni用于管理PostgreSQL主从切换,结合etcd实现集群状态同步。
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:
- "<主节点IP>:2379"
- "<从节点IP>:2379"
postgresql:
use_pg_rewind: true
parameters:
wal_level: replica
hot_standby: on
max_replication_slots: 5
recovery_conf:
restore_command: 'cp /var/lib/pgsql/15/wal_archive/%f %p'
sudo patroni /etc/patroni.yml
通过curl http://<主节点IP>:8008/patroni验证集群状态,确认主节点已启动。
在从节点重复步骤1-3,安装PostgreSQL和Patroni,修改postgresql.conf中的hot_standby为on,并创建/etc/patroni.yml(修改name为node2,connect_address为从节点IP),启动Patroni服务。Patroni会自动将节点加入集群并同步数据。
pgAdmin Web版支持多用户远程管理,需配合Web服务器(如Apache)部署。
sudo yum install -y pgadmin4-web
运行初始化脚本,设置管理员邮箱(用于找回密码)和初始密码:
sudo /usr/pgadmin4/bin/pgadmin4-web-setup.sh
按提示输入管理员邮箱(如admin@yourdomain.com)和密码(如PgAdminAdmin@123)。
初始化完成后,pgAdmin会自动启动。如需手动控制:
sudo systemctl start pgadmin4 # 启动服务
sudo systemctl enable pgadmin4 # 开机自启动
pgAdmin依赖Apache提供HTTP服务,修改配置文件/etc/httpd/conf.d/pgadmin4.conf:
sudo vim /etc/httpd/conf.d/pgadmin4.conf
确认以下设置(若需远程访问):
Listen 80
ServerName pgadmin.yourdomain.com
重启Apache服务:
sudo systemctl restart httpd
开放HTTP(80端口)和PostgreSQL(5432端口):
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-port=5432/tcp
sudo firewall-cmd --reload
打开浏览器,输入服务器IP或域名(如http://pgadmin.yourdomain.com),使用管理员邮箱和密码登录。
登录pgAdmin后,添加PostgreSQL集群节点:
My PostgreSQL Cluster)。<主节点IP>,Patroni会自动处理主从切换);pgadmin);YourStrongPassword123!”)。若需pgAdmin自身高可用,可通过以下方式实现:
# 拉取pgAdmin镜像
docker pull dpage/pgadmin4
# 启动3个pgAdmin容器
docker run -d --name pgadmin1 -p 8080:80 -e "PGADMIN_DEFAULT_EMAIL=admin1@example.com" -e "PGADMIN_DEFAULT_PASSWORD=123456" dpage/pgadmin4
docker run -d --name pgadmin2 -p 8081:80 -e "PGADMIN_DEFAULT_EMAIL=admin1@example.com" -e "PGADMIN_DEFAULT_PASSWORD=123456" dpage/pgadmin4
docker run -d --name pgadmin3 -p 8082:80 -e "PGADMIN_DEFAULT_EMAIL=admin1@example.com" -e "PGADMIN_DEFAULT_PASSWORD=123456" dpage/pgadmin4
创建Nginx配置文件/etc/nginx/conf.d/pgadmin.conf:
upstream pgadmin {
server localhost:8080;
server localhost:8081;
server localhost:8082;
}
server {
listen 80;
server_name pgadmin.yourdomain.com;
location / {
proxy_pass http://pgadmin;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
重启Nginx服务:
sudo systemctl restart nginx
通过http://pgadmin.yourdomain.com访问pgAdmin,Nginx会自动分发请求到多个实例。
postgresql.conf中的listen_addresses为localhost),并通过SSH隧道访问;配置SSL加密(生成证书并在pgAdmin和PostgreSQL中配置)。sudo setsebool -P httpd_can_network_connect_db 1