运行环境:

Primary: 192.168.0.11

Standby: 192.168.0.21, 192.168.0.22

OS: CentOS 6.2

PostgreSQL: 9.1.2 版本以上才支持Streaming Replication。

1. 环境规划

   Primary和Standby节点最好有相同的环境。

2. 安装PostgreSQL

1)在Primary和Standy节点上安装PostgreSQL软件,安装路径为/opt/pgsql

2)设置postgres用户的环境变量

     PGHOME=/opt/pgsql

     PGDATA=/home/postgres/main

     PATH=$PG_HOME/bin:$PATH:$HOME/bin

3. Primary节点

1)切换到postgres用户

    $su - postgres

2)初始化数据库

    $initdb

3)配置pg_hba.conf

     在# IPv4 local connections下面添加一行,设置PostgreSQL的访问及其权限

     host    all             all             192.168.0.1/24        trust

     在# replication privilege.下面添加一行,设置replication用户及权限

     host     replication     postgres        192.168.0.1/24       trust

4)配置postgresql.conf

     配置监听,修改listen_addresses = 'localhost'

     listen_addresses = '*'     # what IP address(es) to listen on;

     配置Primary Replication参数

     wal_level = hot_standby

     max_wal_senders = 8

     wal_keep_segments = 32

     archive_mode = on

     archive_command = 'cp %p /home/postgres/archive/%f < /dev/null'

     "/home/postgres/archive"是Replication的archive的存储路径。PostgreSQL会将Replication的WAL保存在 "/home/postgres/archive"路径下。

5) 启动Primary上的PostgreSQL数据库

    $pg_ctl start

6) 在primary上执行以下命令

    $psql -c "SELECT pg_start_backup('label', true);"

    将Primary的PGDATA目录下的文件,除了postmaster.pid复制到Standby节点的“/home/postgres/main”目录下,该目录是 Standby节点上的PostgreSQL数据库的PGDATA目录。

    $rsync -a ${PGDATA}/ postgres@192.168.0.21:/home/postgres/main --exclude postmaster.pid

    $psql -c "SELECT pg_stop_backup();"

    192.168.0.21的/home/postgres/main目录下的内容为

4. Standby节点

    PGDATA=/home/postgres/main

    Standby节点的PGDATA路径就是Primary节点的PGDATA的副本

1)配置postgresql.conf

     设置hot_standby为

     hot_standby= on

2)编辑recovery.conf,文件路径为$(PGDATA)/recovery.conf,内容为

---------------------------------------------------------------------------------------------------------------------------

# Specifies whether to start the server as a standby. In streaming replication,

# this parameter must to be set to on.
standby_mode  = 'on'

# Specifies a connection string which is used for the standby server to connect
# with the primary.
primary_conninfo = 'host=192.168.0.11 port=5432 user=postgres'
# Specifies a trigger file whose presence should cause streaming replication to
# end (i.e., failover).
trigger_file = '/home/postgres/trigger'

# Specifies a command to load archive segments from the WAL archive. If
# wal_keep_segments is a high enough number to retain the WAL segments
# required for the standby server, this may not be necessary. But
# a large workload can cause segments to be recycled before the standby
# is fully synchronized, requiring you to start again from a new base backup.
restore_command = 'cp /home/postgres/archive/%f %p'

--------------------------------------------------------------------------------



3)复制pg_xlog下的所有文件到/home/postgres/archive目录下
4)启动Standby节点,完成Replication。
完成Streaming Replication配置。

5. 验证

使用psql连接primary,创建test数据库。刷新从节点,可以看到在其上也生成了test数据库。

6. 问题

1)Standby的data目录是空的,其所有配置均是在rsync之后;

2)recovery.conf文件其实只需要修改standby_mode 和 primary_info,其余并不是必须的;

3)注意Primary的防火墙,必要时关闭,免得干扰集群配置;

4)如果从节点PostgreSQL已有数据,需要全部删除。

参考:

PostgreSQL配置Streaming Replication集群(http://www.cnblogs.com/marsprj/archive/2013/03/04/2943373.html)

http://opensourcedbms.com/dbms/setup-replication-with-postgres-9-2-on-centos-6redhat-el6fedora/

配置PostgreSQL Streaming Replication集群的更多相关文章

  1. postgresql Streaming Replication监控与注意事项

    一监控Streaming Replication集群 1 pg_stat_replication视图(主库端执行) pid Wal sender process的进程ID usesysid 执行流复制 ...

  2. 【Quartz】配置最简单的集群

    在许多情况,我们希望我们的定时任务是可靠的,不会因系统故障.机器宕机而导致某一笔定时任务不能按时运行.这种情况下,我们就需要为Quartz做个集群. 最简单的情况,有两台机器或两个应用,同时维护一批定 ...

  3. 配置drbd高可用集群

    前期准备: 同步时间 (两个节点) 节点一(172.16.21.6) [root@stu21 heartbeat2]# ntpdate 172.16.0.1 31 Dec 20:59:25 ntpda ...

  4. Tomcat集群,Nginx集群,Tomcat+Nginx 负载均衡配置,Tomcat+Nginx集群

    Tomcat集群,Nginx集群,Tomcat+Nginx 负载均衡配置,Tomcat+Nginx集群 >>>>>>>>>>>> ...

  5. 大数据项目之_15_帮助文档_NTP 配置时间服务器+Linux 集群服务群起脚本+CentOS6.8 升级到 python 到 2.7

    一.NTP 配置时间服务器1.1.检查当前系统时区1.2.同步时间1.3.检查软件包1.4.修改 ntp 配置文件1.5.重启 ntp 服务1.6.设置定时同步任务二.Linux 集群服务群起脚本2. ...

  6. 在 Linux 多节点安装配置 Apache Zookeeper 分布式集群

    规划: 三台物理服务器就形成了(法定人数).对于高可用性集群,您可以使用高于3的任何奇数.例如,如果设置5台服务器,则集群可以处理两个故障节点等. 物理服务器需要开启的端口 2888 , 3888 和 ...

  7. dubbo配置负载均衡、集群环境

    再用dubbo作为项目架构的时候,给consumer消费者用nginx提供了负载均衡策略和集群的实现, 但是想了下,consumer再多,但是提供者还是一个,最后还不都是落到了这一个provider上 ...

  8. db2 数据库配置HADR+TSA添加集群节点

    Db2配置HADR高可用+TSA添加集群节点 一.服务器资源 Master IP:10.78.10.1 数据库:dbclassSlave IP:10.78.10.2 数据库:dbclassVIP:10 ...

  9. kubernetes配置(kubeconfig)对多集群的访问

    配置对多集群的访问 本文展示如何使用配置文件来配置对多个集群的访问. 在将集群.用户和上下文定义在一个或多个配置文件中之后,用户可以使用 kubectl config use-context 命令快速 ...

随机推荐

  1. 【CSS系列-选择器优先级总结】

    转:http://www.cnblogs.com/dolphinX/p/3511300.html 容易被忽略CSS特性   CSS初学感觉很简单,但随着学习的深入才感觉CSS的水由多深,平常总会遇到各 ...

  2. oc-32-@property示例

    Goods.h #import <Foundation/Foundation.h> typedef struct{ int year; int month; int day; } MyDa ...

  3. mysql 升级方法

    Performing an In-place Upgrade This section describes how to perform an in-place upgrade. Review Bef ...

  4. “惊群”,看看nginx是怎么解决它的

    在说nginx前,先来看看什么是“惊群”?简单说来,多线程/多进程(linux下线程进程也没多大区别)等待同一个socket事件,当这个事件发生时,这些线程/进程被同时唤醒,就是惊群.可以想见,效率很 ...

  5. 浅谈 qmake 之 pro、pri、prf、prl文件

    尽管每次和cmake对比起来,我们总是说 qmake 简单.功能少.但是qmake仍然是一个非常复杂的东西,我想大多人应该和我一样吧: 不是太清楚CONFIG等变量到底如何起作用的 用过的qmake内 ...

  6. C++ Qt 访问权限总结

    总结:C++的访问修饰符的作用是以类为单位,而不是以对象为单位. 通俗的讲,同类的对象间可以“互相访问”对方的数据成员,只不过访问途径不是直接访问. 步骤是:通过一个对象调用其public成员函数,此 ...

  7. vba用http发送xml所需技术

    1.代理(invoke) CallByName 函数 •执行一个对象的方法,或者设置或返回一个对象的属性. •语法 •CallByName(object, procname, calltype,[ar ...

  8. 单线程模型中Message、Handler、Message Queue、Looper之间的关系

    1. Android进程 在了解Android线程之前得先了解一下Android的进程.当一个程序第一次启动的时候,Android会启动一个LINUX进程和一个主线程.默认的情况下,所有该程序的组件都 ...

  9. Oracle基础 (十四)其他函数

    转换函数: TO_DATE:转换为日期 --将字符串转换为日期 SELECT TO_DATE('2014-12-31', 'yyyy-mm-dd') FROM DUAL; SELECT TO_DATE ...

  10. C# struct

    很困惑,为什么C#会有struct 这样一个关键字.虽然我用C#几年了,但绝少用到此关键字.我在相关书籍上学习C#的时候,看到过struct内容——但C#并不是我的第一入门语言,所以没有那么细致的学习 ...