主機:192.168.100.70css
從機:192.168.100.71sql
通用配置(即主從都要配置)數據庫
修改/etc/postgresql/10/main/pg_hba.confbash
host all all 192.168.100.xx/32 trust #容許xx服務器鏈接到本機 host replication guoxm 192.168.100.xx/32 md5 #運行guoxm用戶在xx上覆制本機數據
例如:70服務器是主服務器,那麼xx就是從服務器服務器
修改/etc/postgresql/10/main/postgresql.confpost
listen_addresses = ‘*’ #監聽全部ip wal_level = hot_standby #熱備模式 max_wal_senders = 1 #最多有1個流複製鏈接 wal_sender_timeout = 60s #主機發送流超時時間 max_standby_streaming_delay = 30s # 數據流備份的最大延遲時間 wal_receiver_status_interval = 10s # 多久向主報告一次從的狀態,固然從每次數據複製都會向主報告狀態,這裏只是設置最長的間隔時間 hot_standby_feedback = on #錯誤反饋 max_connections = 100 #最大鏈接時間,若是要支持主從切換那麼就配置成同樣
切換到postgres用戶spa
sudo su - postgresrest
這個時間就已經進入到PostgreSQL的home目錄(/var/lib/postgresql)下了日誌
建立recovery.conf.upgrade升級文件postgresql
touch recovery.conf.upgrade
而後編輯recovery.conf.upgrade
vi recovery.conf.upgrade
編輯以下內容
standby_mode = on primary_conninfo = 'host=192.168.100.71 port=5432 user=guoxm password=guoxm' recovery_target_timeline = 'latest' trigger_file = '/var/lib/postgresql/10/main/postlog/trigger.kenyou'
注意:host配置的是主服務器的ip和端口以及用戶名密碼
保存並退出
建立recovery.conf.downgrade降級文件
standby_mode = on primary_conninfo = 'host=192.168.100.71 port=5432 user=guoxm password=guoxm' recovery_target_timeline = 'latest'
其實就是比升級文件少了一個trigger_file配置項而已
注意:host配置的是主服務器的ip和端口以及用戶名密碼
保存並退出
由於/var/lib/postgresql/10/main/文件夾下並無postlog因此要手動建立postlog文件夾
mkdir 10/main/postlog
以上是主從服務器都要配置的部分
從庫切換成主庫:
注意,從庫升級爲主庫須要手動建立trigger.kenyou文件(主庫切從庫不用建立)
touch 10/main/lostlog/trigger.kenyou
而後,將recovery.conf.upgrade文件copy到10/main文件夾中,並更名爲recovery.conf
cp recovery.conf.upgrade 10/main/recovery.conf
退出到原用戶
exit
重啓數據庫服務
sudo service postgresql restart
而後查看日誌,檢查服務是否起來了
tail –f /var/log/postgresql/postgresql-10-main.log
主庫切換成從庫
前面步驟和從庫切換成主庫差很少,區別就是不用建立trigger.kenyou文件
只須要將recovery.conf.upgrade文件copy到10/main文件夾中,並更名爲recovery.conf
而後,將recovery.conf.downgrade文件copy到10/main文件夾中,並更名爲recovery.conf
cp recovery.conf.downgrade 10/main/recovery.conf
退出到原用戶
exit
重啓數據庫服務
sudo service postgresql restart
而後查看日誌,檢查服務是否起來了
tail –f /var/log/postgresql/postgresql-10-main.log
編寫升級降級腳本
vi switch.sh
編輯以下內容
#!/bin/bash downgrade() { echo "[$(date "+%Y-%m-%d %H:%M:%S")] Database role downgradeing..." echo 'guoxm' | sudo -S cp recovery.conf.downgrade 10/main/recovery.conf restartPostgreSqlServer $@ echo "[$(date "+%Y-%m-%d %H:%M:%S")] Database role downgrade success" } upgrade() { echo "[$(date "+%Y-%m-%d %H:%M:%S")] Database role upgradeing..." echo 'guoxm' | sudo -S cp recovery.conf.upgrade 10/main/recovery.conf echo 'guoxm' | sudo -S touch 10/main/postlog/trigger.kenyou restartPostgreSqlServer $@ echo "[$(date "+%Y-%m-%d %H:%M:%S")] Database role upgrade success" } setOwner() { echo "[$(date "+%Y-%m-%d %H:%M:%S")] File recovery.conf owner changeing..." echo 'guoxm' | sudo -S chown -R postgres:postgres 10/main/recovery.conf echo "[$(date "+%Y-%m-%d %H:%M:%S")] File recovery.conf owner change success" } restartPostgreSqlServer() { setOwner $@ echo "[$(date "+%Y-%m-%d %H:%M:%S")] Database server restart..." echo 'guoxm' | sudo -S service postgresql restart echo "[$(date "+%Y-%m-%d %H:%M:%S")] Database server restart success" } if [ "$1" != "" ]; then obj=$1 shift else echo 'Using parameters: downgrade | upgrade' fi case $obj in downgrade) downgrade $@ ;; upgrade) upgrade $@ ;; esac
保存並退出
而後賦予可執行權限
sudo chmod u+x switch.sh
這樣就能夠經過腳本切換主從角色了