Многоуровневая репликация затруднена.
Существуют конфликты, которые могут возникнуть, если ваше приложение не знает об этом и не специально настроено для репликации с несколькими хозяевами:
Строки, вставленные в разные узлы с одинаковым (автоматически сгенерированный первичный ключ должен конфликтовать.
Если вы измените первичный ключ строки на одном узле при обновлении или удалении его на другом, базы данных «разойдутся», что приведет к будущим конфликтам.
Вам нужно будет исправить свое приложение, чтобы оно избежало проблем, подобных описанным выше, и вам придется вручную находить и разрешать все конфликты, которые произошли до сих пор.
Вот пример второго случая:
-- 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).
Именно поэтому в большинстве случаев целесообразно рассмотреть архитектуру, которая не включает репликацию с несколькими мастерами.