Один раб, несколько мастеров MySql


9

Можно ли настроить MySql Replication, чтобы один подчиненный слушал двух разных мастеров?

Ответы:


3

По замыслу, один процесс mysqld не может одновременно слушать двух разных мастеров.

Команда CHANGE MASTER TO позволяет вам установить только один Master в качестве источника для чтения.

Чтобы подражать этому, вам придется программно переключаться между двумя Мастерами. Как ты это делаешь ?

Я описал в StackOverflow, как вручную подключить подчиненное устройство к различным мастерам, где каждый мастер был ноутбуком, а ведомый - центральным компьютером.

Вот основная идея

  • Мастер М1
  • Мастер М2
  • Slave S1

Настройте репликацию M1 на S1 и затем M2 на S1 следующим образом

  • 1) Пусть S1 запустит CHANGE MASTER TO с M1 в качестве источника
  • 2) НАЧАТЬ РАБА;
  • 3) Запустите репликацию на некоторое время
  • 4) ОСТАНОВИТЬ РАБА;
  • 5) S1 запустить CHANGE MASTER TO с M2 в качестве источника
  • 6) НАЧАТЬ РАБА;
  • 7) Запустите репликацию на некоторое время
  • 8) ОСТАНОВИТЬ РАБА;
  • 9) Вернитесь к шагу 1

Каждый раз, когда вы переключаетесь с одного мастера на другой, вы должны записать два значения из SHOW SLAVE STATUS\G

  1. Relay_Master_Log_file
  2. Exec_Master_Log_Pos

Эти два значения представляют собой последний оператор SQL, который поступил от мастера и должен был быть выполнен на ведомом устройстве.

Есть одно важное предостережение: пока M1 и M2 обновляют взаимоисключающие базы данных, этот алгоритм должен быть в порядке.

Хотите верьте, хотите нет, но я обратился к такому вопросу в ServerFault еще в мае 2011 года. На самом деле я объяснил, как эмулировать настоящего мультимастера / одного подчиненного с помощью BLACKHOLE Storage Engine, основанного на книге «High Performance MySQL».


Хотя я сам пока не нуждался в этом, я думал об этой проблеме раньше. Разве не было бы возможно в основном направить бинлог второго хозяина в MySQL-раба? Полагаю, лучше всего было бы иметь инструмент, который также следит за результатами каждого запроса и останавливается на ошибке, как это делает обычный поток репликации-ведомый. Но в сущности, простая труба должна делать то же самое. Конечно, оба мастера, пишущие в одну и ту же базу данных / таблицу, быстро станут хитрыми. О чем вы, гуру, задумываетесь?
Янв

1
Я думаю, что стоит добавить к вашему ответу, что, хотя MySQL 5.6 этого не делает, этот 5.7 будет поддерживать несколько мастеров.
Фил Самнер

4

Решение Роландо имеет много предостережений. Первый, являющийся одним потоком реплик, обязательно не реплицируется, в то время как другой работает. Это даст вам периоды времени, когда ваш раб не синхронизирован. Теперь вам нужно сыграть деликатный баланс, чтобы у каждого было достаточно времени, чтобы наверстать упущенное, когда у него есть «ход».

Как описано выше, вы также должны сыграть бухгалтера в позиции журнала, чтобы переключиться обратно. Это на самом деле просто кажется ошибочным, открывая окно для пропущенных или несогласованных данных или даже прерывая репликацию, когда она идет не так (либо из-за ошибки «просто один» в позиции журнала)

Я бы порекомендовал просто запустить несколько экземпляров MySQL. Ничто не мешает вам запускать два или более mysql на одной машине. Разумеется, они не могут работать на одном и том же порту. Однако я не вижу в этом проблемы, поскольку каждый клиент и библиотека позволяет вам указать что-то отличное от 3306.

Просто укажите port = 3307 (или что-то еще в одном из файлов .cnf).

Вы также должны позаботиться о том, чтобы индивидуально настроенные пулы буферов и другие конфигурации памяти не расходились друг с другом. На самом деле это является преимуществом, поскольку вы можете более точно настроить эти параметры в соответствии с конкретными требованиями к реплицируемым базам данных.

Таким образом, у вас есть только два потока репликации на одном сервере; никогда не позади, не требуется бухгалтерский учет, не требуется сценарий «подкачки».


Я рад, что кто-то понимает безумие бухгалтерии. Хороший ответ. +1 !!!
RolandoMySQLDBA


0

MariaDB, который может быть использован в качестве замены на месте для MySql. Поддерживает его с версии 10.2

Проблема с поддержкой Mysql 5.7 заключается в необходимости использования GTID, что означает, что мастер ДОЛЖЕН быть также изменен, в случае MariaDb это не так.

Пример / HowTo ссылка: http://www.skysql.com/blogs/dean-ellis/multi-source-replication-mariadb-100

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.