Назад | Перейти на главную страницу

Как зеркалировать базу данных MySQL?

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

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

Как упоминали другие люди, вы говорите о репликации с несколькими мастерами. Есть несколько инструментов с открытым исходным кодом, например Мааткит или МММ чтобы помочь с репликацией с несколькими мастерами, но даже с ними вы все равно просите мир обиды.

Я хотел бы убедиться, что вам действительно нужно, чтобы ваши записи происходили синхронно (то есть мгновенно). Если вы можете выдержать задержку от пары секунд до минуты между тем, когда пользователь выполняет действие на сайте, и данные вставляются или обновляются в БД, я бы подумал о настройке какого-то процесса автономной регистрации. Например, где бы у вас ни был оператор insert / update, вместо этого поместите что-то, что записывает в файл - или в БД в памяти, если вы не можете принять удар записи на диск - и иметь некоторый процесс / демон, который находится в вашей сети head (s), читает файл журнала и записывает соответствующие данные в один мастер; который затем реплицирует его на другую машину с балансировкой нагрузки.

Считайте это тем, чего стоит, хотя, кстати, мне никогда не приходилось активно поддерживать репликацию с несколькими мастерами.

Я бы тоже старался не использовать круговую репликацию.

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

Другой подход может заключаться в настройке активно-пассивной установки с двумя узлами (drbd и некоторая кластеризация). Проще в приложении (он просто видит один сервер mysql для подключения), требует некоторого внимания со стороны высокой доступности, если вы не привыкли к таким вещам. Вы не получите бонуса к производительности от наличия двух разных серверов db.

Чтобы сделать выбор, вам необходимо решить, в первую очередь вы заинтересованы в снижении времени простоя (стандартная репликация или активный / пассивный кластер) или в достижении лучшей производительности (стандартная репликация, циклическая репликация и т. Д.) И каковы ваши ограничения (можете ли вы изменить приложение, и насколько вы можете его изменить, необходимую производительность, допустимый бюджет и т. д.)

Чтобы получить лучшую производительность вашего оборудования (или просто компенсировать недостаток производительности, если вы выберете активный / пассивный путь), не забывайте о memcached и подобных вещах.

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

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