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

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

  • 相关阅读:
    用mobiscroll.js如何简单使用日期控件
    Easyui的datagrid的行编辑器Editor中添加事件(修改某个单元格带出其他单元格的值)
    运行网站项目时,有时出现Bad Request,该怎么解决?
    Easyui的datagrid的editor(行编辑器)如何扩展datetimebox类型
    JQuery对象和DOM对象的区别与转换
    【转发】Cookie存储的值大小限制和个数问题
    【转发】centos 7开启FTP以及添加用户配置权限,只允许访问自身目录,不能跳转根目录
    Vim 保存和退出命令
    CentOS下防御或减轻DDoS攻击方法(转)
    CentOS 7 firewalld vsftpd开放端口
  • 原文地址:https://www.cnblogs.com/guoximing/p/9429080.html
Copyright © 2011-2022 走看看