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

Запустить несколько экземпляров MySQL на одном сервере (с репликацией)?

у нас есть текущий выделенный блок с 8 ГБ ОЗУ (двухъядерный четырехъядерный процессор), а наша БД выросла более чем на 17 ГБ (более 3 БД для нашего приложения). Я предполагаю, что это достаточная причина для перехода на машину с большим объемом памяти (не говоря уже о шардинге).

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

Мое рассуждение заключалось в том, что я не вижу, чтобы каждой из наших БД требовалось более 20-22 ГБ ОЗУ, прежде чем столкнуться с другими узкими местами. Будет ли запускать их параллельно и балансировать нагрузку на читаемый трафик, чтобы обеспечить производительность, сопоставимую с использованием двух выделенных блоков?

На чем основаны ваши рассуждения? Какие узкие места вы ожидаете?

Размер данных, хранящихся в вашей базе данных, не должен зависеть от объема ОЗУ, который вы предоставляете системе. Если он был загружен до такой степени, что не смог эффективно обслуживать запросы, тогда вы должны это рассмотреть. Однако неправильно настроенные запросы, отсутствие индексов и плохо настроенный экземпляр MySQL не будут полностью устранены путем обновления оборудования.

В правильно настроенном экземпляре, если вы столкнетесь с узким местом, которое не позволяет использовать всю вашу память под нагрузкой, несколько экземпляров не решат эту проблему. Скорее всего, это будет узкое место ЦП или потенциально дисковый ввод-вывод. Например, посмотрите Использование памяти InnoDB.

Есть определенные ограничения. Например, в MyISAM в MySQL 5.0, каждый буфер ключа будет ограничен 4 ГБ даже на 64-битных платформах, поскольку на них ссылаются 32-битные целые числа.

MySQL создает один поток на каждое соединение. Таким образом, если бы вы не работали на 64-битной платформе, каждый поток был бы ограничен 4 ГБ даже с Расширение физического адреса.

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

Высокая производительность MySQL фантастическая книга. Предлагаю вам прочитать.