hillpig的个人博客分享 http://blog.sciencenet.cn/u/hillpig 畅想ing,思考ing,前行ing Email:bluevaley@gmail.com

博文

PostgreSQL9.1 Warm-Standby ---之基于流复制的方法

已有 10028 次阅读 2012-2-24 11:14 |个人分类:postgresql|系统分类:科研笔记| Warm-Standby, 之基于流复制的方法

本教程是PostgreSQL Cluster系列教程的一部分,该系列包括:

  1. PostgreSQL9.1 PITR示例  (该教程主要阐述DBA如何基于WAL日志做备份恢复)

  2. PostgreSQL9.1 Warm-Standby ---之基于拷贝WAL文件的方法        (file-based log shipping)

  3. PostgreSQL9.1 Warm-Standby ---之基于流复制的方法 (streaming        replication)

  4. PostgreSQL9.1 Warm-Standby ---之基于同步复制的方法 (Synchronous Replication)

  5. PostgreSQL9.1 Hot-Standby ---之基于拷贝WAL文件的方法

  6. PostgreSQL9.1 Hot-Standby ---之基于流复制的方法

  7. PostgreSQL9.1 Hot-Standby ---之基于同步复制的方法

  8. PG9.1+pgpool-II3.1--之HA (Hot-Standby+Streaming Replication)

  9. PG9.1+pgpool-II3.1--之Load Balancing (when meeting large amounts of requests)

  10. PG9.1+pgpool-II3.1--之Parallel Query (when meeting large amounts of data)

  11. PostgreSQL9.1 HA --- 之Slony

好了,有了第二个基于拷贝WAL文件的方法教程,我们介绍基于流复制的方法来谈warm-standby时就简单多了。
根据PostgreSQL9.1 Warm-Standby ---之基于拷贝WAL文件的方法的介绍,warm-standby的配置场景有三个:

  • 正常运行时场景,即master正常运行,warm-standby也正常的运行

  • Failover场景,即master夯机,warm-standby提升为master,然后修理master机器

  • Switchover场景,即master修复好后,配置为warm-standby,即角色从原来的master转换为warm-standby

  • (可选)当然您为了避免混淆,再重新恢复至最初状态

由于Failover和Switchover时,原理和教程二的类似,我们不再详细探讨这两个阶段的配置,本文只探讨在正常运行时场景下的master和warm-standby的配置。
先说参考文献,本文主要参考如下文献(方便您自学):
[1] Postgres 9 Streaming Replication and Django-Balancer
[2] PostgreSQL 9.1 Allow standby recovery to switch to a new timeline automatically  
[3] PostgreSQL9.1新特性之五:同步复制 ( Synchronous replication )  
[4] Setting up PostgreSQL 9 Streaming Replication
[5] Adventures in Scaling, Part 3: PostgreSQL Streaming Replication

好先说说我们的环境配置(本文为简化介绍,不再使用postgresql的扩展模块pg_standby),建议你都先创建好:

  1. /home/postgres/db/master/pgsql 目录是master数据库的目录,端口为5432

  2. /home/postgres/db/standby/pgsql 目录是一台standy数据库的目录,端口为6432

  3. /home/postgres/archive 是master->standby的WAL日志中转地点

  4. /home/postgres/archive_failover/ 是Switchover阶段standby->master的WAL日志中转地点

  5. /home/postgres/base 是master->standby的基础备份库的目录

我们说说怎么配置:
1. Master和Warm-standby数据库服务器的安装:
master安装并插入100万条数据(本文不用ssl,故在configure时不用--with-openssl,本文不再使用pg_standby扩展,也不许要make world):
cd /home/postgres/develop/
rm -fr postgresql-9.1.2
tar zxf postgresql-9.1.2.tar.gz
cd postgresql-9.1.2
./configure --prefix=/home/postgres/db/master/pgsql --with-includes=/usr/local/readline/include --with-libraries=/usr/local/readline/lib
make
make install
/home/postgres/db/master/pgsql/bin/initdb -D /home/postgres/db/master/pgsql/data
/home/postgres/db/master/pgsql/bin/postmaster -D /home/postgres/db/master/pgsql/data
/home/postgres/db/master/pgsql/bin/createdb mydb
/home/postgres/db/master/pgsql/bin/psql mydb
mydb=# create table foo(id bigint);
mydb=# insert into foo select * from generate_series(1,1000000);  


Warm-standby:
cd /home/postgres/develop/
rm -fr postgresql-9.1.2
tar zxf postgresql-9.1.2.tar.gz
cd postgresql-9.1.2
./configure --prefix=/home/postgres/db/standby/pgsql --with-includes=/usr/local/readline/include --with-libraries=/usr/local/readline/lib --with-pgport=6432
make
make install
/home/postgres/db/standby/pgsql/bin/initdb -D /home/postgres/db/standby/pgsql/data
然后修改postgresql.conf:port = 6432,保存。
/home/postgres/db/standby/pgsql/bin/postmaster -D /home/postgres/db/standby/pgsql/data
/home/postgres/db/standby/pgsql/bin/createdb mydb --port=6432
好,最后查看一下是否安装成功:
/home/postgres/db/standby/pgsql/bin/psql mydb --port=6432


2. 配置Master,并做一次base backup
编辑 postgresql.conf 以支持 WAL archiving:
wal_level = archive
archive_mode = on
archive_command = 'cp %p /home/postgres/archive/%f'
max_wal_senders = 1

创建Warm-standby能访问Master的用户replication_role:

CREATE ROLE repluser REPLICATION LOGIN PASSWORD 'pwd_repluser'

修改 pg_hba.conf 以允许repluser访问,此处简单使用password方法,而没用md5:

# TYPE  DATABASE        USER            ADDRESS                 METHOD
host    replication repluser 127.0.0.1/32 password

然后做一次基础备份(后面的warm-standby主要使用data目录下文件):
mydb=# SELECT pg_start_backup('bak20120218');
        [postgres@localhost pgsql]$ cd /home/postgres/db/master/pgsql/
        [postgres@localhost pgsql]$ tar czvf /home/postgres/base/base_data.tar.gz data/
mydb=# SELECT pg_stop_backup();


3.配置Warm-standby,并启动
把上面基础备份的打包文件覆盖standby的data目录:
cd /home/postgres/db/standby/pgsql/
mv data data_bk
tar -xzvf /home/postgres/base/base_data.tar.gz
rm -r data/pg_xlog/
mkdir -p data/pg_xlog/archive_status
rm data/postmaster.pid
cp /home/postgres/db/standby/pgsql/share/recovery.conf.sample /home/postgres/db/standby/pgsql/data/recovery.conf
cp /home/postgres/db/standby/pgsql/data_bk/postgresql.conf /home/postgres/db/standby/pgsql/data/postgresql.conf

cp /home/postgres/db/standby/pgsql/data_bk/pg_hba.conf /home/postgres/db/standby/pgsql/data/pg_hba.conf
然后编辑recovery.conf:
standby_mode = on
restore_command = 'cp /home/postgres/archive/%f %p'

primary_conninfo = 'host=127.0.0.1 port=5432 user=repluser password=pwd_repluser'
trigger_file = '/home/postgres/trigger/pgsql.trigger.6432'

好,启动Warm-Standby:
/home/postgres/db/standby/pgsql/bin/postmaster -D /home/postgres/db/standby/pgsql/data --port=6432

4. 冒烟测试(Smoke test,即配置好了系统首次进行测试):
在Master里插入一些新数据,看看是不是在standby里在进行恢复:
mydb=# insert into foo select * from generate_series(1,1000000);  

5. 监控(Monitoring):
可以参考frances的教程11.2,11.3:
主库观察WAL-Sender 进程:
[postgres@pg1 pg_root]$ ps -ef | grep post
从库上观察 WAL-接收进程
[postgres@pgb pg_log]$ ps -ef | grep post
当然我们是在一台机器上,所以只需要执行一次就可以了
当然那您也可以根据25.2.5.2. Monitoring的方法来看看Master和Standby的区别。

最后,你可以通过在/home/postgres/trigger目录下创建pgsql.trigger.6432文件来提升Warm-standby为Master,这又是Failover阶段的事了,配置原理和系列中的第2个教程PostgreSQL9.1 Warm-Standby ---之基于拷贝WAL文件的方法 类似,此处不再演示。
此处有一个问题,在Warm-standby使用StreamReplication方法时,restore_command还使用吗?而是仅仅让master和warm-standby通过主从之间的通讯来传递wal日志,进而不再走中转的路径/home/postgres/archive?知道的朋友请告诉我。
至此结束。


加我私人微信,交流技术。




https://blog.sciencenet.cn/blog-419883-540862.html

上一篇:PostgreSQL9.1 Warm-Standby ---之基于拷贝WAL文件的方法
下一篇:PostgreSQL9.1 Warm-Standby ---之基于同步复制的方法
收藏 IP: 223.72.72.*| 热度|

0

该博文允许注册用户评论 请点击登录 评论 (1 个评论)

数据加载中...

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-6-6 22:22

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部