см.: - Официальный образ MariaDB на Docker Hub - Setting Up Replication в MariaDB Knowledge Base - HA for MySQL and MariaDB — Comparing Master-Master Replication to Galera Cluster
Запустите контейнер первого сервера 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:
Подключитесь к запущенному серверу 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'@'%';
Выполните:
console
SHOW MASTER STATUS;
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| node1-bin.000003 | 694 | | |
+------------------+----------+--------------+------------------+
Запустите контейнер второго сервера 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:
Подключитесь к запущенному второму серверу 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'@'%';
Укажите 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
Выполните:
console
SHOW MASTER STATUS;
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| node2-bin.000003 | 694 | | |
+------------------+----------+--------------+------------------+
Используя клиент командной строки 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