標籤:postgresql 提升主庫的操作
我們目前的postgresql是主從流複製模式,standby沒有對外提供服務,只當做熱備用。
機器環境說明:
postgres版本 10
切換前的拓撲關係:
master: 10.0.20.25
standby: 10.0.20.26
操作前,先切換到 postgres 帳號:
10.0.20.25 停主庫:
psql select pid,datname,usename,client_addr,client_port, application_name from pg_stat_activity; -- 查看當前串連然後,通知SA 將當前主庫從SLB上剔除掉,阻止使用者新的串連進來。select pg_terminate_backend(pid) from pg_stat_activity where usename='admin' ; -- 殺死admin賬戶的當前串連(我這裡業務帳號用的是admin)/usr/pgsql-10/bin/pg_ctl stop -m fast -D /var/lib/pgsql/10/data/ -- 關閉當前master節點的pgsql進程
10.0.20.26 啟用成為新主庫 :
/usr/pgsql-10/bin/pg_ctl promote -D /var/lib/pgsql/10/data/
10.0.20.26 檢查 新主庫是否提升成功:
/usr/pgsql-10/bin/pg_controldata -D /var/lib/pgsql/10/data/ | grep cluster
Database cluster state: in production -- 說明: 如果值為 "in production" 說明是主庫,如果值為 "in archive recovery" 說明是備庫。
在 10.0.20.26 上建立一個測試表,用於稍後驗證新的複製是否正常
create table test_t1(a int );insert into test_t1 select 100;select * from test_t1;
10.0.20.25 使用pg_rewind 變成新的從庫:
/usr/pgsql-10/bin/pg_rewind --target-pgdata /var/lib/pgsql/10/data/ --source-server='host=10.0.20.26 port=5432 user=postgres dbname=postgres password=postgres' -P
-- 說明: 這裡10.0.20.26上的postgres使用者的密碼是postgres,需要根據自己的情況來寫pg_rewind的情況
10.0.20.25 上查看postgresql.conf 有幾個地方要進行修改
max_connections = 200 # 一般查多於寫的應用從庫的最大串連數要比較大hot_standby = on # 說明這台機器不僅僅是用於資料歸檔,也用於資料查詢max_standby_streaming_delay = 30s # 資料流備份的最大延遲時間wal_receiver_status_interval = 10s # 多久向主報告一次從的狀態,當然從每次資料複製都會向主報告狀態,這裡只是設定最長的間隔時間hot_standby_feedback = on # 如果有錯誤的資料複製,是否向主進行反饋
10.0.20.25 上編寫 recovery.conf 檔案 內容如下:
recovery_target_timeline = 'latest'standby_mode = onprimary_conninfo = 'host=10.0.20.26 port=5432 user=replica password=replica'
10.0.20.25 新的從庫上啟動pgsql
/usr/pgsql-10/bin/pg_ctl start -D /var/lib/pgsql/10/data/
10.0.20.26 新的主庫執行:
\x select * from pg_stat_replication;
10.0.20.26 新的主庫執行插入操作:
insert into test_t1 select 1;select * from test_t1;
然後,在主庫、從庫 查詢複製狀態:
select txid_current_snapshot();
postgresql 提升主庫的操作