Ubuntu PostgreSql主從切換

主機: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

這樣就能夠經過腳本切換主從角色了

相關文章
相關標籤/搜索