2台Postgresql 9.2.1.4计算机上的同步复制设置

时间:2012-09-07 11:18:51

标签: database replication postgresql-9.1

我在2台Postgresql 9.2.1.4计算机(主站和从站)上运行同步复制

以下是配置:

主参数

synchronous_commit=on
synchronous_standby_names = '*'
no synchronous_replication_timeout parameter, so 10 sec by default
no synchronous_replication parameter, so async by default
wal_level = hot_standby
max_wal_senders = 5
wal_keep_segments = 32
hot_standby = on

从属参数

no synchronous_commit, so by default on 
no synchronous_replication_service parameter, so by default async 
max_wal_senders = 5 
wal_keep_segments = 32 
hot_standby = on 

应用程序在Master上插入记录,并使用pgpool从Master或Slave中读取。有时它恰好在插入记录之后,应用程序看不到插入的记录(可能是从插入的另一个db主机读取), 但是当我们在数据库中记录后,我们会检查它。

http://wiki.postgresql.org/wiki/Synchronous_replication#SYNCHRONOUS_REPLICATION_OVERVIEW 我发现: “如果在超时内没有收到回复,我们会发出通知然后返回成功提交(不可能采取其他行动)。”

我的问题

  1. a)是否真的意味着如果是synchronous_replication_timeout (在默认情况下为10秒)超出Master并且在三种情况中的任何一种
    • 数据未到达奴隶或
    • 交易未在Slave上提交或
    • 交易在Slave上回滚,

    Master提交事务但奴隶根本没有提交?

    如果是这样,那么交易似乎并不真正同步......

    1. b)如果我设置为master synchronous_replication_timeout = 0将会怎样 Master无限期等待Slave to Commit或Rollback以及万一 slave commits,master commis也是如果slave slabacks,master 回滚吗?
    2. 我应该在

      中设置什么值

      synchronous_replication(在master上) = async(def)| recv | fsync |应用

    3. synchronous_replication_service (on Slave)
      = async (def) | recv | fsync | apply
      

      为了确保我确实有propper同步复制设置 (所以我确信数据在两台服务器上提交或在两台服务器上回滚)

      他们都准备申请了吗?

      1. 是否有任何选项可以确保使用同步复制 在PosgreSQL 9.1.4上,数据在主服务器和从服务器上提交 是在同一时间提交的吗?

1 个答案:

答案 0 :(得分:0)

您当前引用的Wiki页面描述了一个未实现同步复制的补丁,如果您有兴趣,请参阅此处:   http://archives.postgresql.org/pgsql-hackers/2010-12/msg02484.php

因此,您对GUC“synchronous_replication_timeout”或“synchronous_replication_service”的问题与PostgreSQL的已发布版本无关,因为最终提交的同步复制版本与该Wiki页面中描述的版本大不相同。很抱歉,我会看到有关清理该Wiki页面的信息。您想要的信息是:   http://www.postgresql.org/docs/current/static/warm-standby.html#SYNCHRONOUS-REPLICATION