Что мы можем сделать в репликации MySQL 5.0, чтобы решить проблемы пропускной способности?

dba.stackexchange https://dba.stackexchange.com/questions/3106

Вопрос

Я разрабатываю приложение для запуска на клиентском ПК (Win), который настроен с экземпляром MySQL Server 5.1, который будет действовать как подчиненный только для чтения в удаленном мастер. У отдаленного мастера десятки схем, но мне нужен только один на одного клиента, поэтому я поставляю Репликация-де-дБ Установите на моем.ini только повторить схему, в которой нужен клиент. Репликация работает, но когда наши клиенты попадают в регионы мира, где доступ к Интернету доступен только через 3G Wireless, которые взимаются с помощью данных, они быстро превышают ограничения своих планов данных и сталкиваются с дорогими проблемами.

Насколько я понимаю, MySQL записывает все транзакции для всех схем в один файл binlog, что означает, что каждый клиент должен загружать все транзакции, которые выполняются на каждой схеме на мастере, затем после загрузки примените фильтр базы данных на на одно Репликация-де-дБ Настройки в файле клиента my.ini.

Чтобы минимизировать эту неэффективность, я использовал slave_compressed_protocol = 1 Настройка, которая, по -видимому, снижает передаваемые данные на 50%, но все же заставляет нашего клиента быстро превышать ограничение данных, увеличивая счет 3G.

Я не могу представить, что я единственный, кто сталкивается с этим, поэтому я уверен, что получу тонну ответов о том, как достичь этого, установив x = y. Тем не менее, я не могу найти никакой документации такой настройки или рекомендуемого подхода.

Пока что я думаю о возможном решении, предоставьте обратную связь или альтернативные маршруты:


  1. Установите раб «прокси» для каждой схемы (в другой коробке или в том же поле с другим экземпляром/портом MySQL)
  2. Настройте Proxy Slave, чтобы реплицировать DO-DB только одну базу данных, которую клиенты хотят воспроизвести.
  3. Настройте экземпляр MySQL клиента в качестве рабов на соответствующий прокси -подвод.

Этот должен привести к тому, что клиент только получает данные Binlog для их схемы. Недостатком (насколько я могу судить) является то, что он резко увеличивает сложность нашей установки, что, вероятно, делает ее более хрупким.

Мысли? Подойдет ли этот подход?

Обратите внимание, что мы запускаем сервер MySQL 5.0 на RedHat, но мы могли бы обновить до 5.5, если он создает решение.

Это было полезно?

Решение

Предложение № 1: Использовать мастера распределения

Мастер распределения-это подчинен MySQL с включенным в бин-бин, включенные в логарифмические обновления и содержит только таблицы с Двигатель хранения черной дыры. Анкет Вы можете применить Replicate-DO-DB к мастеру распределения и создать бинарные журналы в мастере распределения, который содержит только схемы БД, которые вы хотите, чтобы заглушить. Таким образом, вы уменьшаете размер исходящих бенлогов от мастера распределения.

Вы можете настроить мастер распределения следующим образом:

  1. Mysqldump Ваша база данных (ы) с использованием опции-no-data для создания дампа только для схемы.
  2. Загрузите дамп только схемы в мастер распределения.
  3. Преобразуйте каждую таблицу в мастере распределения в двигатель хранения черной дыры.
  4. Настройка репликации в мастер распределения от мастера с реальными данными.
  5. Добавьте опцию (ы) Replicate-DO-DB в /etc/my.cnf мастера распределения.

Для этапов 2 и 3 вы также можете редактировать дамп только схемы и заменить двигатель = myisam и ingine = innodb с помощью двигателя = черная дыра, а затем загрузить, что отредактировало схему только схемы в мастер распределения.

Только на шаге 3, если вы хотите скрепить преобразование всех таблиц Myisam и Innodb в Blackhole в мастере распределения, запустите следующий запрос и выведите его в текстовый файл:

mysql -h... -u... -p... -A --skip-column-names -e"SELECT CONCAT('ALTER TABLE ',table_schema,'.',table_name', ENGINE=BLACKHOLE;') BlackholeConversion FROM information_schema.tables WHERE table_schema NOT IN ('information_schema','mysql') AND engine <> 'BLACKHOLE'" > BlackholeMaker.sql

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

Пока вы не отправляете никакого DDL в мастер распределения, вы можете передавать любой DML (вставьте, обновляете, удаляете), который вы так желаете, прежде чем позволить клиентам воспроизвести только информацию о DB.

Я уже написал пост на другом сайте StackexChange, в котором обсуждается использование мастера распределения.

Предложение № 2: Используйте меньшие бинарные журналы и журналы реле

Если вы установите max_binlog_size Что -то смехотворно маленькое, тогда бенлоги можно собрать и отправить в небольшие куски. Существует также отдельная опция для установки размера журналов реле, max_relay_log_size. Анкет Если MAX_RELAY_LOG_SIZE = 0, это будет по умолчанию, что будет установлено MAX_BINLOG_SIZE.

Предложение № 3: Используйте полусинхронную репликацию (Только MySQL 5.5)

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

Предложение № 4: Использовать бинарные журналы на основе операторов, а не на основе строк

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

Другая проблема заключается в использовании RBBL в сочетании с Replicate-Do-DB, где имя таблицы имеет приготовленную базу данных. Анкет Это не может быть полезно для раба, особенно для мастера распределения. Поэтому убедитесь, что у всех DML нет базы данных AA и периода перед какими -либо именами таблиц.

Другие советы

MAX_BINLOG_SIZE должен быть неактуальным - данные BINLOG постоянно передаются.

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

SBR против RBR - это зависит от запроса. Либо может быть лучше или хуже другого.

Поместите мастера распределения на ту же машину, что и настоящий мастер, или на машину «рядом с Мастером». Используйте отдельные порты, чтобы держать экземпляры отдельными.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с dba.stackexchange
scroll top