zoukankan      html  css  js  c++  java
  • [原创]PostgreSQL Plus Advince Server在 HA环境中一对多的Stream Replication配置(四)

    八、HA环境下配置多节点的ssh
    VIP(s1):
    [root@s1 ~]# mkdir /opt/PostgresPlus/9.2AS/.ssh
    [root@s1 ~]# chown enterprisedb.enterprisedb /opt/PostgresPlus/9.2AS/.ssh/
    [root@s1 ~]# su enterprisedb
    bash-4.1$ ssh-keygen -t rsa -C "enterprisedb key"

    bash-4.1$ scp ~/.ssh/id_rsa.pub root@192.168.1.223:.ssh/authorized_keys
    bash-4.1$ scp ~/.ssh/id_rsa.pub root@192.168.1.224:.ssh/authorized_keys

    s3和s4:
    [root@s1 ~]# mkdir /opt/PostgresPlus/9.2AS/.ssh
    [root@s1 ~]# chown enterprisedb.enterprisedb /opt/PostgresPlus/9.2AS/.ssh/
    [root@s1 ~]# su enterprisedb
    bash-4.1$ ssh-keygen -t rsa -C "enterprisedb key"

    在s3和s4上,分别将公钥放在HA上,但在放完一个时,需要先将HA上的公钥文件备份一个出来
    ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.1.228
    scp ~/.ssh/id_rsa.pub root@192.168.1.228:.ssh/authorized_keys
    [root@s1 .ssh]# cp authorized_keys authorized_keys_s3或[root@s1 .ssh]# cp authorized_keys authorized_keys_s4
    再将两个公钥文件都合并到authorized_keys文件中。
    [root@s1 .ssh]# cat authorized_keys_s3 >> authorized_keys
    [root@s1 .ssh]# cat authorized_keys_s4 >> authorized_keys

    这样,s3和s4上的enterprisedb用户都可以到HA做无密码访问了。
    s3上做一次验证:
    [root@s3 ~]# su - enterprisedb
    -bash-4.1$  ssh root@192.168.1.228
    s4上做一次验证:
    [root@s4 ~]# su - enterprisedb
    -bash-4.1$  ssh root@192.168.1.228

    下面需要在HA中切换到s2,再做一次同样的操作。
    在s2中:
    [root@s2 ~]# mkdir /opt/PostgresPlus/9.2AS/.ssh
    [root@s2 ~]# chown enterprisedb.enterprisedb /opt/PostgresPlus/9.2AS/.ssh/
    [root@s2 ~]# su enterprisedb
    bash-4.1$ ssh-keygen -t rsa -C "enterprisedb key"

    bash-4.1$ scp ~/.ssh/id_rsa.pub root@192.168.1.223:.ssh/authorized_keys_for_s2
    bash-4.1$ scp ~/.ssh/id_rsa.pub root@192.168.1.224:.ssh/authorized_keys_for_s2


    到s3上合并s1和s2的公钥
    [root@s3 ~]# cd .ssh/
    [root@s3 .ssh]# cp authorized_keys authorized_keys_for_s1
    [root@s3 .ssh]# cat authorized_keys_for_s2 >> authorized_keys
    到这里,s2可以对s3无密码访问了。
    在s4上重复上一步骤,使s2可以对s4无密码访问
    [root@s4 ~]# cd .ssh/
    [root@s4 .ssh]# cp authorized_keys authorized_keys_for_s1
    [root@s4 .ssh]# cat authorized_keys_for_s2 >> authorized_keys
    在s2上进行验证:
    [root@s2 9.2AS]# su - enterprisedb
    -bash-4.1$ ssh root@192.168.1.224
    没有问题,s2可以对s4无密码访问了。




    下面开始处理s3和s4对s2的无密码访问
    在s3上
    [root@s3 ~]# su - enterprisedb
    -bash-4.1$ scp ~/.ssh/id_rsa.pub root@192.168.1.228:.ssh/authorized_keys_from_s3
    到s2上,将authorized_keys_from_s3的内容合并到authorized_keys
    [root@s2 ~]# cd .ssh/
    [root@s2 .ssh]# touch authorized_keys
    [root@s2 .ssh]# cat authorized_keys_from_s3 >> authorized_keys

    在s4上重复s2上的步骤
    scp ~/.ssh/id_rsa.pub root@192.168.1.228:.ssh/authorized_keys_from_s4

    在s2上,将authorized_keys_from_s4的内容合并到authorized_keys
    cat authorized_keys_from_s4 >> authorized_keys

    这里为止,s3和s4对s2都可以无密码访问了。


    下面开始HA对多个备机的流复制。



    九、HA环境下配置流复制
    s1:
    [root@s1 ~]# mkdir /mnt/iscsi/edbbackup
    [root@s1 ~]# mkdir /mnt/iscsi/edbbackup/fullbackup
    [root@s1 ~]# mkdir /mnt/iscsi/edbbackup/archive
    [root@s1 ~]# chown -R enterprisedb.enterprisedb /mnt/iscsi/edbbackup

    s3:
    [root@s3 ~]# mkdir /opt/ppas_fullbackup
    [root@s3 ~]# mkdir /opt/ppas_archive
    [root@s3 ~]# chown enterprisedb.enterprisedb /opt/ppas_fullbackup/
    [root@s3 ~]# chown enterprisedb.enterprisedb /opt/ppas_archive/

    s4:同s3



    在HA中修改edb配置文件postgresql.conf
    [root@s1 ~]# cp /mnt/iscsi/edb/data/postgresql.conf /mnt/iscsi/edb/data/postgresql.conf.bak
    [root@s1 ~]# vim /mnt/iscsi/edb/data/postgresql.conf
    postgresql.conf:
    wal_level = hot_standby
    archive_mode = on
    archive_command = 'cp -i %p /mnt/iscsi/edbbackup/archive/%f < /dev/null'
    有几台standby就设max_wal_senders为多少,现在有两台standby,设为2
    max_wal_senders = 2
    hot_standby = on
    log_statement = 'all'

    3、主库配置文件pg_hba.conf修改
    [root@s1 ~]# vim /mnt/iscsi/edb/data/pg_hba.conf
    在pg_hba.conf文件中加入下面的内容:
    #add by zws for stream replication 2013.07.15
    host    all    all    192.168.1.228/32        trust
    host    all    all    192.168.1.223/32        trust
    host    all    all    192.168.1.224/32        trust

    host    replication  enterprisedb  192.168.1.228/32     trust
    host    replication  enterprisedb  192.168.1.223/32     trust
    host    replication  enterprisedb  192.168.1.224/32     trust
    4、重启主库
    [root@s1 ~]# /etc/init.d/ppas-9.2 restart
    5、对主库做一次全备
    [root@s1 ~]# pg_basebackup -D /mnt/iscsi/edbbackup/fullbackup/$(date +"%Y%m%d") -Ft -x -z -Z 3 -v -h 192.168.1.228 -p 5444 -U enterprisedb
    图1
    [root@s1 ~]# ll /mnt/iscsi/edbbackup/fullbackup/
    可以看到全备生成的目录以及目录中的base.tar.gz,即全备生成的文件。
    6、恢复s3上的备库
    [root@s3 ~]# /etc/init.d/ppas-9.2 status
    停止standby数据库,删除备库中的data目录或改名,把主库中全备的数据文件恢复到备库。
    [root@s3 ~]# /etc/init.d/ppas-9.2 stop

    a、在备机s3中重命名ppas的data,模拟data目录损坏
    [root@s3 ~]# mv /opt/PostgresPlus/9.2AS/data /opt/PostgresPlus/9.2AS/data.bak
    [root@s3 ~]# mkdir /opt/PostgresPlus/9.2AS/data
    [root@s3 ~]# chown enterprisedb.enterprisedb /opt/PostgresPlus/9.2AS/data
    [root@s3 ~]# chmod 0700 /opt/PostgresPlus/9.2AS/data
    b、把主库中全备的数据文件恢复到备库
    [root@s3 ~]# su enterprisedb
    [root@s3 ~]# scp root@192.168.1.228:/mnt/iscsi/edbbackup/fullbackup/20130718/base.tar.gz /opt/ppas_fullbackup/
    将base.tar.gz包tar出来,tar包解压到/opt/PostgresPlus/9.2AS/data/
    c、在备机的data目录中,添加recovery.conf文件
    [root@s3 ~]# cp /opt/PostgresPlus/9.2AS/share/recovery.conf.sample /opt/PostgresPlus/9.2AS/data/recovery.conf
    修改recovery.conf文件的配置参数:
    [root@s3 ~]# vim /opt/PostgresPlus/9.2AS/data/recovery.conf
    standby_mode = 'on'
    primary_conninfo = 'host=192.168.1.228 port=5444 user=enterprisedb application_name=hot_standby1'
    restore_command = 'scp -Cp root@192.168.1.228:/mnt/iscsi/edbbackup/archive/%f "%p"'  
    记得修改文件的所有者
    [root@s3 ~]# chown enterprisedb.enterprisedb /opt/PostgresPlus/9.2AS/data/recovery.conf
    d、修改主库的配置文件postgresql.conf中的synchronous_standby_names参数:
    synchronous_standby_names = 'hot_standby1'
    该参数与备机的恢复文件中的primary_conninfo参数中的属性application_name是一致的,这时可以再次检查步骤c中的参数值。
    在做多节点复制的时候,我将这个值改为了'*'号。
    e、在主机中执行reload命令,重新加载配置文件
    [root@s1 /]# /etc/init.d/ppas-9.2 restart
    f、启动s3上的备库,可以看到备库中的data目录已经完整恢复了。
    [root@s3 ~]# /etc/init.d/ppas-9.2 start
    g、在s4节点重复上面的步骤。如果有更多的流复制节点,依次重复上面的步骤。


    十、HA环境下流复制的测试
    创建测试表
    CREATE TABLE streamreplication_test (username TEXT,some_tstimestamptz TEXT,random_value INT4);
    插入记录测试(100万条)
    CREATE TABLE streamreplication_test (username TEXT,some_ts timestamptz,random_value INT4);



    INSERT INTO streamreplication_test (username, some_ts, random_value)
    SELECT
        'user #' || cast(floor(random() * 10) as int4),
    now() - '1 year'::INTERVAL * random(),
    cast(random() * 100000000 as INT4)
    FROM
    generate_series(1,1000000);

    可以在s3和s4的备库查询检查。在HA中写入数据的同时,s3和s4也存在数据了。
    手动切HA,再做测试均正常。

  • 相关阅读:
    人人都有数字替身的时代马上到来
    教你如何在linux下查看服务是否已经启动或者关闭
    提前了解2019年物联网发展的六大趋势
    本科理工男如何学习Linux
    linux常见命令ps的应用
    useradd 命令的常见用法
    简单聊聊Linux学习经历
    什么是公网IP、内网IP和NAT转换?
    远程获得的有趣的linux命令
    js练习题之查找数组中的位子
  • 原文地址:https://www.cnblogs.com/ode/p/3200806.html
Copyright © 2011-2022 走看看