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 # 配置安裝路徑(避免影響系統(tǒng) OpenSSL) ./config --prefix=/usr/local/ssl --openssldir=/usr/local/ssl shared zlib # 編譯并安裝 make -j$(nproc) sudo make install 配置環(huán)境變量(臨時或永久) # 臨時生效(當(dāng)前 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 #將庫路徑加入系統(tǒng)動態(tài)鏈接器配置 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 # 連接與監(jiān)聽 listen_addresses = '*' port = 5432 # WAL / replication wal_level = replica max_wal_senders = 10 max_replication_slots = 10 # 如果用 replication slots wal_keep_size = 1GB # 取決于 WAL 產(chǎn)生速度與網(wǎng)絡(luò)延遲 archive_mode = on archive_command = 'test ! -f /data/pgsql/archive/%f && cp %p /data/pgsql/archive/%f' # 熱備 hot_standby = on # 可選:同步復(fù)制策略(見下) synchronous_commit = on synchronous_standby_names = 'ANY1 (pg2,pg3)' #允許從庫連接做復(fù)制 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 #創(chuàng)建復(fù)制用戶 CREATE USER replicator WITH REPLICATION LOGIN ENCRYPTED PASSWORD '123456'; 重啟 Primary /usr/local/pgsql/bin/pg_ctl restart -D /shaxiang/pg/data
在Standby(pg2、pg3)上準(zhǔn)備數(shù)據(jù)
(使用 pg_basebackup)
su - postgres
清理目標(biāo)目錄(如有舊數(shù)據(jù)):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下是不是有生成同步的數(shù)據(jù)
如果配置同步(兩個從)
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'
驗證復(fù)制狀態(tài)(在Primary上)
SELECT client_addr, application_name, state, sync_state FROM pg_stat_replication;

sync_state為sync表示達(dá)到同步復(fù)制策略;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
到此這篇關(guān)于PostgreSQL高可用集群部署與配置指南的文章就介紹到這了,更多相關(guān)PostgreSQL高可用集群部署與配置內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
PostgreSQL數(shù)據(jù)庫視圖及子查詢使用操作
這篇文章主要為大家介紹了PostgreSQL數(shù)據(jù)庫視圖及子查詢的使用操作,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步早日升職加薪2022-04-04
PostgreSQL查詢修改max_connections(最大連接數(shù))及其它配置詳解
postgresql數(shù)據(jù)庫最大連接數(shù)是系統(tǒng)允許的最大連接數(shù),當(dāng)數(shù)據(jù)庫并發(fā)用戶超過該連接數(shù)后,會導(dǎo)致新連接無法建立或者連接超時,這篇文章主要給大家介紹了關(guān)于PostgreSQL查詢修改max_connections(最大連接數(shù))及其它配置的相關(guān)資料,需要的朋友可以參考下2024-01-01
PostgreSQL數(shù)據(jù)庫時間類型相加減操作
PostgreSQL提供了許多函數(shù),這些函數(shù)返回與當(dāng)前日期和時間相關(guān)的值,下面這篇文章主要給大家介紹了關(guān)于PostgreSQL數(shù)據(jù)庫時間類型相加減操作的相關(guān)資料,需要的朋友可以參考下2023-10-10
Docker安裝PostgreSQL數(shù)據(jù)庫的詳細(xì)步驟
這篇文章主要介紹了Docker安裝PostgreSQL數(shù)據(jù)庫的詳細(xì)步驟,包括啟動PostgreSQL容器、獲取容器的IP地址、啟動一個新的CentOS容器、在CentOS容器中安裝PostgreSQL客戶端、通過psql客戶端連接到PostgreSQL容器和在PostgreSQL中執(zhí)行SQL操作等內(nèi)容,需要的朋友可以參考下2024-10-10
PostgreSQL JOIN 聯(lián)表查詢實戰(zhàn)演練(內(nèi)連接 / 外連接
本文介紹了PostgreSQL中的JOIN查詢,包括INNER JOIN、LEFT JOIN、RIGHT JOIN、FULL JOIN和CROSS JOIN,通過實際示例和Java代碼,展示了如何在Java應(yīng)用程序中執(zhí)行這些JOIN操作,感興趣的朋友跟隨小編一起看看吧2026-03-03
PostgreSQL數(shù)據(jù)庫中修改表字段的常用命令小結(jié)
這篇文章主要給大家介紹了PostgreSQL數(shù)據(jù)庫中修改表字段的常用命令操作,文中有詳細(xì)的代碼示例供大家參考,具有一定的參考價值,需要的朋友可以參考下2023-12-12

