【发布时间】:2019-12-27 00:24:37
【问题描述】:
要求:
避免terminating connection due to conflict with recovery 错误,也有可接受的replication lag。
Google Cloud PostgreSQL 9.6,复制已开启(使用流式复制),PGPool-II 设置为仅进行负载平衡并在从属设备上具有以下属性:
work_mem 3276800
commit_delay 100
max_wal_size 940
max_standby_archive_delay -1
max_standby_streaming_delay -1
hot_standby_feedback on
机器配置:
vCPU:8,内存:30 GB,SSD 存储:76 GB
工作量:
主控满载writes和reads,从属也满载大量reads。
查询的最大长度可能在8-10 秒左右。
我们之前尝试过的:
将
max_standby_archive_delay和max_standby_streaming_delay设置为900000(900 秒),但是我们看到很多conflict错误。将
max_standby_archive_delay和max_standby_streaming_delay设置为-1,这使得冲突错误消失了,但是延迟增加了很多(在23mins附近)将
max_standby_archive_delay和max_standby_streaming_delay设置为-1,将hot_standby_feedback设置为on。这也使冲突错误消失了,但是我们仍然看到复制滞后(大约500 secs)
用于延迟的查询:
SELECT
pg_last_xlog_receive_location() receive,
pg_last_xlog_replay_location() replay,
(
extract(epoch FROM now()) -
extract(epoch FROM pg_last_xact_replay_timestamp())
)::int lag;
9 hours 期间每 1 秒测量一次的延迟图表:
问题:
- 鉴于我们的用例(从站被积极用于读取查询,我们如何确保没有冲突错误和合理的延迟(大约几秒)
- 滞后是什么意思?这是否意味着只有一张桌子在Master后面?或者这是否意味着所有其他 WAL 也正在等待在 Slave 上应用。
- 如果 1. 使用配置属性无法实现,我们如何在代码中解决它(这是最不可取的,因为代码库很大,需要进行大量更改)
谢谢!
【问题讨论】:
标签: postgresql replication database-replication pgpool