Репликация и кластер баз данных
Репликация базы данных, это процесс при котором создается копия базы данных и поддерживается ее актуальность. Это значит, что все изменения в основной базе данных автоматически передаются в копию.
Виды репликаций
В системах управления базами данных (СУБД) существуют два вида репликации:
Master-Slave
Master-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.