Репликация и кластер баз данных
Репликация базы данных, это процесс при котором создается копия базы данных и поддерживается ее актуальность. Это значит, что все изменения в основной базе данных автоматически передаются в копию.
Виды репликаций
В системах управления базами данных (СУБД) существуют два вида репликации:
Master-SlaveMaster-Master
Master-Slave
Принцип работы: есть один главный сервер Master и один или несколько подчинённых Slave. Master принимает все запросы на запись (добавление, изменение, удаление данных), а Slaves только читают данные и получают обновления от Master.
Достоинства:
- Разгрузка
Masterчтение можно распределить по несколькимSlaves, что повышает производительность - Резервирование, если
Masterсломается, можно переключиться на один изSlaves - Масштабируемость, можно добавлять новые
Slavesбез перегрузки основного сервера
Недостатки:
- Задержка синхронизации, данные на
Slavesмогут немного отставать отMaster - Усли
Masterпадает, вручную или с помощью дополнительных механизмов нужно выбрать новый сервер - Не подходит для интенсивной записи, записи идут только в один узел, он может стать узким местом
Master-Master
Принцип работы: у базы данных есть два, или даже больше главных сервера, каждый из них может одновременно принимать и обрабатывать запросы на запись и чтение. Данные между серверами автоматически синхронизируются, чтобы оставаться одинаковыми.
Достоинства:
- Высокая отказоустойчивость — если один сервер выходит из строя, другой продолжает работать
- Балансировка нагрузки — можно распределять запросы между серверами, снижая нагрузку на каждый из них
Недостатки:
- Конфликты данных, если два сервера изменяют одни и те же данные одновременно, могут возникнуть проблемы с их синхронизацией
- Сложность настройки и поддержки, требуется механизм разрешения конфликтов и контроль синхронизации
- Задержки репликации, хотя данные синхронизируются, это не всегда происходит мгновенно, что может привести к временным рассинхронизациям
Master-Slave репликация
Подключение дополнительных серверов баз данных снижает нагрузку на основную базу. Чтение данных происходит из копий slave, запись идет в основную базу master.
С версии 24.0.0 главного модуля вся нагрузка может быть перенаправлена на slave серверы:
- До первого запроса на изменение данных система работает в обычном режиме
- При запросе на изменение фиксируется список измененных таблиц
- При последующих запросах выборки проверяется, изменялись ли таблицы. Если нет, запросы продолжают обрабатываться через
slaveсерверы
При использовании нескольких веб-серверов в файле /bitrix/.settings.php на всех серверах должен быть указан адрес подключения к главной базе данных. Необходимо использовать прямой IP-адрес. Адрес localhost использовать запрещено.
Как подключить
- Перейдите на страницу
Настройки -> Веб-кластер -> Группа #1 -> Репликация - Нажмите кнопку
Добавить slave базу данных - Следуйте рекомендациям мастера и исправьте параметры
masterбазы данных, критичные для настройки репликации - Укажите параметры подключения к
slaveбазе данных - Следуйте рекомендациям мастера и исправьте параметры
slaveбазы данных, критичные для настройки репликации - Введите
Название подключения
После завершения мастер добавит базу в список, но она будет неактивна. В меню действий выберите Начать использовать и следуйте инструкциям.
Запуск репликации начинается с копирования базы данных. Во время этого процесса публичная часть сайта будет закрыта. Административная часть останется доступной. Изменения данных, внесенные в этот период, могут привести к рассогласованию и повлиять на работу сайта.
После успешного подключения slave-сервера отображается его статус.
Для репликации нужны разные серверы с быстрым каналом связи, которые обеспечивают высокую пропускную способность и низкую задержку. В настройках модуля Веб-кластер можно указать время отставания slave базы от master базы, после которого она будет отключена для предотвращения рассинхронизации.
Привилегии
Для работы репликации учетные записи серверов должны иметь привилегии: SUPER, REPLICATION CLIENT, REPLICATION SLAVE.
Рекомендуется объединить их в одну учетную запись.
GRANT SELECT, LOCK TABLES, CREATE TEMPORARY TABLES, INSERT, UPDATE, DELETE, CREATE, DROP, ALTER, INDEX, REPLICATION CLIENT, RELOAD ON bitrixcluster.* TO 'bitrixcluster'@'%' IDENTIFIED BY 'Rr6wNCPJH+WU';
REPLICATION CLIENT для отображения статистики master базы.
RELOAD используется в master базе во время переноса таблиц в slave базу для FLUSH TABLES WITH READ LOCK.
Создается в каждой slave базе и указывается при подключении.
Для отображения статистики в интерфейсе:
GRANT REPLICATION CLIENT on *.* TO 'bitrixcluster_slave'@'%' IDENTIFIED BY 'Rr6wNCPJH+WU';
Для отображения запуска/остановки slave базы и изменения параметров репликации из административного интерфейса:
GRANT SUPER on *.* TO 'bitrixcluster_slave'@'%';
Для экспорта данных из master базы в slave базу:
GRANT SELECT, LOCK TABLES, CREATE TEMPORARY TABLES, INSERT, UPDATE, DELETE, CREATE, DROP, ALTER, INDEX ON bitrixcluster.* TO 'bitrixcluster_slave'@'%' IDENTIFIED BY 'Rr6wNCPJH+WU'
Создается на master базе для каждого подключения slave.
Для загрузки бинарных логов с master сервера:
GRANT REPLICATION SLAVE on *.* TO 'bitrixcluster_replica'@'%' IDENTIFIED BY 'Rr6wNCPJH+WU';
Пароль Rr6wNCPJH+WU приведен для примера, замените его на свой.
Настройка параметров базы данных
Чтобы изменить настройки подключения базы данных, на странице Настройки -> Веб-кластер -> Группа #1 -> Репликация дважды кликните по базе в таблице или выберите пункт Изменить в меню действий. Откроется форма Настройка параметров главной базы/slave базы данных:
Укажите процент распределения нагрузки для каждой базы. Эта опция перераспределяет большую часть нагрузки на более быстрые и мощные серверы в составе кластера.
Для главной базы существует дополнительная опция, которая позволяет минимизировать нагрузку на нее.
Особенности работы с master-базой
Если происходит запись в master базу, последующие чтения данных также будут происходить из нее. Это гарантирует актуальность данных, так как синхронизация со slave может иметь задержку.
Когда нужно создать собственные запросы на запись в системе, например, для веб-аналитики, то следует использовать методы StartUsingMasterOnly и StopUsingMasterOnly класса CDatabase. Эти методы позволяют временно переключиться на использование только основной базы данных.
StartUsingMasterOnlyначинает использование только master-базы для записиStopUsingMasterOnlyзавершает использование толькоmasterбазы
Вы можете обернуть API-вызовы на запись этими методами. Однако убедитесь, что после этого в коде не будет чтения данных, так как они могут еще не быть синхронизированы с копиями.
Резервная копия
Slave базу данных можно настроить для использования в качестве резервной копии. В этом случае чтение данных из нее не выполняется.
Чтобы перевести базу в режим копирования, выполните следующие действия:
- Откройте форму
Настройка параметров slave базы данных - Отметьте опцию
Для резервного копирования
Master-Master репликация
Master-Master репликация позволяет обеим базам данных быть активными для чтения и записи. Настройка выполняется на уровне базы данных. Для настройки можно использовать документацию MySQL, пример настройки Master-Master и описание настройки Master-Master.




