我刚刚在 debian 挤压上设置了一个 PostgreSQL 9.1.2 数据库服务器。我在第二台相同的服务器(挤压,PG 9.1.2)上配置了备用服务器(热备用)。
在主服务器上,我设置了这些参数(postgresql.conf):
wal_level = hot_standby
archive_mode = on
archive_command = 'test ! -f /mnt/pg_replication/myserver/%f && cp %p /mnt/pg_replication/myserver/%f'
archive_timeout = 30
max_wal_senders = 3
wal_keep_segments = 100
在从站上,我设置了以下参数(postgresql.conf):
hot_standby = on
在从属 (recovery.conf) 上:
standby_mode = 'on'
primary_conninfo = 'host=master_ip port=5432 user=repluser password=xxxx'
restore_command = 'pg_standby -d -s 2 -r 30 -t /tmp/pgsql.trigger.5442 /mnt/pg_replication/myserver/ %f %p %r 2>>/var/log/standby.log'
recovery_end_command = 'rm -f /tmp/pgsql.trigger.5442'
archive_cleanup_command = '/usr/lib/postgresql/9.1/bin/pg_archivecleanup /mnt/pg_replication/myserver/ %r'
这很好用,但我注意到复制延迟可能需要 1 分钟。有没有办法将更改应用到备用服务器的延迟减少到几秒钟?我将 archive_timeout 减少到 30 秒,但我不知道这是否是加快复制速度的正确方法......
另一个问题:如何监控两台服务器之间的复制延迟?我在主服务器上尝试了以下查询,但它返回 0 行... :-?
postgres=# SELECT * from pg_stat_replication;
(Aucune ligne)
我错过了什么吗?
谢谢你,尼古拉斯
编辑 2012-01-03:我将 recovery.conf 更改为此,现在运行良好:
restore_command = 'cp /mnt/pg_replication/myserver/%f %p'
standby_mode = on
primary_conninfo = 'host=master_ip port=5432 user=repluser password=xxxx
application_name=mycluster'
trigger_file = '/tmp/trig_mycluster'
您在主服务器上的 pg_stat_replication 中没有行的事实表明您的流复制无法正常工作 - 它已转而依赖基于文件的复制,这具有更多延迟。
检查你的主从日志,他们应该告诉你为什么它没有以流模式启动。
此外,您的 recovery.conf 文件不正确 - 您不应将 pg_standby 与standby_mode 一起使用。这是 9.0 之前的剩余时间。