溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

怎么在postgresql中切換 log與xlog日志

發(fā)布時間:2021-01-18 15:21:08 來源:億速云 閱讀:349 作者:Leah 欄目:開發(fā)技術(shù)

這期內(nèi)容當(dāng)中小編將會給大家?guī)碛嘘P(guān)怎么在postgresql中切換 log與xlog日志,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

os: centos 7.4

db: postgresql 9.6

切換log:

select pg_rotate_logfile();

切換xlog:

select pg_switch_xlog();

補充:postgresql流復(fù)制主從切換+resetxlog

主 192.168.3.46

從 192.168.3.47

現(xiàn)象:由于46主庫的xlog日志達到7T以上,磁盤空間不足,需要通過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.停主機

#46
pg_ctl stop -D /data/postgresql/data

2.從節(jié)點提升

#47
pg_ctl promote -D /data/postgresql/data

以上兩步操作完后,發(fā)現(xiàn)無法連接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(配置文件沒有設(shè)置定期檢查),發(fā)現(xiàn)主庫無法連接;

第4行是pgool觸發(fā)故障轉(zhuǎn)移,將從庫提升為主庫(配置文件沒有配置自動故障轉(zhuǎn)移,需命令pg_ctl premote手動切換);

但是pgpool中配置backend_flag1 = ‘DISALLOW_TO_FAILOVER' ,意思為不允許故障轉(zhuǎn)移,因此通過psql -p 9999 -h 192.168.3.45 -U postgres 無法登錄;將命令改為backend_flag0 = ‘ALLOW_TO_FAILOVER' 并reload后,可以登錄。

此參數(shù)導(dǎo)致pgpool在主庫無法連接的情況下,pgpool也無法登錄,導(dǎo)致客戶端無法連庫的現(xiàn)象。

此時通過show pool_nodes命令可以看到主庫(node id 為0)的狀態(tài)為down。

3.清除原主節(jié)點xlog

#46
#查看oid xid
pg_controldata -D /data/postgresql/data
#清日志
pg_resetxlog -o 24579 -x 58288 -f /data/postgresql/data

7T空間,清理時間大約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

默認會等待主庫checkpoint后同步,為避免長時間等待,在主控手動checkpoint。

同步完成后:

mv recovery.done recovery.conf
pg_ctl start /data/postgresql/data

此時新的主從即可建立。

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)

此時發(fā)現(xiàn) 3.46在pgpool狀態(tài)仍然為down,需通過pcp命令將失效的節(jié)點重新加入集群。

pcp_attach_node -U postgres -h 192.168.3.45 -p 9898 -n 0

其中0為node_id。

注意:

pcp命令的密碼讀取的文件為pcp.conf,如果忘密碼,可進行如下操作:

[root@usvr47 ~]# pg_md5 postgres
e8a48653851e28c69d0506508fb27fc5
[root@usvr47 ~]# echo "postgres:e8a48653851e28c69d0506508fb27fc5" >> pcp.conf

而不是通過命令pg_md5 -m -u postgres -p 生成密碼,放在pool_passwd文件中,此文件密碼為連接postgresql的密碼,一定要注意。

上述就是小編為大家分享的怎么在postgresql中切換 log與xlog日志了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關(guān)知識,歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI