os: centos 7.4
db: postgresql 9.6
切換log:
select pg_rotate_logfile();
切換xlog:
select pg_switch_xlog();
補(bǔ)充:postgresql流復(fù)制主從切換+resetxlog
主 192.168.3.46
從 192.168.3.47
現(xiàn)象:由于46主庫(kù)的xlog日志達(dá)到7T以上,磁盤空間不足,需要通過(guò)pg_resetxlog命令清日志。
1.修改postgresql參數(shù)
checkpoint_timeout = 60min # range 30s-1d max_wal_size = 4GB min_wal_size = 1GB checkpoint_completion_target = 0.9 wal_keep_segments = 50
2.pg_resetxlog命令清日志
1.停主機(jī)
#46 pg_ctl stop -D /data/postgresql/data
2.從節(jié)點(diǎn)提升
#47 pg_ctl promote -D /data/postgresql/data
以上兩步操作完后,發(fā)現(xiàn)無(wú)法連接pgpool,有以下提示:
11370 Apr 10 21:04:00 usvr47 pgpool[21766]: [11-1] 2019-04-10 21:04:00: pid 21766: LOG: new connection received 11371 Apr 10 21:04:00 usvr47 pgpool[21766]: [11-2] 2019-04-10 21:04:00: pid 21766: DETAIL: connecting host=usvr47.cityre.cn port=26224 11372 Apr 10 21:04:00 usvr47 pgpool[21766]: [12-1] 2019-04-10 21:04:00: pid 21766: LOG: failed to connect to PostgreSQL server on "192.168.3.46:5432", getsockopt() detected error "Connection refused" 11373 Apr 10 21:04:00 usvr47 pgpool[21766]: [13-1] 2019-04-10 21:04:00: pid 21766: LOG: degenerate backend request for node_id: 0 from pid [21766] is canceled because failover is disallowed on the node 11374 Apr 10 21:04:00 usvr47 pgpool[21766]: [14-1] 2019-04-10 21:04:00: pid 21766: FATAL: failed to create a backend connection 11375 Apr 10 21:04:00 usvr47 pgpool[21766]: [14-2] 2019-04-10 21:04:00: pid 21766: DETAIL: executing failover on backend
第3行是pgpool的健康檢查health_check(配置文件沒(méi)有設(shè)置定期檢查),發(fā)現(xiàn)主庫(kù)無(wú)法連接;
第4行是pgool觸發(fā)故障轉(zhuǎn)移,將從庫(kù)提升為主庫(kù)(配置文件沒(méi)有配置自動(dòng)故障轉(zhuǎn)移,需命令pg_ctl premote手動(dòng)切換);
但是pgpool中配置backend_flag1 = ‘DISALLOW_TO_FAILOVER' ,意思為不允許故障轉(zhuǎn)移,因此通過(guò)psql -p 9999 -h 192.168.3.45 -U postgres 無(wú)法登錄;將命令改為backend_flag0 = ‘ALLOW_TO_FAILOVER' 并reload后,可以登錄。
此參數(shù)導(dǎo)致pgpool在主庫(kù)無(wú)法連接的情況下,pgpool也無(wú)法登錄,導(dǎo)致客戶端無(wú)法連庫(kù)的現(xiàn)象。
此時(shí)通過(guò)show pool_nodes命令可以看到主庫(kù)(node id 為0)的狀態(tài)為down。
3.清除原主節(jié)點(diǎn)xlog
#46 #查看oid xid pg_controldata -D /data/postgresql/data #清日志 pg_resetxlog -o 24579 -x 58288 -f /data/postgresql/data
7T空間,清理時(shí)間大約30min。
4.重新同步數(shù)據(jù)
46作為47的slave,重新同步數(shù)據(jù)
pg_basebackup -D /data/postgresql/data -Fp -Xs -v -P -h 192.168.3.47 -p 5432 -U repl
默認(rèn)會(huì)等待主庫(kù)checkpoint后同步,為避免長(zhǎng)時(shí)間等待,在主控手動(dòng)checkpoint。
同步完成后:
mv recovery.done recovery.conf pg_ctl start /data/postgresql/data
此時(shí)新的主從即可建立。
5.查看pgpool
[postgres@usvr-3-46 ~]$ psql -p 9999 -h 192.168.3.45 -U postgres Password for user postgres: psql (9.6.3) Type "help" for help. postgres=# show pool_nodes; node_id | hostname | port | status | lb_weight | role | select_cnt | load_balance_node | replication_delay ---------+--------------+------+--------+-----------+---------+------------+-------------------+------------------- 0 | 192.168.3.46 | 5432 |down | 0.500000 | standby | 66014 | false | 72 1 | 192.168.3.47 | 5432 | up | 0.500000 | primary | 66559 | true | 0 (2 rows)
此時(shí)發(fā)現(xiàn) 3.46在pgpool狀態(tài)仍然為down,需通過(guò)pcp命令將失效的節(jié)點(diǎn)重新加入集群。
pcp_attach_node -U postgres -h 192.168.3.45 -p 9898 -n 0
其中0為node_id。
注意:
pcp命令的密碼讀取的文件為pcp.conf,如果忘密碼,可進(jìn)行如下操作:
[root@usvr47 ~]# pg_md5 postgres e8a48653851e28c69d0506508fb27fc5 [root@usvr47 ~]# echo "postgres:e8a48653851e28c69d0506508fb27fc5" >> pcp.conf
而不是通過(guò)命令pg_md5 -m -u postgres -p 生成密碼,放在pool_passwd文件中,此文件密碼為連接postgresql的密碼,一定要注意。
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教。
標(biāo)簽:溫州 榆林 海西 杭州 辛集 寶雞 昭通 濮陽(yáng)
巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《postgresql 切換 log、xlog日志的實(shí)現(xiàn)》,本文關(guān)鍵詞 postgresql,切換,log,xlog,日志,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。