pg流復制可以是一主多從架構,類似Oracle ADG,都是采用物理復制,從庫可提供實時查詢業務,流復制在不借助插件的情況下,本身并不提供自動failover等功能。
PGPOOL是一款較流行的Postgres的數據庫中間件,提供了連接池、自動故障轉移、負載均衡、看門狗等功能。在基于流復制架構下,架構圖如下(轉自官方文檔):
注:本文采用3個主機,進行一主兩從架構部署示例。
提前安裝好Postgres數據庫,并搭建好流復制架構,本文不再做描述。
pgpool最新版本為4.2.2,本文采用4.1.2版作為示例。可選用rpm或者源碼包安裝,本文采用源碼編譯的方式安裝
安裝pgpool_recovery
▼▼▼
cd pgpool-II-4.1.2/src/sql/pgpool-recovery
make
make install
psql
c template1
create extension pgpool_recovery;
Installing pgpool-regclass
cd pgpool-II-4.1.2/src/sql/pgpool-regclass
make
make install
psql template1
CREATE EXTENSION pgpool_regclass;
Creating insert_lock table
cd pgpool-II-4.1.2/src/sql
$ psql -f insert_lock.sql template1
修改PG數據庫參數文件
pgpool.pg_ctl = /usr/local/postgres/bin/pg_ctl
配置SSH等效性
▼▼▼
ssh-keygen -t rsa -f ~/.ssh/id_rsa_pgpool
cd ~/.ssh
ssh-copy-id -i id_rsa_pgpool.pub postgres@host01
ssh-copy-id -i id_rsa_pgpool.pub postgres@host02
ssh-copy-id -i id_rsa_pgpool.pub postgres@host03
ssh postgres@host01 -i ~/.ssh/id_rsa_pgpool
配置Pgpool參數
▼▼▼
cp -p /usr/local/pgpool412/etc/pgpool.conf.sample-stream /usr/local/pgpool412/etc/pgpool.conf
##以下為所有節點通用配置
listen_addresses = *
pid_file_name = /usr/local/pgpool412/pgpool.pid
sr_check_user = pgpool
sr_check_password =
health_check_period = 5
health_check_timeout = 30
health_check_user = pgpool
health_check_password =
health_check_max_retries = 3
backend_hostname0 = host01
backend_port0 = 5432
backend_weight0 = 1
backend_data_directory0 = /pgdata
backend_flag0 = ALLOW_TO_FAILOVER
backend_hostname1 = host02
backend_port1 = 5432
backend_weight1 = 1
backend_data_directory1 = /pgdata
backend_flag1 = ALLOW_TO_FAILOVER
backend_hostname2 = host03
backend_port2 = 5432
backend_weight2 = 1
backend_data_directory2 = /pgdata
backend_flag2 = ALLOW_TO_FAILOVER
backend_application_name0 = host01
backend_application_name1 = host02
backend_application_name2 = host03
failover_command = /usr/local/pgpool412/etc/failover.sh %d %h %p %D %m %H %M %P %r %R %N %S
follow_master_command = /usr/local/pgpool412/etc/follow_master.sh %d %h %p %D %m %H %M %P %r %R
recovery_user = postgres
recovery_password =
recovery_1st_stage_command = recovery_1st_stage
enable_pool_hba = on
##看門狗通用配置
use_watchdog = on
delegate_IP = 192.168.56.5
if_cmd_path = /usr/sbin
if_up_cmd = /usr/bin/sudo /usr/sbin/ip addr add $_IP_$/24 dev enp0s3 label enp0s3:0
if_down_cmd = /usr/bin/sudo /usr/sbin/ip addr del $_IP_$/24 dev enp0s3
arping_path = /usr/sbin
arping_cmd = /usr/bin/sudo /usr/sbin/arping -U $_IP_$ -w 1 -I enp0s3
##以下不同主機分別配置
#host02
#host03
#host01
#host02
#host03
#心跳檢測相關配置
#host01
#host02
#host03
編輯failover和follow腳本
▼▼▼
cd /usr/local/pgpool412/etc/
cp failover.sh.sample failover.sh
cp follow_master.sh.sample follow_master.sh
chmod 755 *.sh
vi failover.sh
PGHOME=/usr/local/postgres
vi follow_master.sh
PGHOME=/usr/local/postgres
ARCHIVEDIR=/pgdata/archivelog
REPLUSER=repl
PCP_USER=pgpool
PGPOOL_PATH=/usr/local/pgpool412
PCP_PORT=9898
配置pcp.conf文件
▼▼▼
echo pgpool:`pg_md5 Welcome2021` >> /usr/local/pgpool412/etc/pcp.conf
配置pcppass文件
▼▼▼
su - postgres
echo localhost:9898:pgpool:Welcome2021 > ~/.pcppass
chmod 600 ~/.pcppass
配置recover文件 ---這兩個文件要放到$PGDATA目錄中
▼▼▼
cp -p /usr/local/pgpool412/etc/recovery_1st_stage.sample /pgdata/recovery_1st_stage
cp -p /usr/local/pgpool412/etc/pgpool_remote_start.sample /pgdata/pgpool_remote_start
chown postgres:postgres /pgdata/{recovery_1st_stage,pgpool_remote_start}
vi /pgdata/recovery_1st_stage
...
PGHOME=/usr/local/postgres
vi /pgdata/pgpool_remote_start
PGHOME=/usr/local/postgres
chmod 755 {recovery_1st_stage,pgpool_remote_start}
配置pool_hba.conf文件
▼▼▼
host all pgpool 0.0.0.0/0 scram-sha-256
host all postgres 0.0.0.0/0 scram-sha-256
配置pgpool密碼文件
▼▼▼
[all servers]$ pg_enc -m -k ~/.pgpoolkey -u pgpool -p
db password: [pgpool users password]
[all servers]$ pg_enc -m -k ~/.pgpoolkey -u postgres -p
db password: [postgres users passowrd]
# cat /usr/local/pgpool412/etc/pool_passwd
pgpool:AESheq2ZMZjynddMWk5sKP/Rw==
postgres:AESHs/pWL5rtXy2IwuzroHfqg==
為Postgres用戶配置sudo權限
vi /etc/sudoers
postgres ALL=(ALL) NOPASSWD: ALL
配置將pgpool日志存放到syslog
▼▼▼
vi pgpool.conf
log_destination = syslog
syslog_facility = LOCAL1
mkdir /var/log/pgpool
touch /var/log/pgpool /pgpool.log
vi /etc/rsyslog.conf
...
*.info;mail.none;authpriv.none;cron.none;LOCAL1.none /var/log/messages
LOCAL1.* /var/log/pgpool /pgpool.log
##配置logrotate
vi /etc/logrotate.d/syslog
...
/var/log/messages
/var/log/pgpool/pgpool.log ---新增此行
/var/log/secure
#重啟服務
systemctl restart rsyslog
nohup pgpool -D -n & --啟動
pgpool -m fast stop --停止
##顯示pg節點相關信息
psql -h 10.25.247.99 -p 9999 -U pgpool postgres -c "show pool_nodes"
##pg發生failover并恢復后,show pool_nodes顯示狀態仍然是down,需要重新attach
pcp_attach_node -h 192.168.56.33 -U pgpool 1
##查看pgpool參數
psql -h 192.168.56.5 -p 9999 -U pgpool postgres -c "pgpool show all" --看所有參數
或者
psql -h 192.168.56.5 -p 9999 -U pgpool postgres -c "pgpool show max_pool " --看指定參數
##查看看門狗節點信息
pcp_watchdog_info -h 10.25.247.99 -U pgpool
上圖說明pgpool的主節點是hostname為master的節點,注意的是pgpool的主節點可能跟pg的主節點并不是同一個節點。
###檢查pgpool的連接數
pcp_proc_info -U pgpool -h 10.25.247.99 |awk {if (NF==13 && $11==1) print $1,$2,$11,$12}|uniq -c|wc -l
ps -ef|grep pgpool|grep idle|grep -v grep |wc -l
##需注意的參數
num_init_children --指定pgpool可開啟的子進程數
max_pool可以緩存的連接數
——注意pgpool最大會產生num_init_children*max_pool個pg數據庫連接,所以pg參數max_connections需大于num_init_children*max_pool
reserved_connections --此參數為非0值時,當連接超過num_init_children時,會報錯退出,否則連接會被hang住,直到連接數下降可以連接為止
load_balance_mode --開啟復制均衡
memory_cache_enabled --是否開啟內存緩存
更多精彩干貨分享
點擊下方名片關注
IT那活兒
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/129905.html
摘要:最近研究了的兩種集群方案,分別是和,在這里總結一下二者的機制結構優劣測試結果等。其中的前身的,的前身是。為了避免單點故障,可以為所有節點配置對應的節點。測試測試結果測試結果顯示,兩種集群與單機的性能指標幾乎一致,無法分辨高下。 最近研究了PG的兩種集群方案,分別是Pgpool-II和Postgres-XL,在這里總結一下二者的機制、結構、優劣、測試結果等。 1、 Pgpool-I...
摘要:作者譚峰張文升出版日期年月頁數頁定價元本書特色中國開源軟件推進聯盟分會特聘專家撰寫,國內多位開源數據庫專家鼎力推薦。張文升中國開源軟件推進聯盟分會核心成員之一。 很高興《PostgreSQL實戰》一書終于出版,本書大體上系統總結了筆者 PostgreSQL DBA 職業生涯的經驗總結,本書的另一位作者張文升擁有豐富的PostgreSQL運維經驗,目前就職于探探科技任首席PostgreS...
摘要:平臺采用分布式存儲系統作為虛擬化存儲,用于對接虛擬化計算及通用數據存儲服務,消除集中式網關,使客戶端直接與存儲系統進行交互,并以多副本糾刪碼多級故障域數據重均衡故障數據重建等數據保護機制,確保數據安全性和可用性。云計算平臺通過硬件輔助的虛擬化計算技術最大程度上提高資源利用率和業務運維管理的效率,整體降低 IT 基礎設施的總擁有成本,并有效提高業務服務的可用性、可靠性及穩定性。在解決計算資源的...
摘要:這可以通過負載平衡來實現數據分片當問題不是并發查詢的數量,而是數據庫的大小和單個查詢的速度時,可以實現不同的方法。 showImg(https://segmentfault.com/img/remote/1460000018875091); 來源 | 愿碼(ChainDesk.CN)內容編輯 愿碼Slogan | 連接每個程序員的故事 網站 | http://chaindesk.cn...
閱讀 1353·2023-01-11 13:20
閱讀 1702·2023-01-11 13:20
閱讀 1212·2023-01-11 13:20
閱讀 1904·2023-01-11 13:20
閱讀 4164·2023-01-11 13:20
閱讀 2752·2023-01-11 13:20
閱讀 1397·2023-01-11 13:20
閱讀 3666·2023-01-11 13:20