Различные результаты выбора при использовании multimaster через pglogical в PostgreSQL - PullRequest
0 голосов
/ 29 марта 2019

Существует два узла PostgreSQL 9.6, подписанные друг на друга через pglogical.Если узел A вставляет строку в реплицированную таблицу, то узел B видит ее и наоборот.

Однако, когда я обновляю строку на одном узле, последующие запросы SELECT на обоих узлах будут возвращать разные результаты- текущий и некоторые из предыдущих.

Более того, в журналах обоих узлов есть записи о конфликтах репликации.

Почему это происходит и как это исправить?

upd: установка pglogical.conflict_resolution в last_update_wins помогает.Возможно, стоит рассмотреть и другие варианты разрешения конфликта

1 Ответ

1 голос
/ 29 марта 2019

Многоуровневая репликация затруднена.

Существуют конфликты, которые могут возникнуть, если ваше приложение не знает об этом и не специально настроено для репликации с несколькими хозяевами:

  • Строки, вставленные в разные узлы с одинаковым (автоматически сгенерированный первичный ключ должен конфликтовать.

  • Если вы измените первичный ключ строки на одном узле при обновлении или удалении его на другом, базы данных «разойдутся», что приведет к будущим конфликтам.

Вам нужно будет исправить свое приложение, чтобы оно избежало проблем, подобных описанным выше, и вам придется вручную находить и разрешать все конфликты, которые произошли до сих пор.

Вот пример второго случая:

-- node one:

UPDATE person
SET id = 1234
WHERE id = 6543;

-- at the same time on node two

DELETE FROM person
WHERE id = 6543;

Оба оператора будут реплицированы на другой узел, но там ничего не будут делать, потому что оба узла больше не имеют person с id 6543 больше. Не будет никакого конфликта репликации сразу, но у одного узла теперь есть person, которого нет у второго узла. Легко увидеть, как это может привести к конфликтам репликации позже (представьте, что вы вставляете строку на узле, которая имеет отношение внешнего ключа к person 1234).

Именно поэтому в большинстве случаев целесообразно рассмотреть архитектуру, которая не включает репликацию с несколькими мастерами.

...