CentOS7中PotsgreSQL11雙機備份
根據蒐集的資料安裝測試並在安裝測試過程中整理的文件,如有不足希望不吝賜教。
目錄
一、環境介紹
系統:兩臺CentOS7.5
ip:172.17.0.84(主)、172.17.0.86(備)
資料庫版本:PotsgreSQL11
主從流複製配置:https://www.cnblogs.com/yjf512/p/4499547.html
二、主節點配置
1.修改配置檔案
使用postgres使用者:su - postgres
進入data目錄(實際目錄可能不同):cd /var/lib/pgsql/11/data
修改配置檔案:vim postgresql.conf
編輯檔案內容,找到如下設定項並修改:
wal_level = hot_standby # 這個是設定主為wal的主機 max_wal_senders = 1 # 這個設定了可以最多有幾個流複製連線,差不多有幾個從,就設定幾個 wal_keep_segments = 500 # 設定流複製保留的最多的xlog數目 hot_standby = on logging_collector = on log_directory = 'log' log_filename = 'postgresql-%a.log’
上邊配置項部分需要取消註釋,日誌配置如果已經有,保持預設即可。修改完成後儲存退出。
2.建立超級使用者
登入資料庫,在主節點資料庫中建立一個超級使用者,standby資料庫會使用這個使用者連線到主庫上拖WAL日誌。
psql
下面建立使用者命令是在登入資料庫後執行:
create user standby SUPERUSER LOGIN password 'standby';
3.基礎備份
開啟備份功能
psql -c "select pg_start_backup('backup0001')"
使用scp命令將data目錄下資料遠端拷貝到備庫data目錄下:
scp -r /var/lib/pgsql/11/data/* 172.17.0.86:/var/lib/pgsql/11/data/
因為上面的命令會預設使用postgresql建立的使用者postgres,因此此處使用了root使用者傳送,但是需要在傳送完成後在備機上修改檔案屬組,直接遞迴將整個data目錄的使用者和組全部修改即可(chown -R postgres:postgres data/)。
scp -r /var/lib/pgsql/11/data/* [email protected]:/var/lib/pgsql/11/data/
關閉備份功能
psql -c "select pg_stop_backup()"
修改完成後重啟主資料庫。
三、配置備節點
1.修改配置檔案
修改data目錄下postgresql.conf檔案,把其中的hot_standby設定為on。
拷貝示例檔案/usr/pgsql-11/share/recovery.conf.sample到/var/lib/pgsql/11/data/目錄下,然後改名成recovery.conf:
mv recovery.conf.sample recovery.conf
編輯(vim)recovery.conf修改相關的配置項為如下內容:
standby_mode = 'on'
primary_conninfo = 'host=172.17.0.84 port=5432 user=standby password=standby'
修改完成後儲存退出,然後重啟從資料庫。
四、查詢主備
1.pg_controldata命令
首先切換到postgres使用者(已經切換忽略):su - postgres
然後使用pg_controldata命令檢視狀態,這裡需要注意的是,pg_controldata命令並不一定是在data目錄下,也不一定可以直接使用,因此可以用find命令(find / -name pg_controldata)查詢pg_controldata位置,然後再使用命令的完整路徑檢視。
本次完整路徑為:/usr/pgsql-11/bin/pg_controldata,執行命令檢視:
主機:
備機:
可以看到主機的cluster state是in production,備機的cluster state是in archive recovery。
2.字典表pg_stat_replication
在postgres使用者下,登入資料庫,然後使用下面查詢語句:
select pid,application_name,client_addr,client_port,state,sync_state from pg_stat_replication;
在主機字典表中是能查到記錄,備機中是查詢不到的。如下:
主機:
備機:
3.程序資訊識別
使用命令ps -ef|grep postgres檢視程序,可以通過程序資訊識別主備機。如下:
主機:
備機:
4.通過pg函式
在postgres使用者下,登入資料庫,然後使用下面查詢語句:
select pg_is_in_recovery();
主機是f,備機是t。
主機:
備機:
END