八、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,再做测试均正常。

[原创]PostgreSQL Plus Advince Server在 HA环境中一对多的Stream Replication配置(四)的更多相关文章

  1. [原创]PostgreSQL Plus Advince Server在 HA环境中一对多的Stream Replication配置(三)

    五.准备HA环境1.准备yum源a.安装vsftp服务,将光盘镜像copy到本地ftp目录作为yum源.[root@s1 ~]# mount 可以看到cdrom已经挂载了,首先安装vsftp服务[ro ...

  2. [原创]PostgreSQL Plus Advince Server在 HA环境中一对多的Stream Replication配置(一)

    内容较多,开篇作为说明和目录. 实验环境规划:服务器:IBM x3500 m3三台其中两台用作HA,另外一台安装VMware ESXi安装两个虚机做Stream Replication.NAS存储IP ...

  3. [原创]PostgreSQL Plus Advince Server在 HA环境中一对多的Stream Replication配置(二)

    三.配置主机与备机的ssh无密码登录1.主机s1到备机s3的无密码登录a.创建ssh目录[root@s1 ~]# mkdir /opt/PostgresPlus/9.2AS/.sshb.修改ssh目录 ...

  4. 在 SharePoint Server 2016 本地环境中设置 OneDrive for Business

    建议补丁 建议在sharepoint2016打上KB3127940补丁,补丁下载地址 https://support.microsoft.com/zh-cn/kb/3127940 当然不打,也可以用O ...

  5. [原创] PostgreSQL Plus Advanced Server在Windows中配置双机热备流复制

    一.系统环境 操作系统:Windows Server 2003/2008 两个节点分别为master与slave. 主节点master:172.27.19.28 备机点slave:172.27.19. ...

  6. [原创]PostgreSQL Plus Advanced Server配合crontab实现定时维护工作

    本文要实现的目标1.PostgreSQL定时全备2.定时删除归档WAL文件3.定时删除全备文件4.删除n天之前的数据库日志文件 实验环境操作系统:RHEL 6.3数据库:PostgreSQL Plus ...

  7. [原创]PostgreSQL Plus Advanced Server监控工具PEM(四)

    四.PEM管理工具 1.编辑配置 选择进行管理的目标服务器,点击菜单Tools->Server Configuration->postgresql.conf管理服务器配置,可以看到我们经常 ...

  8. [原创]PostgreSQL Plus Advanced Server监控工具PEM(一)

    一.概述 PEM是为数据库管理员.系统架构师和性能分析师为管理.监控和优化 PostgreSQL 和 EnterpriseDB 数据库服务器设计的图形化管理工具.旨在解决大量数据库服务器跨地域.精细化 ...

  9. [原创]PostgreSQL Plus Advanced Server批量创建分区表写入亿级别数据实例

    当前情况:大表的数据量已接近2亿条我的解决思路:为它创建n*100个分区表,将各个分区表放在不同的tablespace上这样做的优点:1.首先是对这个级别的数据表的性能会有所提升2.数据管理更科学3. ...

随机推荐

  1. 几款超实用的 CSS 开发工具

      当你开发一个网站或 web 应用程序的时候,有合适的工具,绝对可以帮助您节省大量的时间.在这篇文章中,我为大家收集了超有用的 CSS 开发工具. 对于 Web 开发人员来说,找到有用的 css 开 ...

  2. Oracle笔记 十四、查询XML操作、操作系统文件

    --1.随机数 select dbms_random.value from dual; select mod(dbms_random.random, 10) from dual; --0-9随机数 s ...

  3. poj3349 哈希

    这题目写了一上午,一直错,然后自己测试数据还都对.为什么呢,为什么呢,后来我才发现代码里有一行free(tmp)...在55行那里... #include <stdio.h> #inclu ...

  4. hdu2078

    刚开始看这题,感觉是DP什么的 ,后来我发现,只要找到中最小值,就可以啦,哈哈.假如用x1把0-100分割. 则0-x1-100  ===>   x1^2+(100-x1)^2 跟0-100   ...

  5. mysql数据库去重语句和不同表之间列的复制语句

    1.去重语句:DELETE FROM `v_klg_item` WHERE id NOT IN (SELECT * FROM (SELECT MAX(id) FROM `v_klg_item` GRO ...

  6. vim编辑器编程配置

    打开/etc/vim/vimrc 添加命令: set cindent  "使用C样式的缩进 syntax on   "语法高亮 set tabstop=4 set softtabs ...

  7. jQ $.extend用法

    $.extend()函数 1.用将一个对象或多个对象的内容合并到目标对象, 2.如果多个对象具有相同的属性,则后者覆盖前者的属性值. 例子: var object1={ apple:1, banana ...

  8. EXT格式误删除恢复

    http://hatemysql.com/ 1.从/proc文件系统恢复数据#lsof |grep -i deletecat 11791 root 1w REG 253,0 94 1048589 /h ...

  9. 关于Ajax跨域

    本人因工作需求,编写了一个测试页面,在页面填写完信息之后去向一个站点请求数据,然后返回结果!一开始是直接用Ajax在脚本中去访问,没有大碍(因为目标地址是本机上的一个网站),但是当站点去外部的网站时, ...

  10. 深入浅出MongoDB(三)环境搭建

    上次的博文深入浅出MongoDB(二)概述中我们已经将MongoDB的相关概念讲解了一下,接下来我们继续进行MongoDB学习.在学习之前,大家首先需要在自己的电脑上安装MongoDB. 1.安装 安 ...