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