Избегайте разделения мозгов в PostgreSQL без сторонних инструментов - PullRequest
0 голосов
/ 15 мая 2018

У меня есть 2 сервера PostgreSQL, и я настроил потоковую репликацию между ними.Я создал сценарий оболочки, который будет пинговать главный сервер каждую минуту и ​​будет продвигать подчиненное устройство как главное, когда мастер не отвечает.Я использую rh-postgresql95, и сторонние инструменты не работают с этой версией.

Моя строка подключения JDBC имеет разделенные запятыми узлы с targetServerType = master, как показано ниже

jdbc:postgresql://node1,node2/accounting?targetServerType=master. 

Я просто хочузнаете, как можно избежать сценария расщепления мозга, если раб становится мастером, а старый мастер тоже каким-то образом появляется?

или

Есть ли так, чтобы старый мастер никогда не появлялся автоматически?

РЕДАКТИРОВАТЬ

узел1 является мастерома node2 - это ведомое устройство в моей строке подключения JDBC.

Я остановил службу postgres на ведущем устройстве и назначил ведомое устройство на нового главного устройства.В этом случае сервис указывал на нового мастера.

Затем я перезапустил службу postgres на старом мастере, и служба начала указывать на старый мастер (node1 - это ip старого мастера, и он идет первым в строке подключения JDBC.).

Итак, я не сделалЭто может привести к расщеплению мозга, но этот сценарий приведет к несогласованности данных.

1 Ответ

0 голосов
/ 15 мая 2018

В качестве примера ваш скрипт ping может проверить, считают ли оба сервера хозяевами:

select pg_is_in_recovery();

Сервер, который не находится в режиме восстановления, является главным. Затем вы можете проверить последний полученный номер WAL :

select pg_last_wal_receive_lsn();

Сервер с наибольшим номером LSN - это сервер, который был повышен последним. Затем вы можете выключить другой сервер.

Если вы передумаете о сторонних вариантах, взгляните на PostgresSQL wiki .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...