首页 > 数据库 >PostgreSQL高可用集群部署配置指南

PostgreSQL高可用集群部署配置指南

来源:互联网 2026-07-25 08:58:16

这里是一套完整的PostgreSQL 18源码编译安装与主从复制的配置流程,涵盖了从依赖安装到systemd管理的全部环节。整个过程基于CentOS环境,如果你正准备部署高可用集群,这篇实操记录应该能帮你省掉不少弯路。 下载安装 先把编译需要的依赖装上,然后下载源码包并解压: yum install

这里是一套完整的PostgreSQL 18源码编译安装与主从复制的配置流程,涵盖了从依赖安装到systemd管理的全部环节。整个过程基于CentOS环境,如果你正准备部署高可用集群,这篇实操记录应该能帮你省掉不少弯路。

下载安装

先把编译需要的依赖装上,然后下载源码包并解压:

长期稳定更新的攒劲资源: >>>点此立即查看<<<

yum install -y gcc gcc-c++ make readline-devel zlib-devel openssl-devel libxml2-devel libxslt-devel bzip2 bison libicu-devel flex

wget https://ftp.postgresql.org/pub/source/v18.0/postgresql-18.0.tar.gz
tar xf postgresql-18.0.tar.gz
cd postgresql-18.0

升级OpenSSL步骤

先检查一下OpenSSL版本,如果还是1.0.2k这种,那必须升级——因为它不支持TLS 1.3,编译时缺SSL_CTX_set_ciphersuites函数,后续的HTTPS连接会受限制。升级步骤很简单:

yum groupinstall -y "Development Tools"
yum install -y perl-core zlib-devel

cd /tmp
wget https://www.openssl.org/source/openssl-1.1.1w.tar.gz
tar -xzf openssl-1.1.1w.tar.gz
cd openssl-1.1.1w

# 配置安装路径(避免影响系统 OpenSSL)
./config --prefix=/usr/local/ssl --openssldir=/usr/local/ssl shared zlib

make -j$(nproc)
sudo make install

安装完成后配置环境变量,临时或永久都可:

# 临时生效(当前 shell)
export PATH="/usr/local/ssl/bin:$PATH"
export LD_LIBRARY_PATH="/usr/local/ssl/lib:$LD_LIBRARY_PATH"
export PKG_CONFIG_PATH="/usr/local/ssl/lib/pkgconfig:$PKG_CONFIG_PATH"

# 永久生效(可选)
echo 'export PATH="/usr/local/ssl/bin:$PATH"' >> ~/.bashrc
echo 'export LD_LIBRARY_PATH="/usr/local/ssl/lib:$LD_LIBRARY_PATH"' >> ~/.bashrc
echo 'export PKG_CONFIG_PATH="/usr/local/ssl/lib/pkgconfig:$PKG_CONFIG_PATH"' >> ~/.bashrc
source ~/.bashrc

# 将库路径加入系统动态链接器配置
echo "/usr/local/ssl/lib" > /etc/ld.so.conf.d/openssl-1.1.1.conf
ldconfig

编译安装

现在可以编译PostgreSQL了,记得在configure时指定新OpenSSL的头文件和库路径:

./configure \
  --prefix=/usr/local/pgsql \
  --with-openssl \
  CPPFLAGS="-I/usr/local/ssl/include" \
  LDFLAGS="-L/usr/local/ssl/lib"

make -j$(nproc)
make install

初始化启动

创建专用系统用户,并设置数据目录和安装目录的权限:

useradd postgres
chown -R postgres:postgres /shaxiang/pg
chown -R postgres:postgres /usr/local/pgsql
su - postgres
/usr/local/pgsql/bin/initdb -D /shaxiang/pg/data --locale=en_US.UTF-8 -E UTF8
/usr/local/pgsql/bin/pg_ctl -D /shaxiang/pg/data -l logfile start   # 测试启动

修改添加配置

Primary(pg1)上

编辑主库的postgresql.conf,重点调整连接监听、WAL和复制相关参数:

vim /shaxiang/pg/data/postgresql.conf

# 连接与监听
listen_addresses = '*'
port = 5432

# WAL / replication
wal_level = replica
max_wal_senders = 10
max_replication_slots = 10                # 如果用 replication slots
wal_keep_size = 1GB                        # 取决于 WAL 产生速度与网络延迟
archive_mode = on
archive_command = 'test ! -f /data/pgsql/archive/%f && cp %p /data/pgsql/archive/%f'

# 热备
hot_standby = on

# 可选:同步复制策略(见下)
synchronous_commit = on
synchronous_standby_names = 'ANY1 (pg2,pg3)'

接着编辑pg_hba.conf,允许复制用户和客户端访问:

vim /shaxiang/pg/data/pg_hba.conf

host    replication    replicator    192.168.123.0/24    md5
host    all            all           0.0.0.0/0           md5

创建复制用户并重启主库:

CREATE USER replicator WITH REPLICATION LOGIN ENCRYPTED PASSWORD '123456';
/usr/local/pgsql/bin/pg_ctl restart -D /shaxiang/pg/data

在Standby(pg2、pg3)上准备数据

使用pg_basebackup从主库拉取完整数据,并自动生成recovery配置:

su - postgres
rm -rf /shaxiang/pg/data/*   # 清理目标目录(如有旧数据)
/usr/local/pgsql/bin/pg_basebackup -h 192.168.123.70 -U replicator -D /shaxiang/pg/data -Fp -Xs -P -R

完成后查看data目录下是否生成了同步数据。如果需要配置同步复制(两个从库),编辑生成的 postgresql.auto.conf,按如下格式分别指定连接信息(注意application_name要唯一):

primary_conninfo = 'user=replicator password=123456 host=192.168.123.70 port=5432 application_name=standby1 sslmode=prefer'
primary_conninfo = 'user=replicator password=123456 host=192.168.123.70 port=5432 application_name=standby2 sslmode=prefer'

验证复制状态:在主库上执行以下查询:

SELECT client_addr, application_name, state, sync_state FROM pg_stat_replication;

PostgreSQL高可用集群部署配置指南

sync_statesync表示达到同步复制策略;async为异步;quorum表示同步组。state显示streaming表示连接正常。

配置systemd管理

创建服务文件,方便用systemctl管理启停:

/etc/systemd/system/postgresql.service

[Unit]
Description=PostgreSQL database server
After=network.target

[Service]
Type=forking
User=postgres
Group=postgres
ExecStart=/usr/local/pgsql/bin/pg_ctl start -D /shaxiang/pg/data -l /shaxiang/pg/logfile
ExecStop=/usr/local/pgsql/bin/pg_ctl stop -D /shaxiang/pg/data
ExecReload=/usr/local/pgsql/bin/pg_ctl reload -D /shaxiang/pg/data
PIDFile=/shaxiang/pg/data/postmaster.pid
Restart=on-failure

[Install]
WantedBy=multi-user.target

启用并启动服务(如果之前有手动启动的pg进程,记得先kill掉,启动异常时请查看/shaxiang/pg/logfile):

systemctl daemon-reload
systemctl enable postgresql
systemctl start postgresql
systemctl status postgresql

至此,从源码编译到集群复制的全套配置就完成了。后续可以按需调整同步策略、归档路径或添加监控。

侠游戏发布此文仅为了传递信息,不代表侠游戏网站认同其观点或证实其描述

热游推荐

更多
湘ICP备14008430号-1 湘公网安备 43070302000280号
All Rights Reserved
本站为非盈利网站,不接受任何广告。本站所有软件,都由网友
上传,如有侵犯你的版权,请发邮件给xiayx666@163.com
抵制不良色情、反动、暴力游戏。注意自我保护,谨防受骗上当。
适度游戏益脑,沉迷游戏伤身。合理安排时间,享受健康生活。