Как масштабировать MySQL на нескольких машинах? - PullRequest
25 голосов
/ 24 апреля 2009

У меня есть веб-приложение под управлением LAMP. В последнее время у нас увеличилась нагрузка, и сейчас мы ищем решения для масштабирования. Масштабировать Apache довольно просто, мы просто собираем несколько машин на хостинге и разбираем входящий трафик.

Однако каждый экземпляр apache будет взаимодействовать с MySQL, и в конечном итоге MySQL будет перегружен. Как масштабировать MySQL на нескольких машинах в этой настройке? Я уже посмотрел на этот , но, в частности, нам нужны немедленные обновления с БД, поэтому я не думаю, что репликация является хорошей стратегией? Также, надеюсь, это можно сделать с минимальным изменением кода.

PS. У нас соотношение чтения и записи составляет 1: 1.

Ответы [ 5 ]

23 голосов
/ 24 апреля 2009

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

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

Документно-ориентированные базы данных или хранилища столбцов выполняют эту работу за вас, но в настоящее время они оптимизированы для OLAP, а не для OLTP.

4 голосов
/ 24 апреля 2009

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

2 голосов
/ 24 апреля 2009

Вам стоит взглянуть на MySQL Performance Blog . Может быть, вы найдете что-то полезное.

1 голос
/ 28 апреля 2014

Зависит от серверной части приложения (т. Е. От того, как обрабатываются PK, транзакции и идентификаторы вставки), вы можете рассмотреть репликацию MASTER-MASTER с различными настройками auto_increment. Это может быть сложно и требует тщательного тестирования, но это может сработать.

Кроме того, в новом MySQL 5.6 есть GTID (глобальный идентификатор транзакции), который обычно очень помогает поддерживать синхронизацию репликации, особенно в этом сценарии.

0 голосов
/ 21 мая 2014

Ну ... удачи в масштабировании всех этих записей. Узел базы данных становится узким местом, слишком много блокировок и буферов mgmt и прочее ...

Единственный способ, который я обнаружил, который действительно работает, это масштабирование, шардинг, к сожалению, шардинг не предоставляется для MySQL "из коробки" (как в некоторых NoSQL, таких как Mongo). ScaleBase (заявление об отказе: я там работаю) - производитель полного решения по горизонтальному масштабированию, если хотите, "автоматического шардинга". ScaleBae анализирует ваши данные и поток SQL, распределяет данные по узлам БД, направляет команды и объединяет результаты во время выполнения - так что вам не придется это делать!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...