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

这样就能够经过脚本切换主从角色了

相关文章
相关标签/搜索