主机:192.168.100.70
从机:192.168.100.71
通用配置(即主从都要配置)
修改/etc/postgresql/10/main/pg_hba.conf
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.conf
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用户
sudo su - postgres
这个时间就已经进入到PostgreSQL的home目录(/var/lib/postgresql)下了
创建recovery.conf.upgrade升级文件
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
这样就可以通过脚本切换主从角色了