У меня есть master db postgresql 10 с двумя серверами горячего резервирования с потоковой репликацией, и репликация работает правильно. synchronous_commit
установлен на remote_write
Также у меня есть pgpool 3.7.5, настроенный с параметрами:
delay_threshold = 1
sr_check_period = 1
И следующие веса:
- мастер: 1
- узел1: 3
- узел2: 3
В журнале я вижу, что node1 и node2 отстают:
Replication of node:1 is behind 75016 bytes from the primary server (node:0)
Документы pgpool говорят:
delay_threshold (integer)
Задает максимальный уровень допуска задержки репликации в байтах WAL на резервном сервере по отношению к основному серверу. Если задержка превышает этот сконфигурированный уровень, Pgpool-II прекращает отправку запросов SELECT на резервный сервер и начинает маршрутизацию всего на основной сервер, даже если включена load_balance_mode, пока резервный сервер не догонит основной. Установка этого параметра в 0 отключает проверку задержки. Эта проверка порогового значения задержки выполняется каждый sr_check_period. По умолчанию 0.
Проблема в том, что pgpool отправляет запросы горячим резервам, прежде чем они получат новые данные от мастера через потоковую репликацию.
Я временно включил log_per_node_statement = on
, чтобы видеть, какой узел выполняет запрос, и я вижу, что запросы отправляются узлам, даже если нет синхронизации, когда delay_threshold
этого следует избегать.
Я что-то упустил? Когда узлы находятся за мастером, запросы не должны идти мастером?
Заранее спасибо.
Другие значения конфигурации pgpool:
num_init_children = 120
max_pool = 3
connection_cache = off
load_balance_mode = on
master_slave_sub_mode = 'stream'
replication_mode = off
sr_check_period = 1