У меня есть два кластера MySQL, между которыми установлена репликация Master-Master.
Большинство таблиц основаны на журналах, только с вставками и выборками, поэтому у них нет проблем с репликацией.
Однако у меня есть несколько таблиц, в которых хранится информация о текущем «состоянии» системы реального времени. Записи в этих таблицах обновляются и имеют поле с отметкой времени, показывающее их последнее обновление.
Когда репликация прерывается, два кластера могут писать в одни и те же строки.
Возможно ли, чтобы репликация сохраняла записи, содержащие самый последний обновленный столбец?
Если нет (и мои исследования показывают, что это невозможно), какие решения я могу использовать вместо этого?
Ситуация, которую вы описываете, называется проблемой разделения мозга для среды Мастер-Мастер. Это когда два Мастера не знают о существовании друг друга и работают в одиночку, предполагая, что другой Мастер мертв. На самом деле это самая сложная проблема для такого рода настройки высокой доступности. Чтобы правильно справиться с этой ситуацией, администратор должен настроить политику, определяющую, какой мастер должен быть мастером, когда два мастера не могут общаться друг с другом, а затем направить все соединения БД к мастеру. Обычно это реализуется с помощью сценария, который отслеживает обмен данными и перенаправляет соединения с БД, когда происходит разделение мозга. Впоследствии неудавшиеся транзакции необходимо будет синхронизировать обратно с неработающей главной базой данных. Я видел этот Xeround претензии их служба баз данных предлагает автоматическое развертывание mater-master, которое решает проблему разделения мозга.
Если вы ищете такую гранулярность транзакций, возможно, вам придется использовать репликацию на основе строк вместо репликации на основе операторов.