一、 简介:
PG在9.*版本后热备提供了新的一个功能,那就是Stream Replication的读写分离,是PG高可用性的一个典型应用。其中备库是只读库;若主库出现故障;备库这个时候需要占出来替代主库工作。这才是hot standby的高可用性应用。如何替代了;这个就是本次测试的内容。
二、系统环境
系统平台:CentOS 6.2
PostgreSQL版本:9.0.3
master : 192.168.1.202
slave : 192.168.1.201
三、搭建步骤
环境数据库搭建参考地址http://www.cnblogs.com/lottu/p/5584923.html
四、模拟主库出现故障
这里只是将主库关闭
在238库上面执行 pg_stop
五、激活备库
现环境主库238已经停掉了。备库目前只有只读功能。现在将备库激活;只需一步简单操作就行。
根据其中$PGDATA/recovery.conf内容中trigger_file = '/data/pgdata/trigger_standby'
创建一个空文件就行。
touch /data/pgdata/trigger_standby
过一会儿该文件recovery.conf 会变成 recovery.done;这个时候表明已经激活备库了。此时备库可以读写操作。替代原主库工作。
六、激活原主库
现环境的229库是没有备库;为了提供环境中高可用性;添加备库。若原主库故障解决了。可以替换成备库。
方案一:像搭建hot standby 一样操作。即参考http://www.cnblogs.com/lottu/p/5584923.html
方案二:比方案一操作简单多了。在238上面操作;即现备库
新建 $PGDATA/recovery.conf
recovery_target_timeline = 'latest' standby_mode = 'on' primary_conninfo = 'host=192.168.1.201 port=5432 user=repuser password=li0924' trigger_file = '/data/pgdata/trigger_standby'
其中注意有两点:
1. 需要修改postgresql.conf文件里面的 hot_standby = on ;
2. 假如其现主库运行一段时间;需要同步日志;可以直接将$PGDATA目录下面的pg_xlog同步过去。
3. 在第2个延伸;在9.5版本提供一个特性-pg_rewind;用它来同步wal日志
pg_rewind --target-pgdata $PGDATA --source-server='host=192.168.1.201 port=5432 user=postgres dbname=mydb'
七、检测切换结果
在现主库229上面查看进程
[postgres@sdserver40_222 ~]$ ps -ef | grep postgres postgres 1206 32271 0 11:57 pts/0 00:00:00 ps -ef postgres 1207 32271 0 11:57 pts/0 00:00:00 grep postgres root 32269 31857 0 11:09 pts/0 00:00:00 su - postgres postgres 32271 32269 0 11:09 pts/0 00:00:00 -bash postgres 32347 1 0 11:11 pts/0 00:00:00 /opt/pgsql/bin/postgres postgres 32357 32347 0 11:11 ? 00:00:00 postgres: checkpointer process postgres 32358 32347 0 11:11 ? 00:00:00 postgres: writer process postgres 32359 32347 0 11:11 ? 00:00:00 postgres: wal writer process postgres 32360 32347 0 11:11 ? 00:00:00 postgres: autovacuum launcher process postgres 32361 32347 0 11:11 ? 00:00:00 postgres: archiver process postgres 32362 32347 0 11:11 ? 00:00:00 postgres: stats collector process postgres 32371 32347 0 11:11 ? 00:00:00 postgres: wal sender process repuser 192.168.1.202(59806) streaming 0/2F0008B0
查看现备库进程
[postgres@sdserver40_210 pgdata]$ ps -ef | grep postgres root 1193 31003 0 11:09 pts/1 00:00:00 su - postgres postgres 1194 1193 0 11:09 pts/1 00:00:00 -bash postgres 1280 1 0 11:11 pts/1 00:00:00 /opt/pgsql95/bin/postgres postgres 1287 1280 0 11:11 ? 00:00:00 postgres: startup process recovering 00000007000000000000002F postgres 1288 1280 0 11:11 ? 00:00:00 postgres: checkpointer process postgres 1289 1280 0 11:11 ? 00:00:00 postgres: writer process postgres 1290 1280 0 11:11 ? 00:00:00 postgres: stats collector process postgres 1291 1280 0 11:11 ? 00:00:00 postgres: wal receiver process streaming 0/2F0008B0 postgres 2625 1194 0 11:58 pts/1 00:00:00 ps -ef postgres 2626 1194 0 11:58 pts/1 00:00:00 grep postgres [postgres@sdserver40_210 pgdata]$
参考地址:
手动切换: http://francs3.blog.163.com/blog/static/405767272011724103133766/
自动切换:德哥:https://github.com/digoal/PostgreSQL_HA_with_primary_standby_2vip