配置PostgreSQL Streaming Replication集群
运行环境:
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集群的更多相关文章
- postgresql Streaming Replication监控与注意事项
一监控Streaming Replication集群 1 pg_stat_replication视图(主库端执行) pid Wal sender process的进程ID usesysid 执行流复制 ...
- 【Quartz】配置最简单的集群
在许多情况,我们希望我们的定时任务是可靠的,不会因系统故障.机器宕机而导致某一笔定时任务不能按时运行.这种情况下,我们就需要为Quartz做个集群. 最简单的情况,有两台机器或两个应用,同时维护一批定 ...
- 配置drbd高可用集群
前期准备: 同步时间 (两个节点) 节点一(172.16.21.6) [root@stu21 heartbeat2]# ntpdate 172.16.0.1 31 Dec 20:59:25 ntpda ...
- Tomcat集群,Nginx集群,Tomcat+Nginx 负载均衡配置,Tomcat+Nginx集群
Tomcat集群,Nginx集群,Tomcat+Nginx 负载均衡配置,Tomcat+Nginx集群 >>>>>>>>>>>> ...
- 大数据项目之_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. ...
- 在 Linux 多节点安装配置 Apache Zookeeper 分布式集群
规划: 三台物理服务器就形成了(法定人数).对于高可用性集群,您可以使用高于3的任何奇数.例如,如果设置5台服务器,则集群可以处理两个故障节点等. 物理服务器需要开启的端口 2888 , 3888 和 ...
- dubbo配置负载均衡、集群环境
再用dubbo作为项目架构的时候,给consumer消费者用nginx提供了负载均衡策略和集群的实现, 但是想了下,consumer再多,但是提供者还是一个,最后还不都是落到了这一个provider上 ...
- db2 数据库配置HADR+TSA添加集群节点
Db2配置HADR高可用+TSA添加集群节点 一.服务器资源 Master IP:10.78.10.1 数据库:dbclassSlave IP:10.78.10.2 数据库:dbclassVIP:10 ...
- kubernetes配置(kubeconfig)对多集群的访问
配置对多集群的访问 本文展示如何使用配置文件来配置对多个集群的访问. 在将集群.用户和上下文定义在一个或多个配置文件中之后,用户可以使用 kubectl config use-context 命令快速 ...
随机推荐
- android调用系统相机拍照并保存在本地
import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import j ...
- 0c-33-@class,循环retain
2个对象互相有着引用,A中有B,B中有A. // 对于循环retain的情况,对象不能够释放,此时只能让一方使用assign一方使用retain,retain用于对象assign用于基本类型,assi ...
- 异常处理之namespace找不到
最近在做控件的时候遇到了这么一个异常 就是说类库中明明就有命名空间,但是在winForm中引用的时候也能正常显示, 可是编译的时候却报 找不到指定的命名空间 这样的异常,头痛了好久,结果看到了winF ...
- IE9-10 option BUG
IE 9-10下如果option元素没有定义value而在设置innerText时没有把两边的空白去掉,那么 取el.text,浏览器会进行trim, 并且伪造一个value值,此值会在刚才trim的 ...
- 程序的内存分配 C\C++
原文:http://blog.csdn.net/oohaha_123/article/details/24460425 程序的内存分配 一个由C/C++编译的程序占用的内存分为以下几个部分 1.栈区( ...
- 给label绘制下划线
UIlabel本身没有下划线的属性,使用绘制的方法,添加下滑下,并且赋给该label一个action作为响应方法,实现DIY超链接的效果. //调用 #import "UnderLineLa ...
- [SQLServer]学习总结笔记(基本涵盖Sql的所有操作)
--################################################################################### /* 缩写: DDL(Dat ...
- jsp中调用getOutputStream()产生冲突
再用jsp进行图片的生成的时候,例如一些验证码,比例图的时候,在对图片进行输出调用 getOutputStream() 的时候会报该方法已经被调用的冲突. 例如如下的程序: <%@ page c ...
- ReentrantLock类的基本结构
ReentrantLock类是一个可重入互斥锁,它具有与使用synchronized()方法和语句访问隐式监视器锁相同的基本行为和语义,但是它的功能更强大.ReentrantLock由最近成功获得锁但 ...
- php 短信网关短信内容不能有空格
最近在做一个短信通知功能,接口参数都按文档写好了,就是不能发送短信,查了半天,原来是短信内容有空格,之前短信用的英文标点符号,符号后都有一个空格,用了date('Y-m-d H,i,s')函数,后来把 ...
3)复制pg_xlog下的所有文件到/home/postgres/archive目录下
4)启动Standby节点,完成Replication。
完成Streaming Replication配置。