一、 简介:

         PG在9.*版本后热备提供了新的一个功能,那就是Stream Replication的读写分离,是PG高可用性的一个典型应用。这个功能在oracle中叫active dataguard,在PostgreSQL中称为hot standby。 
 

二、系统环境

   系统平台:CentOS 6.2
   PostgreSQL版本:9.5.0
   master :   192.168.1.202
   slave  :   192.168.1.201
 
、搭建步骤
   数据库搭建参考地址http://www.cnblogs.com/lottu/p/5149191.html
   注:slave库可不需要init数据库;
 
  • master库操作
  1. 创建流复制用户repuser
CREATE USER repuser replication LOGIN CONNECTION LIMIT 3 ENCRYPTED PASSWORD 'li0924';
# replication    做流复制的时候用到的一个用户属性,一般单独设定。
# LOGIN  用户登录的属性;CREATE USER默认自带;所以LOGIN关键字可以略去。
 
   2. 在master数据库的/data/pgdata/postgresql.conf文件中设置如下配置项: 
 
wal_level = hot_standby
max_wal_senders = 1
wal_keep_segments = 32
# max_wal_senders   是slave库的节点数,有多少个slave库就设多少,
# wal_keep_segments  默认值是16,是PG_XLOG下的日志文件数相关参数
 
   3.在主数据库中的/var/lib/pgsql/data/pg_hba.conf中添加如下配置:
host    replication     repuser         192.168.1.201/16          md5
# 第二项必须填 replication;

4.重新启动主数据库,让配置生效:

pg_stop;pg_start
  5.采用热备份的方式;把master数据库的PGDATA目录下面的文件传到slave库中.同时把创建的数据文件夹也传过去;
这个步骤就是一个数据库克隆的工作。
 
  • slave库操作

1.在slave数据库的/data/pgdata/postgresql.conf文件中设置如下配置项:

hot_standby = on

2.在PGDATA目录下;也就这里的/data/pgdata;新建文件recovery.conf

standby_mode = 'on'
primary_conninfo = 'host=192.168.1.202 port=5432 user=repuser password=li0924'
trigger_file = '/data/pgdata/trigger_standby'                   

3.删除原先从master库上过来的/data/pgdata/postmaster.pid文件,

rm /data/pgdata/postmaster.pid   

4.根据master库中的环境变量文件;修改slave库的postgres用户的环境变量 然后启动备库:

pg_start
 
 

四、验证工作

  • 查看进程

master库

[postgres@sdserver40_210 ~]$ ps -ef | grep postgre
root      2021   556  0 15:18 pts/1    00:00:00 su - postgres
postgres  2022  2021  0 15:18 pts/1    00:00:00 -bash
postgres  2239     1  0 15:24 pts/1    00:00:00 /opt/pgsql95/bin/postgres
postgres  2249  2239  0 15:24 ?        00:00:00 postgres: checkpointer process   
postgres  2250  2239  0 15:24 ?        00:00:00 postgres: writer process   
postgres  2251  2239  0 15:24 ?        00:00:00 postgres: wal writer process   
postgres  2252  2239  0 15:24 ?        00:00:00 postgres: autovacuum launcher process   
postgres  2253  2239  0 15:24 ?        00:00:00 postgres: archiver process   last was 00000006000000000000001E.00000028.backup
postgres  2254  2239  0 15:24 ?        00:00:00 postgres: stats collector process   
postgres  3235  2239  0 15:54 ?        00:00:00 postgres: wal sender process repuser 183.60.192.229(40399) streaming 0/1F000D80
   

slave库

[postgres@sdserver40_222 pgdata]$ ps -ef | grep postgres
postgres  6856     1  0 15:54 pts/0    00:00:00 /opt/pgsql/bin/postgres
postgres  6863  6856  0 15:54 ?        00:00:00 postgres: startup process   recovering 00000006000000000000001F
postgres  6864  6856  0 15:54 ?        00:00:00 postgres: checkpointer process   
postgres  6865  6856  0 15:54 ?        00:00:00 postgres: writer process   
postgres  6866  6856  0 15:54 ?        00:00:00 postgres: wal receiver process   streaming 0/1F000CA0
postgres  6867  6856  0 15:54 ?        00:00:00 postgres: stats collector process   
root      6922 30527  0 16:08 pts/0    00:00:00 su - postgres
postgres  6923  6922  0 16:08 pts/0    00:00:00 -bash
postgres  6974  6923  0 16:49 pts/0    00:00:00 ps -ef
postgres  6975  6923  0 16:49 pts/0    00:00:00 grep postgres
 
 
  • 数据验证

在master库操作

[postgres@sdserver40_210 ~]$ psql mydb repuser
psql (9.5.0)
Type "help" for help.
mydb=> \d 
             List of relations
 Schema | Name  |     Type      |  Owner   
--------+-------+---------------+----------
 public | dept  | table         | lottu
 public | emp   | foreign table | postgres
 public | test  | table         | lottu
 public | trade | table         | lottu
(4 rows)
 
mydb=> create table t_lottu (id int primary key,name varchar(20));
CREATE TABLE
mydb=> \d
              List of relations
 Schema |  Name   |     Type      |  Owner   
--------+---------+---------------+----------
 public | dept    | table         | lottu
 public | emp     | foreign table | postgres
 public | t_lottu | table         | repuser
 public | test    | table         | lottu
 public | trade   | table         | lottu
(5 rows)
 
mydb=> insert into t_lottu values (1001,'lottu');
INSERT 0 1
mydb=> insert into t_lottu values (1002,'vincent');
INSERT 0 1
mydb=> insert into t_lottu values (1003,'rax');
INSERT 0 1
mydb=> select * from t_lottu;
  id  |  name   
------+---------
 1001 | lottu
 1002 | vincent
 1003 | rax
(3 rows)
 

登录slave库查看数据

[postgres@sdserver40_222 pgdata]$ psql mydb repuser
psql (9.5.0)
Type "help" for help.
 
mydb=> select * from t_lottu;
  id  |  name   
------+---------
 1001 | lottu
 1002 | vincent
 1003 | rax
(3 rows)
 
mydb=> delete from t_lottu where id = 1003;
ERROR:  cannot execute DELETE in a read-only transaction

参考博客 --http://my.oschina.net/Kenyon/blog/54967

PostgreSQL Hot Standby的搭建的更多相关文章

  1. postgresql数据库异步流复制hot standby环境搭建

    生命不息,test不止. 最近组里面修改了几个postgresql的bug,要进行回归测试,除了前面提到的WAL的RT测试和Mirroring Controller的RT测试,还要测试下postgre ...

  2. PostgreSQL Hot Standby的主备切换

    一. 简介:          PG在9.*版本后热备提供了新的一个功能,那就是Stream Replication的读写分离,是PG高可用性的一个典型应用.其中备库是只读库:若主库出现故障:备库这个 ...

  3. Postgresql监控pgwatch的搭建

    一,需要环境: You will need a handful of components to make this work: - Apache (webserver) #apache搭建web页面 ...

  4. Logical standby database 搭建(配置)

    说明 Logical standby 数据库是通过Physical standby数据库转换的.本Logical standby是通过之前创建的Physical standby转换的. Physica ...

  5. postgresql 10.5 主从复制--搭建测试

    env: role master slave host pg1 pg2 ip 11 12 pg-version 10.5 10.5 1 初始化查看 [ceiec@localhost ~]$ df -h ...

  6. postgresql集群的搭建

    目录 架构图 部署详情 postgresql的安装与配置 pgpool的安装与配置 写在安装前 postgresql是一款很强大的数据库,具体有多强大呢,请谷歌... 网上的相关资料不是很多,参考了大 ...

  7. ORACLE Physical Standby DG搭建

    主库: 一:强制force logging: alter database force logging; 二:开启主库的归档模式 三:主库添加standby redo log,比redo日志组多一组: ...

  8. Nginx+PostgreSQL+Django+UWSGI搭建

    最近因为项目上的需要开始大量使用nginx,因此也想趁机将以前常用的django+apache的架构换成django+nginx.常见的 django webapp 部署方式采用FCGI 或 WSGI ...

  9. postgreSQL 时间线

    “时间线”(Timeline)是PG一个很有特色的概念,在备份恢复方面的文档里面时有出现.但针对这个概念的详细解释却很少,也让人不太好理解,我们在此仔细解析一下. 时间线的引入 为了理解引入时间线的背 ...

随机推荐

  1. [转载]WGS84坐标与Web墨卡托坐标互转

    //经纬度转Wev墨卡托 dvec3 CMathEngine::lonLat2WebMercator(dvec3 lonLat) { dvec3 mercator; ; +lonLat.y)*PI/) ...

  2. [MVCSharp]MVC# Overview概述

    MVC# Overview概述 Abstract: This article gives an overview of MVC# - a Model-View-Presenter framework ...

  3. django关闭DEBUG后 static静态文件都访问不了

    Django框架仅在开发模式下提供静态文件服务.当我开启DEBUG模式时,Django内置的服务器是提供静态文件的服务的,所以css等文件访问都没有问题,但是关闭DEBUG模式后,Django便不提供 ...

  4. 布置theano(Windows10,无cuda)

    软件包准备 1.Anaconda 下载地址,包含python.numpy.scipy.nose.pip等包,嗯,很爽. 2.tdm64-gcc 下载地址,windows下的gcc.g++编译器,用来t ...

  5. PAT 解题报告 1048. Find Coins (25)

    1048. Find Coins (25) Eva loves to collect coins from all over the universe, including some other pl ...

  6. PostgreSQL 中日期类型转换与变量使用及相关问题

    PostgreSQL中日期类型与字符串类型的转换方法 示例如下: postgres=# select current_date; date ------------ 2015-08-31 (1 row ...

  7. Leetcode: Longest Substring with At Least K Repeating Characters

    Find the length of the longest substring T of a given string (consists of lowercase letters only) su ...

  8. PHP检测用户名是否存在

    reg.php <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www ...

  9. sdutoj 2604 Thrall’s Dream

    http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=2604 Thrall’s Dream Time ...

  10. PAT乙级 1019. 数字黑洞 (20)

    1019. 数字黑洞 (20) 时间限制 100 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 给定任一个各位数字不完全相同的4位 ...