Лучшая реализация для репликации MySQL с Rails 3?

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

Моей первой идеей было бы настроить конфигурацию ведущий-ведомый и разделение RW, при этом все запросы на запись (CREATE, INSERT, UPDATE) будут направляться на ведущий, а все запросы на чтение (SELECT) - на подчиненный. Прочитав об этом, кажется, что есть два варианта того, как реализовать это с нашим приложением:

  1. Использование независимого уровня промежуточного программного обеспечения для всех соединений MySQL, например прокси-сервера MySQL или DBSlayer. Однако первый находится в альфа-версии, а второй имеет ограниченную документацию.
  2. Использование драгоценного камня/плагина на основе Ruby, такого как Octopus, для разделения RW в фреймворке.

Если бы мы хотели использовать настройку master-slave, что бы вы порекомендовали для дальнейшего развития?

Другая мысль, которая у меня была, заключалась в том, чтобы использовать конфигурацию master-master, но я не уверен в реализации такой настройки.

Мысли?


person vonconrad    schedule 24.12.2010    source источник


Ответы (1)


Как правило, вы должны выполнять разделение R/W в фреймворке, потому что только он может понять контекст. В PHP я делаю это, поддерживая два соединения — одно для записи и одно для чтения, и решаю, что вы хотите явно в своем коде. Причина этого в том, что это не так просто, как разделение по типу запроса. Например, если вы запускаете транзакцию в соединении для записи, вы хотите, чтобы все чтения внутри него также проходили через это, иначе они будут вне транзакции и, вероятно, получат старые данные или застрянут в блокировках.

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

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

person Synchro    schedule 15.06.2011