主机: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
这样就能够经过脚本切换主从角色了