Масштабирование с 1 сервера базы данных MySQL до 4-5 серверов очень ясно из документации официального сайта разработчика MySQL: http://dev.mysql.com/doc/refman/5.1/en/replication-solutions-scaleout.html
А как насчет масштабирования с 4 серверов до 20 серверов? мы просто добавляем его в качестве мази? Имеется в виду 19 подчиненных и только 1 главный? Это означает, что скорость вставки будет одинаковой независимо от того, сколько серверов БД мы вставим.
Есть ли лучший способ горизонтального масштабирования для MySQL, при котором чем больше серверов мы устанавливаем, тем выше скорость чтения и записи. Мы видим, что это необходимо, потому что это система для компаний с крупными сделками (торговый сайт)
О да, по возможности избегайте хранения SAN. Если требуется SAN, можно также перенести MySQL на Cassandra.
Проверьте кластеризацию mysql-mmm или ndb, если вы имеете дело с таким количеством узлов, однако имейте в виду, что если вы действительно используете MySQL Cluster (ndb), вам нужно будет соответствующим образом изменить свой код.
MySQL-MMM можно найти по адресу http://mysql-mmm.org/ и материал ndb является частью MySQL Cluster Server с mysql.com
Есть несколько решений.
Чтобы получить производительность вставки бога с минимальным влиянием на ваш код, взгляните на кластеры mysql. Они выходят далеко за рамки репликации и прозрачно реализуют сегментирование. Я считаю (но нужно копать, чтобы проверить), что кластер mysql может действовать как мастер в репликации master / slave. Так, например. у вас может быть 4-узловой кластер, обрабатывающий записи, реплицируемые на дюжину или около того ведомых устройств.
Обратите внимание, что вы можете реализовать репликацию мастер / мастер - вы можете эффективно располагать любое количество узлов в кольце - что также даст вам преимущество в производительности вставки - но при таком большом количестве узлов повышается риск задержек в распространение обновлений.
Если у вас сложная схема, вы можете получить большие преимущества, используя механизм объединенного хранилища для разделения данных, хотя mysql не всегда оптимизирует запросы настолько, насколько это возможно в этом сценарии.
Вам обязательно стоит посмотреть на mysqlproxy или какой-то другой уровень абстракции, если вы идете по большинству этих маршрутов.
Возможно, вы захотите изучить настройку мастера распространения.
Это потребует создания подчиненного устройства (называемого мастером распределения), которое имеет три (3) характеристики:
Что хорошего в этом?
Представьте себе этот сценарий
Вот что происходит, когда INSERT выполняется в ServerA
Это дает следующие преимущества
Это пробовали другие. Фактически, я ответил на вопрос кому-то в DBA StackExchange и Переполнение стека. Это жизнеспособный вариант для тех, кто хочет выполнять работу, но имеет приличное распределение операций ввода-вывода для чтения между двумя или более подчиненными устройствами.
Если вас беспокоит высокая доступность, не проблема. У вас есть два варианта:
ОПЦИЯ 1
Повторите настройку следующим образом
ВАРИАНТ 2: Используйте MySQL и DRBD
Внедрить избыточность на уровне дисков через DRBD и Ucarp