PostgreSQL 9 Hot Standby简介
PostgreSQL数据库提供了类似Oracle的standby数据库的功能。PostgreSQL9.0 standby数据库在应用WAL日志的同时,也可以提供只读服务,这是PostgreSQL9.0中最激动人心的功能,这个功能在oracle数据库中也只是最新版本11g中才有的新功能。这个功能在oracle中叫active dataguard,在PostgreSQL中称为hot standby。
在利用日志恢复数据的同时可以用只读的方式打开数据库,用户可以在备用数据库上进行查询、报表等操作,也可用做读写分离。在PostgreSQL9.0之前,也可以搭建standby数据库,但standby数据库只能处于恢复状态中,不能打开,也不支持只读打开。而这种情况在9.0之后彻底改变了。 PostgreSQL 9.0中日志传送的方法有两种: 1. 基于文件(base-file)的传送方式,这种方式是PostgreSQL9.0之前就提供的方法。也就是服务器写完一个WAL日志文件后,才把WAL日志文件拷贝到standby数据库上去应用。 2. 流复制(streaming replication)的方法,这是PostgreSQL9.0才提供的新方法。这个方法就是事务提交后,就会把生成的日志异步的传送到standby数据库上应用,这比基本文件的日志传送方法有更低的数据延迟。以下部分介绍方法2的搭建。
平台信息 Master Server:172.16.203.179 数据库版本:PostgreSQL9.1.2 端口:5432 数据库的数据目录: /var/lib/pgsql/9.1/dataStandby Server:172.16.203.178
数据库版本:PostgreSQL9.1.2 端口:5433 数据库的数据目录: /var/lib/pgsql/9.1/data/配置
主数据库上的配置 1. 在主数据库(179上)的postgresql.conf文件中设置如下配置项: wal_level = hot_standby max_wal_senders = 2 wal_keep_segments = 322. 在主数据库(179上)的pg_hba.conf文件中添加如下配置项:
host replication postgres 172.16.203.178/32 md53. 重启主数据库,让配置生效:
service postgresql-9.1 restart4. 对主数据库做一个基础备份:
使用select pg_start_backup();命令把数据库切换到备份状态, #su – postgres $/usr/pgsql-9.1/bin/psql -d postgres postgres=#select pg_start_backup(‘/var/lib/pgsql/9.1/data’);5. 拷贝主数据库(179上)的数据目录到从数据库(178上)的数据目录中
6. 拷贝完成后,结束主数据库的备份状态:
postgres=#select pg_stop_backup();从数据库上的配置:
7. 在从数据库的配置文件postgresql.conf中,设置如下配置项:
port=5433 hot_standby = on 并注释掉wal_level max_wal_senders和wal_keep_segments的设置8. 拷贝并配置recovery.conf
#cp /usr/pgsql-9.1/share/recovery.conf.sample /var/lib/pgsql-9.1/data/recovery.conf 配置如下内容: standby_mode = on primary_conninfo = ‘host=172.16.203.179 port=5432 user=postgres password=postgres’ trigger_file = ‘/var/lib/pgsql-9.1/trigger_activestandby’9. 删除从主数据库中过来的postmaster.pid文件,然后启动从数据库:
#rm /var/lib/pgsql-9.1/data/postmaster.pid #service postgresql-9.1 start至此standby数据库搭建完成,可以实现主从数据库的热备,从数据库做只读数据库。