← Навигация по документации

Репликация Master-to-Master между двумя серверами MariaDB с использованием Docker

см.: - Официальный образ MariaDB на Docker Hub - Setting Up Replication в MariaDB Knowledge Base - HA for MySQL and MariaDB — Comparing Master-Master Replication to Galera Cluster

  1. Запуск первого экземпляра MariaDB

    Запустите контейнер первого сервера MariaDB на одном узле с включённым бинарным журналом при помощи Docker Compose

    console docker-compose -f node1.yml up -d с примером node1.yml: yaml version: "3" services: mariadb: image: mariadb:10.7.1 ports: - "3306:3306" environment: MYSQL_ROOT_PASSWORD: verys3cret MYSQL_DATABASE: keycloak MYSQL_USER: keycloak MYSQL_PASSWORD: keycloak command: - "--character-set-server=latin1" - "--collation-server=latin1_swedish_ci" - "--log-bin" - "--log-basename=node1" - "--server-id=1" - "--replicate-do-db=keycloak" - "--auto_increment_increment=2" - "--auto_increment_offset=1" volumes: - dbdata:/var/lib/mysql volumes: dbdata:

  2. Создание пользователя для репликации

    Подключитесь к запущенному серверу MariaDB с помощью клиента командной строки mysql в работающем контейнере: console docker exec -i -t <container-id> mysql -u root -p и выполните следующий SQL: sql CREATE USER 'replication_user'@'%' IDENTIFIED BY 'bigs3cret'; GRANT REPLICATION SLAVE ON *.* TO 'replication_user'@'%';

  3. Получение координат бинарного журнала

    Выполните: console SHOW MASTER STATUS; +------------------+----------+--------------+------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +------------------+----------+--------------+------------------+ | node1-bin.000003 | 694 | | | +------------------+----------+--------------+------------------+

  4. Запуск второго экземпляра MariaDB на другом узле

    Запустите контейнер второго сервера MariaDB на другом узле с включённым бинарным журналом при помощи Docker Compose

    console docker-compose -f node2.yml up -d с примером node2.yml: yaml version: "3" services: mariadb: image: mariadb:10.7.1 ports: - "3306:3306" environment: MYSQL_ROOT_PASSWORD: verys3cret MYSQL_DATABASE: keycloak MYSQL_USER: keycloak MYSQL_PASSWORD: keycloak command: - "--character-set-server=latin1" - "--collation-server=latin1_swedish_ci" - "--log-bin" - "--log-basename=node2" - "--server-id=2" - "--replicate-do-db=keycloak" - "--auto_increment_increment=2" - "--auto_increment_offset=2" volumes: - dbdata:/var/lib/mysql volumes: dbdata:

  5. Создание пользователя для репликации на втором экземпляре MariaDB

    Подключитесь к запущенному второму серверу MariaDB с помощью клиента командной строки mysql в работающем контейнере: console docker exec -i -t <container-id> mysql -u root -p и выполните следующий SQL: sql CREATE USER 'replication_user'@'%' IDENTIFIED BY 'bigs3cret'; GRANT REPLICATION SLAVE ON *.* TO 'replication_user'@'%';

  6. Подключение второго экземпляра MariaDB как Slave к первому экземпляру MariaDB как Master:

    Укажите Host/IP и координаты бинарного журнала первого экземпляра MariaDB в команде: console CHANGE MASTER TO MASTER_HOST='<host/IP of node1>', MASTER_USER='replication_user', MASTER_PASSWORD='bigs3cret', MASTER_LOG_FILE='node1-bin.000003', MASTER_LOG_POS=694;

    Запустите ведомый (slave) командой START SLAVE: console START SLAVE;

    Проверьте, что репликация работает, выполнив команду SHOW SLAVE STATUS: console SHOW SLAVE STATUS \G

    Если репликация работает корректно, оба значения Slave_IO_Running и Slave_SQL_Running должны быть Yes: Slave_IO_Running: Yes Slave_SQL_Running: Yes

  7. Получение координат бинарного журнала на втором экземпляре MariaDB

    Выполните: console SHOW MASTER STATUS; +------------------+----------+--------------+------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +------------------+----------+--------------+------------------+ | node2-bin.000003 | 694 | | | +------------------+----------+--------------+------------------+

  8. Подключение первого экземпляра MariaDB как Slave ко второму экземпляру MariaDB как Master:

    Используя клиент командной строки mysql, подключённый к первому запущенному экземпляру MariaDB, укажите IP и координаты бинарного журнала второго экземпляра MariaDB в команде: console CHANGE MASTER TO MASTER_HOST='<host/IP of node2>', MASTER_USER='replication_user', MASTER_PASSWORD='bigs3cret', MASTER_LOG_FILE='node2-bin.000003', MASTER_LOG_POS=694;

    Запустите ведомый (slave) командой START SLAVE: console START SLAVE;

    Проверьте, что репликация работает, выполнив команду SHOW SLAVE STATUS: console SHOW SLAVE STATUS \G

    Если репликация работает корректно, оба значения Slave_IO_Running и Slave_SQL_Running должны быть Yes: Slave_IO_Running: Yes Slave_SQL_Running: Yes