zoukankan      html  css  js  c++  java
  • Ubuntu PostgreSql主从切换

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

    这样就可以通过脚本切换主从角色了

  • 相关阅读:
    洛谷 P1194 飞扬的小鸟 题解
    洛谷 P1197 星球大战 题解
    洛谷 P1879 玉米田Corn Fields 题解
    洛谷 P2796 Facer的程序 题解
    洛谷 P2398 GCD SUM 题解
    洛谷 P2051 中国象棋 题解
    洛谷 P1472 奶牛家谱 Cow Pedigrees 题解
    洛谷 P1004 方格取数 题解
    洛谷 P2331 最大子矩阵 题解
    洛谷 P1073 最优贸易 题解
  • 原文地址:https://www.cnblogs.com/guoximing/p/9429080.html
Copyright © 2011-2022 走看看