Различные результаты выбора при использовании multimaster через pglogical в PostgreSQL

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

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

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

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

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

1 ответ

Решение

Мультимастерная репликация сложна.

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

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

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

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

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

-- 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).

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

Другие вопросы по тегам