MySQL Replication - один сайт, много серверов, разные континенты - PullRequest
3 голосов
/ 10 января 2009

Рассмотрим достаточно большой веб-сайт (2M + просмотров страниц / м, много пользователей) с 2-мя веб-серверами: один фронт-сервер в США и один в Европе. Два выделенных URL приводят посетителей на один из серверов, один на французском языке, другой на английском. Оба сайта используют одни и те же данные.

Что было бы наиболее экономически эффективным решением? (БД, используемая в моей компании: MySQL)

1 / Один главный сервер на Amazon EC2 (США) и ведомые на внешних серверах?

  • Преимущества: нет представителя типа «мастер-мастер», что означает отсутствие риска конфликта данных с автоинкрементом и дублированием в уникальных столбцах и т. Д.

  • Недостатки: отставание! Не будет ли слишком много времени для написания в США, когда вы находитесь в Европе? Другим недостатком может быть отсутствие быстрого и грязного решения в случае смерти мастера. А как насчет наличия рабов на том же сервере, что и на front?

2 / Два экземпляра Amazon EC2, один в США, другой в Европе, выступающие в роли серверов репликации мастер-мастер. Плюс два раба на каждом из интерфейсов?

  • Adv: скорость и безопасность данных. Конечно, нет балансировщика нагрузки, но создание хака для переключения мастера на другого кажется довольно тривиальным.

  • Drwbcks: Цена. И риск коррупции на БД

3 / Любое другое решение?

Поскольку я впервые работаю с серверами на 2 континентах, я был бы очень признателен за то, что вы узнали от вас опыт в этой области, включая MySQL или нет, в том числе EC2 или нет.

Спасибо Marshall

Ответы [ 4 ]

3 голосов
/ 10 января 2009

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

  • Если вы используете готовое программное обеспечение, что другие люди сделали в этой ситуации?
  • Должно ли приложение работать со всем набором данных или вы можете разбить его на части?
  • Создано ли ваше приложение для обработки мультимастерной репликации (обычно это означает, что используется автоинкремент ПК)
  • Каковы шансы обновления / удаления коллизий? Каковы расходы?
  • Что такое отношение чтения: записи? Какова природа пишет? Они обычно обновляют или добавляют операции?

Я предполагаю, что французский сервер находится в Европе, а английский - в США? Если вы можете разделить свои данные так, чтобы французский сайт использовал одну БД, а английский сайт использовал другую, вам лучше. Даже если оба сайта имеют доступ к обеим БД, вам не нужно беспокоиться о коллизиях. Вы даже можете запустить два экземпляра mysql на каждом главном сервере и выполнить мультимастерную репликацию для обоих.

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

Если вы чувствительны к затратам и все равно собираетесь запускать реплики на своих интерфейсных серверах, просто запустите основные базы данных на интерфейсных серверах. Вы всегда можете сделать это позже. Реплики часто могут иметь более высокие затраты на ЦП / ввод-вывод, чем мастера, принимающие одинаковую нагрузку на чтение: они должны выполнять свои записи в последовательном порядке, что может реально испортить ситуацию.

Кроме того, не используйте экземпляры m1.small для вашей БД. Или, по крайней мере, следить за вашей работой. У m1.small значительно меньше энергии, и если вы посмотрите top, вы заметите, что гипервизор похищает значительный процент времени вашего процессора. Я рекомендую c1.medium's.

2 голосов
/ 11 января 2009

Никогда не используйте репликацию мастер-мастер. Нет механизма разрешения конфликтов. Если вы попытаетесь выполнить запись на оба мастера одновременно (или на один мастер до того, как он обнаружит изменения, которые вы ранее записали в другой), вы получите сценарий с нарушенной репликацией. Служба не остановится, они будут просто дрейфовать дальше и дальше, делая невозможным примирение.

Не используйте репликацию MySQL без хорошо продуманного мониторинга, чтобы убедиться, что он работает нормально. Не думайте, что из-за того, что вы настроили его правильно, он будет продолжать работать, ИЛИ оставаться в синхронизации.

НЕОБХОДИМО иметь хорошо документированную, хорошо протестированную процедуру для восстановления рабов из-за несинхронизации или остановки. Иметь аналогично документированную процедуру установки нового ведомого с нуля.

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

Если у вас есть раб, скажем, в США, когда ваш мастер находится в Европе, это обычно дает вам ожидаемую величину задержки, т.е. что-то на 150 мс больше, чем если бы они были в одном месте.

В MySQL ведомый не запускает запрос до тех пор, пока мастер его не завершит, поэтому он всегда будет отставать от времени, которое занимает обновление.

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

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

1 голос
/ 11 августа 2011

Мы смотрим на похожий сценарий - после того, как Amazon Eastcoast дважды был отключен от сети на этой неделе - это означает, что даже репликация в нескольких регионах и использование экземпляров RDB не позволили нам оставаться доступными.

Но DRB не позволяет пересекаться с востока на запад или даже в Европу.

Сейчас мы рассматриваем подход Мастера-Мастера в Востоке и на Западе или даже в Европе, когда один мастер действует только в качестве аварийного переключения и аварийного переключения через dnsmadeeasy, который реагирует очень быстро.

Преимущество: быстрое и надежное аварийное переключение, короткое время простоя, отсутствие сложного управления функцией аварийного переключения.

Недостаток: одна дополнительная система работает без ее использования - но по сравнению с использованием RDB это не дороже

DRB прекрасно управляется Amazon, включая восстановление на определенный момент времени и т. Д. - все это теряется при переходе от него. Но тот факт, что он ограничен репликациями только в одной области и эта область может быть полностью отрезана, делает его проблематичным. В качестве альтернативы резервному копированию RDB мы рассматриваем инструменты с открытым исходным кодом Zmanda для управления резервным копированием. НЕТ еще не проверено, но основано на всех наших начинаниях с отказоустойчивостью, базами данных и оборудованием, поэтому это выглядит как самый простой и, следовательно, наиболее перспективный подход для обеспечения высокой доступности.

0 голосов
/ 08 сентября 2011

Этот вопрос старый, но решение существует сейчас: Галера. Он выполняет репликацию MySQL (InnoDB) и также хорошо работает с глобальными сетями. http://codership.com/

...