今天PostgreSQL bbs群里有人问到在做流复制环境时 archive_mode 的设置问题,贴子的意思是:将 archive_mode 设置成 off 时,依然能搭建成功流复制环境,而网上大多数资料都是将该参数设置成 on。
的确,在配置 PostgreSQL 流复制时,我们通常开启 archive_mode,但并不一定会配置 archive_command shell 脚本归档 WAL,因为 PostgreSQL 的归档非常大,而且保留归档 WAL 需要很大的存储空间,当然有条件的情况下建议开启并且设置保留策略。
针对群里提出的问题,接下来测试下,版本 PostgreSQL 9.1.0,关于流复制的搭建本文略,可以参考 PostgreSQL: Setting up streaming log replication (Hot Standby )
这里不同的是 pg 版本,但这影响不大,另外不同的是 archive_mode 参数设置成 off,并且注释 archive_command 参数,分以下两种情况测试:
测试场景一
以开启 archive_mode 方式搭建流复制环境,搭建完成后更改主库,备库的 achive_mode 参数为 off,并重启服务; 测试结果:流复制正常。
测试场景二
重新搭建流复制环境,并且搭建时关闭主库,备库的 archive_mode 参数(off)。测试结果:流复制正常。
结论
根据以上测试,似乎说明在搭建流复制环境时,并不必须设置 archive_mode 参数为 on ,很多资料在介绍搭建流复制环境时设置这个参数为 on ,可能是出于开启 WAL 归档更安全的原因, 因为在主库宕机并且较长时间不能恢复时,从库依然可以读取归档目录的 WAL,从而保证不丢数据;
另一方面,如果主库设置了较大的 wal_keep_segments ,也可以不用开启 archive_mode,因为主库保留了足够的 WAL,从而大大降低了因从库所需要的 WAL 被主库覆盖而需要从归档去取 WAL 的情况。所以从这方面说,archive_mode 参数的设置与搭建流复制并没有直接关系。
提示
对于比较繁忙的库,在搭建流复制从库时,建议主库设置较大的 wal_keep_segments 参数。
参考
- http://www.postgresql.org/docs/9.1/static/runtime-config-wal.html#RUNTIME-CONFIG-WAL-ARCHIVING
- http://wiki.postgresql.org/wiki/Hot_Standby
- http://deepakmurthy.wordpress.com/2011/06/03/postgresql-hot-standby-replication/
- PostgreSQL: Setting up streaming log replication (Hot Standby )
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/237933.html