PostgreSQL高可用集群部署与配置指南
作者:磐基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高可用集群部署与配置内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
