LINUX.ORG.RU
ФорумAdmin

Ошибки связи между репликами

 ,


0

1

Всем привет,

Имеется 4 сервака, между ними настроена каскадная потоковая репликация посредством слотов репликации используя repmgr. 1-й сервак - мастер, остальные - стендбаи в которые данные льются по цепочке 1->2->3->4. Первая пара серваков наодится в одной стране, вторая в другой. Между 2 и 3 серваками настроен VPN (wireguard). Раз в пару дней отваливаются 3-я и 4-я реплики. В логах:

2021-07-31 14:32:58.287 EEST [26816] LOG:  incorrect resource manager data checksum in record at 2F/AD7E97B8
2021-07-31 14:32:58.287 EEST [26838] FATAL:  terminating walreceiver process due to administrator command
2021-07-31 14:32:58.287 EEST [26816] LOG:  incorrect resource manager data checksum in record at 2F/AD7E97B8
2021-07-31 14:32:58.287 EEST [26816] LOG:  incorrect resource manager data checksum in record at 2F/AD7E97B8
...

repmgr cluster show говорит:

WARNING: node "drpg1" not found in "pg_stat_replication"
WARNING: node "drpg2" not found in "pg_stat_replication"
 ID | Name  | Role    | Status    | Upstream | Location | Priority | Timeline | Connection string                                     
----+-------+---------+-----------+----------+----------+----------+----------+--------------------------------------------------------
 1  | pg1   | primary | * running |          | default  | 100      | 1        | host=pg1 user=repmgr dbname=repmgr connect_timeout=2  
 2  | pg2   | standby |   running | pg1      | default  | 100      | 1        | host=pg2 user=repmgr dbname=repmgr connect_timeout=2  
 3  | drpg1 | standby |   running | ! pg2    | default  | 100      | 1        | host=drpg1 user=repmgr dbname=repmgr connect_timeout=2
 4  | drpg2 | standby |   running | ! drpg1  | default  | 100      | 1        | host=drpg2 user=repmgr dbname=repmgr connect_timeout=2

WARNING: following issues were detected
  - node "drpg1" (ID: 3) is not attached to its upstream node "pg2" (ID: 2)
  - node "drpg2" (ID: 4) is not attached to its upstream node "drpg1" (ID: 3)

Если перезапустить 3-ю и 4-ю реплики, то 3-я переходит в состояние catchup:

WARNING: node "drpg1" attached in state "catchup"
...
WARNING: following issues were detected
  - node "drpg1" (ID: 3) attached to its upstream node "pg2" (ID: 2) in state "catchup"

...и после подтягивания WAL, реплики 3 и 4 переходит в нормальное состояние.

Увеличивать connect_timeout нет смысла, так как соединение между серваками которые находятся в разных странах может может пропадать надолго.

ВОПРОС: есть ли какой-то способ заставить постгре на 3-й реплике перезапускать walreceiver в случае обнаружения проблем с контрольными суммами либо пропаданием коннекта?

З.Ы: можно наколхозить скрипт который будет перезапускать посгре на 3-м и 4-м серваках при возникновении выше описанных ошибок. Но хочется более элегантное решение.

★★★★★

Ответ на: комментарий от anonymous

walreceiver переподключается автоматически

В теории - да. Но на практике реплики 3 и 4 так и продолжают находится в состоянии «is not attached to its upstream» пока не пнешь их. И не понятно в чем причина.

iron ★★★★★ ()