Spec-Zone.ru › MariaDB

Настройка репликации MariaDB между двумя кластерами MariaDB Galera

Репликация MariaDB может использоваться для репликации между двумя кластерами MariaDB Galera. В этой статье будет рассмотрено, как это сделать.

Настройка кластеров

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

  • Установите log_slave_updates=ON на всех узлах в обоих кластерах. См. Настройка кластера MariaDB Galera: запись реплицируемых наборов записей в бинарный журнал и Использование репликации MariaDB с кластером MariaDB Galera: настройка узла кластера как мастера репликации для получения дополнительной информации о том, почему это важно. Это также необходимо для включения режима wsrep GTID.
  • Установите server_id на всех узлах данного кластера, но обязательно используйте разное значение в каждом кластере. См. Использование репликации MariaDB с кластером MariaDB Galera: установка server_id на узлах кластера для получения дополнительной информации о значении этого параметра.

Настройка режима Wsrep GTID

Если вы хотите использовать репликацию с GTID, то вам также необходимо настроить некоторые параметры, чтобы включить режим wsrep GTID. Например:

  • wsrep_gtid_mode=ON должен быть установлен на всех узлах в каждом кластере.
  • wsrep_gtid_domain_id должен быть установлен на всех узлах данного кластера, чтобы каждый узел кластера использовал один и тот же домен при назначении GTID для наборов записей кластера Galera. В каждом кластере это значение должно быть разным, чтобы каждый кластер использовал разные домены при назначении GTID для своих наборов записей.
  • log_slave_updates должен быть включён на всех узлах кластера. См. MDEV-9855 по этому вопросу.
  • log_bin должен быть установлен в один и тот же путь на всех узлах кластера. См. MDEV-9856 по этому вопросу.

И как дополнительная мера безопасности:

  • gtid_domain_id должно быть установлено на разное значение на всех узлах данного кластера, и каждое из этих значений должно отличаться от установленного значения wsrep_gtid_domain_id. Это предотвращает использование узлом одного и того же домена, используемого для наборов записей кластера Galera, при назначении GTID для транзакций, не относящихся к Galera, таких как DDL, выполненные с wsrep_sst_method=RSU установленным, или DML, выполненные с wsrep_on=OFF установленным.

Настройка репликации

Наш процесс настройки репликации будет аналогичен процессу, описанному в Настройка реплицирующего узла с Mariabackup, но он будет немного изменён для работы в данном контексте.

Запуск первого кластера

Первый шаг — запуск узлов в первом кластере. Первый узел должен быть инициализирован. Остальные узлы могут быть запущены стандартно.

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

Резервное копирование базы данных на основном узле первого кластера и подготовка

Первый шаг — просто создание и подготовка свежего полного резервного копирования узла, который вы выбрали в качестве основного реплицирующего узла. Например:

$ mariabackup --backup \
   --target-dir=/var/mariadb/backup/ \
   --user=mariabackup --password=mypassword

Затем вы подготовите резервную копию, как обычно. Например:

$ mariabackup --prepare \
   --target-dir=/var/mariadb/backup/ 

Копирование резервной копии на реплику второго кластера

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

$ rsync -avrP /var/mariadb/backup c2dbserver:/var/mariadb/backup

Восстановление резервной копии на реплике второго кластера

На этом этапе можно восстановить резервную копию в datadir, как обычно. Например:

$ mariabackup --copy-back \
   --target-dir=/var/mariadb/backup/

И при необходимости настройка прав доступа к файлам:

$ chown -R mysql:mysql /var/lib/mysql/

Инициализация реплики второго кластера

После восстановления резервной копии на реплике второго кластера можно запустить сервер, инициализируя узел.

Создание пользователя репликации на основном узле первого кластера

Прежде чем реплика второго кластера сможет начать репликацию с основного узла первого кластера, необходимо создать учётную запись пользователя на основном узле, которую реплика сможет использовать для подключения, и необходимо предоставить учётной записи пользователя привилегию REPLICATION SLAVE. Например:

CREATE USER 'repl'@'c2dbserver1' IDENTIFIED BY 'password';
GRANT REPLICATION SLAVE ON *.*  TO 'repl'@'c2dbserver1';

Запуск репликации на реплике второго кластера

На этом этапе необходимо получить координаты репликации основного узла из исходной резервной копии.

Координаты будут в файле xtrabackup_binlog_info.

Mariabackup сохраняет координаты репликации в двух форматах: строки GTID и координаты файла бинарного журнала и позиции, аналогичные тем, которые обычно отображаются в выводе SHOW MASTER STATUS. В этом случае, вероятно, лучше использовать координаты GTID.

Например:

mariadb-bin.000096 568 0-1-2

Независимо от используемых координат, необходимо настроить подключение к основному узлу с помощью CHANGE MASTER TO, а затем запустить потоки репликации с помощью START SLAVE.

GTID

Если вы хотите использовать GTID, то сначала необходимо установить gtid_slave_pos на координаты GTID, которые мы взяли из файла xtrabackup_binlog_info, и установить MASTER_USE_GTID=slave_pos в команде CHANGE MASTER TO. Например:

SET GLOBAL gtid_slave_pos = "0-1-2";
CHANGE MASTER TO 
   MASTER_HOST="c1dbserver1", 
   MASTER_PORT=3310, 
   MASTER_USER="repl",  
   MASTER_PASSWORD="password", 
   MASTER_USE_GTID=slave_pos;
START SLAVE;

Файл и позиция

Если вы хотите использовать координаты файла бинарного журнала и позиции, то необходимо установить MASTER_LOG_FILE и MASTER_LOG_POS в команде CHANGE MASTER TO на координаты файла и позиции, которые мы взяли из файла xtrabackup_binlog_info. Например:

CHANGE MASTER TO 
   MASTER_HOST="c1dbserver1", 
   MASTER_PORT=3310, 
   MASTER_USER="repl",  
   MASTER_PASSWORD="password", 
   MASTER_LOG_FILE='mariadb-bin.000096',
   MASTER_LOG_POS=568,
START SLAVE;

Проверка статуса реплики второго кластера

Теперь вы должны завершить настройку реплики, поэтому проверьте её статус с помощью SHOW SLAVE STATUS. Например:

SHOW SLAVE STATUS\G

Запуск второго кластера

Если реплика реплицируется нормально, то следующим шагом будет запуск процесса MariaDB Server на других узлах второго кластера.

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

Настройка циклической репликации

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

Создание пользователя репликации на основном узле второго кластера

Прежде чем начнется циклическая репликация, вам также необходимо создать учётную запись пользователя на основном узле второго кластера, которую реплика первого кластера сможет использовать для подключения, и предоставить ей привилегию REPLICATION SLAVE. Например:

CREATE USER 'repl'@'c1dbserver1' IDENTIFIED BY 'password';
GRANT REPLICATION SLAVE ON *.*  TO 'repl'@'c1dbserver1';

Запуск циклической репликации на первом кластере

Как это делается, зависит от того, хотите ли вы использовать координаты GTID или координаты файла бинарного журнала и позиции.

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

GTID

Чтобы получить координаты GTID на втором кластере, вы можете проверить gtid_current_pos выполнив:

SHOW GLOBAL VARIABLES LIKE 'gtid_current_pos';

Затем на первом кластере можно настроить репликацию, установив gtid_slave_pos на полученный GTID и выполнив CHANGE MASTER TO:

SET GLOBAL gtid_slave_pos = "0-1-2";
CHANGE MASTER TO 
   MASTER_HOST="c2dbserver1", 
   MASTER_PORT=3310, 
   MASTER_USER="repl",  
   MASTER_PASSWORD="password", 
   MASTER_USE_GTID=slave_pos;
START SLAVE;

Файл и позиция

Чтобы получить координаты файла бинарного журнала и позиции на втором кластере, можно выполнить SHOW MASTER STATUS:

SHOW MASTER STATUS

Затем на первом кластере нужно установить master_log_file и master_log_pos в команде CHANGE MASTER TO. Например:

CHANGE MASTER TO 
   MASTER_HOST="c2dbserver1", 
   MASTER_PORT=3310, 
   MASTER_USER="repl",  
   MASTER_PASSWORD="password", 
   MASTER_LOG_FILE='mariadb-bin.000096',
   MASTER_LOG_POS=568;
START SLAVE;

Проверка состояния круговой репликации

Сейчас вы, должно быть, закончили настройку круговой репликации на узле в первом кластере, поэтому вы должны проверить его состояние с помощью SHOW SLAVE STATUS. Например:

SHOW SLAVE STATUS\G
Содержимое, воспроизведенное на этом сайте, является собственностью соответствующих владельцев, и это содержимое не проверяется предварительно компанией MariaDB. Мнения, информация и мнения, выраженные в этом содержании, не обязательно отражают точку зрения MariaDB или любой другой стороны.

© 2023 MariaDB
Licensed under the Creative Commons Attribution 3.0 Unported License and the GNU Free Documentation License.
https://mariadb.com/kb/en/configuring-mariadb-replication-between-two-mariadb-galera-clusters/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API