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 读取记录。有时会发生在插入记录之后应用程序看不到插入的记录(可能是通过从另一个数据库主机读取为插入的),但是当我们事后检查它时,记录就在数据库中。

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

我的问题

  1. a)这是否真的意味着如果 Master 上的 synchronous_replication_timeout(默认为 10 秒)被超过,并且在以下三种情况中的任何一种情况下
  • 数据没有到达从站或
  • 交易未在 Slave 上提交或
  • 事务在 Slave 上回滚,

主人提交事务但奴隶根本不提交?

如果是这样,那么事务似乎并不是真正同步的......

  1. b) 如果我在 Master synchronous_replication_timeout=0 上设置,Master 会无限期地等待 Slave 提交或回滚,如果从属提交,master commis 也会在从属回滚的情况下进行,master 也会回滚?
  2. 我应该设置什么值

    同步复制(在主服务器上)= 异步(定义)| 接收 | 同步 | 申请

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

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

他们都应该申请吗?

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

1 回答 1

0

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

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

于 2012-11-09T03:28:56.360 回答