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

 更新时间:2026年02月09日 08:31:32   作者:磐基Stack专业服务团队  
本文主要介绍了PostgreSQL高可用集群部署与配置指南,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

#作者:程宏斌

下载安装

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-fips太旧,不支持TLS 1.3,缺少SSL_CTX_set_ciphersuites需要升级

yum groupinstall -y “Development Tools”
yum install -y perl-core zlib-devel
下载并编译 OpenSSL ≥ 1.1.1
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

编译安装

./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)上

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)'

#允许从库连接做复制
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';
重启 Primary
/usr/local/pgsql/bin/pg_ctl restart -D /shaxiang/pg/data

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

(使用 pg_basebackup)
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下是不是有生成同步的数据

如果配置同步(两个从)

vim postgresql.auto.conf
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'

验证复制状态(在Primary上)

SELECT client_addr, application_name, state, sync_state FROM pg_stat_replication;

sync_state为sync表示达到同步复制策略;async为异步。quorum为同步组
state显示streaming表示连接中。

配置systemd管理

/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

启用并启动:(可能需要提前kill之前启动的pg进程,启动异常请查看/shaxiang/pg/logfile)

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

到此这篇关于PostgreSQL高可用集群部署与配置指南的文章就介绍到这了,更多相关PostgreSQL高可用集群部署与配置内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • postgresql 查询集合结果用逗号分隔返回字符串处理的操作

    postgresql 查询集合结果用逗号分隔返回字符串处理的操作

    这篇文章主要介绍了postgresql 查询集合结果用逗号分隔返回字符串处理的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-02-02
  • PostgreSQL如何查看事务所占有的锁实操指南

    PostgreSQL如何查看事务所占有的锁实操指南

    这篇文章主要给大家介绍了关于PostgreSQL如何查看事务所占有锁的相关资料,文中通过代码以及图文介绍的非常详细,对大家学习或者使用PostgreSQL具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-10-10
  • postgresql varchar字段regexp_replace正则替换操作

    postgresql varchar字段regexp_replace正则替换操作

    这篇文章主要介绍了postgresql varchar字段regexp_replace正则替换操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-01-01
  • Postgres中UPDATE更新语句源码分析

    Postgres中UPDATE更新语句源码分析

    这篇文章主要给大家介绍了关于Postgres中UPDATE更新语句源码分析的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2022-03-03
  • PostgreSQL之pgdump备份恢复操作

    PostgreSQL之pgdump备份恢复操作

    这篇文章主要介绍了PostgreSQL之pgdump备份恢复操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-12-12
  • Mac OS上安装PostgreSQL完整图文教程

    Mac OS上安装PostgreSQL完整图文教程

    这篇文章主要介绍了Mac OS上安装PostgreSQL的完整图文教程,问文中通过代码详细介绍了如何设置密码、允许远程连接、常用命令、备份与恢复、卸载以及常见问题解决方法,需要的朋友可以参考下
    2026-01-01
  • PostgreSQL使用MySQL外表的步骤详解(mysql_fdw)

    PostgreSQL使用MySQL外表的步骤详解(mysql_fdw)

    这篇文章主要介绍了PostgreSQL使用MySQL外表的步骤(mysql_fdw),本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-01-01
  • PostgreSQL处理时间段、时长转为秒、分、小时代码示例

    PostgreSQL处理时间段、时长转为秒、分、小时代码示例

    最近在操作数据库时,遇到频繁的时间操作,每次弄完了就忘了,今天痛定思痛,下定决心对postgres的时间操作进行一下总结,这篇文章主要给大家介绍了关于PostgreSQL处理时间段、时长转为秒、分、小时的相关资料,需要的朋友可以参考下
    2023-10-10
  • 关于PostgreSql数据库与mysql数据库的不同点以及注意事项

    关于PostgreSql数据库与mysql数据库的不同点以及注意事项

    PostgreSQL和MySQL是两种流行的关系型数据库管理系统(RDBMS),它们都可以用来存储和管理数据,但是它们在某些方面有所不同,下面这篇文章主要给大家介绍了关于PostgreSql数据库与mysql数据库的不同点以及注意事项的相关资料,需要的朋友可以参考下
    2023-05-05
  • 解决PostgreSQL数据迁移过程中的数据类型不匹配问题

    解决PostgreSQL数据迁移过程中的数据类型不匹配问题

    在数据迁移的过程中,经常会遇到源数据库和目标数据库之间的数据类型不匹配的情况,对于 PostgreSQL 数据库来说,处理这种数据类型不匹配问题需要一些特定的策略和技巧,需要的朋友可以参考下
    2024-07-07

最新评论