八、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. 深度分析DB2修改表

    DB2修改表操作相信大家都不陌生,下文对DB2修改表方面结合了一些例子进行了详细的分析讨论,供您参考学习. DB2修改表使用ALTER TABLE语句来更改列属性,例如可空性.LOB选项.作用域.约束 ...

  2. 学习练习 使用Servlet实现用户注册功能

    package com.hanqi.www; import java.io.IOException; import javax.servlet.ServletException; import jav ...

  3. Retrofit入门

    1 Retrofit retrofit = new Retrofit.Builder() .addConverterFactory(ScalarsConverterFactory.create()) ...

  4. sql语句中日期时间格式化查询

          今天在做会员管理系统搜索时,我发现以前的搜索时间方式不太科学,效率也不是太高.由其是在查询指定的时间相等的时候,我在数据库中都存这样的时间格式"2007-5-22 14:32:1 ...

  5. 【C++面试】常考题复习

    // CPP_Test@2014.10.22.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <assert.h&g ...

  6. hdu2085

    #include <stdio.h> int main(){ __int64 h[],l[]; int i,j; int n; ){ h[]=; l[]=; ;i<=n;++i){ ...

  7. 设计模式-原型模式(Prototype)

    场景分析: 前面我们提到,交易对象Trade,还有继承他的债券交易BondTrade.期货交易FutureTrade. 现在有一个需求,需要提供方法将交易拆分成多笔小交易. 代码如下(如果没有clon ...

  8. PHP开发大型项目的一点经验

    一.变量 最好是把所有的变量存储在一个数组中,这样在程序的开发中可以带来很多的方便,特别是当程序很大的时候.变量的命名就当适合自己的习惯,不管是用拼音还是英语,至少应当有一定的意义,以便适合记忆.变量 ...

  9. asp.net webuploader粘贴,拖拽,点击上传图片

    demo.html代码:<!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset= ...

  10. 用Lambda表达式操作List集合

    using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.We ...