Лучшая реализация для репликации MySQL с Rails 3? - PullRequest
2 голосов
/ 24 декабря 2010

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

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

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

Если мы хотим перейти к настройке «ведущий-ведомый», что вы посоветуете двигаться дальше?реализация такой настройки.

Мысли?

1 Ответ

2 голосов
/ 15 июня 2011

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

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

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

...