我在 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上 ,我发现:“如果在超时时间内没有收到回复,我们会发出通知,然后返回成功提交(不可能有其他操作)。”
我的问题
- a)这是否真的意味着如果 Master 上的 synchronous_replication_timeout(默认为 10 秒)被超过,并且在以下三种情况中的任何一种情况下
- 数据没有到达从站或
- 交易未在 Slave 上提交或
- 事务在 Slave 上回滚,
主人提交事务但奴隶根本不提交?
如果是这样,那么事务似乎并不是真正同步的......
- b) 如果我在 Master synchronous_replication_timeout=0 上设置,Master 会无限期地等待 Slave 提交或回滚,如果从属提交,master commis 也会在从属回滚的情况下进行,master 也会回滚?
我应该设置什么值
同步复制(在主服务器上)= 异步(定义)| 接收 | 同步 | 申请
和
synchronous_replication_service (on Slave)
= async (def) | recv | fsync | apply
为了确保我确实有适当的同步复制设置(所以我确信数据在两台服务器上都提交或在两台服务器上回滚)
他们都应该申请吗?
- 是否有任何选项可以确保通过在 PosgreSQL 9.1.4 上使用同步复制来同时提交主服务器和从服务器上的数据?