Поиск по сайту:

Как настроить репликацию MariaDB Master-Master в Debian 11


На этой странице

  1. Предпосылки
  2. Установите полное доменное имя и файл /etc/hosts
  3. Синхронизация времени с помощью Chrony
  4. Установка сервера MariaDB
  5. Настройка брандмауэра UFW
  6. Настройка сервера master1 MariaDB
  7. Настройка сервера master2 MariaDB
  8. Запустите репликацию Master-Master на сервере master1 MariaDB.
  9. Тестирование репликации базы данных
  10. Заключение

В этом руководстве рассказывается, как настроить репликацию MariaDB Master-Master на серверах Debian 11. Кроме того, мы рассмотрим, как синхронизировать время с помощью Chrony между серверами MariaDB.

Предпосылки

Для выполнения этого руководства вам потребуются следующие требования:

  • Два или более серверов Debian 11. В этой демонстрации использовались два сервера Debian.
  • Пользователь без полномочий root с правами root/администратора.

Настройте полное доменное имя и файл /etc/hosts

Чтобы настроить MariaDB Master-Master между несколькими серверами, вам необходимо убедиться, что каждое системное имя хоста разрешено для правильного IP-адреса. Для его настройки необходимо настроить полное доменное имя и файл /etc/hosts на каждом сервере.

В этой демонстрации мы будем использовать два сервера Debian ниже:

IP Address      Hostname    FQDN
---------------------------------------------------
192.168.5.10    master1     master1.localdomain.io
192.168.5.11    master2     master2.localdomain.io

Чтобы настроить правильное fqdn (полное доменное имя), выполните приведенную ниже команду hostnamectl.

Установите полное доменное имя для сервера master1.

sudo hostnamectl set-hostname master1.localdomain.io

Настройте полное доменное имя для сервера master2.

sudo hostnamectl set-hostname master2.localdomain.io

Затем отредактируйте файл /etc/hosts на каждом сервере с помощью следующей команды.

sudo nano /etc/hosts

Добавьте следующую конфигурацию в файл.

192.168.5.10    master1.localdomain.io  master1
192.168.5.11    master2.localdomain.io  master2

Сохраните и закройте файл, когда закончите.

Наконец, запустите приведенную ниже команду \ping\, чтобы проверить полное доменное имя и файл /etc/hosts.

Теперь вы должны увидеть, что имя хоста «master1» указывает на полное доменное имя «master1.localdomain.io» с IP-адресом «192.168.5.10». И имя хоста «master2» будет указано на полное доменное имя «master2.localdomain.io» с IP-адресом «192.168.5.11».

ping master1
ping master2

Синхронизация времени с помощью Chrony

Синхронизация времени для развертывания репликации MariaDB Master-Master имеет решающее значение. А для синхронизации времени между серверами вам нужно будет настроить Chrony в качестве NTP-клиента на каждом сервере MariaDB.

Чтобы установить пакет Chrony, выполните следующую команду \apt install\. Введите Y, чтобы подтвердить установку, и нажмите ENTER, и установка начнется.

sudo apt install chrony

После завершения установки выполните приведенную ниже команду \systemctl\, чтобы запустить и включить службу Chrony.

sudo systemctl start chrony
sudo systemctl enable chrony

Теперь проверьте и проверьте службу Chrony, используя следующую команду. И вы должны увидеть, что служба Chrony работает. Кроме того, вы увидите, что служба Chrony \включена\, что означает, что она будет автоматически запускаться при загрузке системы.

sudo systemctl status chronyd

Затем выполните приведенную ниже команду \timedatectl\, чтобы скорректировать системное время с учетом определенного часового пояса и разрешить ему использовать службу NTP Chrony.

sudo timedatectl set-timezone Europe/Stockholm --adjust-system-clock
sudo timedatectl set-ntp yes

Наконец, запустите приведенную ниже команду \timedatectl\, чтобы проверить текущие настройки системных часов и времени. Убедитесь, что время синхронизировано между всеми серверами MariaDB.

timedatectl

Установка сервера MariaDB

Репозиторий Debian по умолчанию предоставляет серверный пакет MariaDB. Но для этой демонстрации мы установим сервер MariaDB из официального репозитория MariaDB.

Перед установкой сервера MariaDB выполните приведенную ниже команду \apt install\, чтобы установить некоторые основные зависимости пакетов. Введите Y, чтобы подтвердить установку, и нажмите ENTER, чтобы продолжить.

sudo apt install gnupg2 apt-transport-https software-properties-common

Затем выполните следующую команду, чтобы импортировать ключ GPG для репозитория MariaDB. Полный отпечаток ключа: \1993 69E5 404B D5FC 7D2F E43B CBCB 082A 1BB9 43DB\.

sudo apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0xF1656F24C74CD1D8

Теперь выполните следующую команду, чтобы добавить репозиторий MariaDB для сервера Debian 11. Затем обновите и обновите индекс пакетов на своих серверах.

sudo add-apt-repository 'deb [arch=amd64,arm64,ppc64el] http://sfo1.mirrors.linux-console.net/mariadb/repo/10.8.3/debian bullseye main'
sudo apt update

Чтобы установить пакет \mariadb-server\, выполните приведенную ниже команду \apt install\. Введите Y для подтверждения и нажмите ENTER, и установка начнется.

sudo apt install mariadb-server

В системе Debian служба MariaDB будет запущена и включена автоматически. Выполните приведенную ниже команду \systemctl\, чтобы проверить и проверить службу MariaDB.

Вы должны увидеть, что служба MariaDB \включена\, что означает, что она будет запускаться автоматически при загрузке системы. И текущий статус службы MariaDB — \работает\.

sudo systemctl is-enabled mariadb
sudo systemctl status mariadb

Настройка брандмауэра UFW

Рекомендуется использовать брандмауэр между всеми вашими серверами MariaDB. Это гарантирует, что только разрешенные IP-адреса или сети смогут получить доступ к служебным портам MariaDB. И в этой демонстрации мы будем использовать брандмауэр UFW.

Запустите приведенную ниже команду \apt install\, чтобы установить пакет \ufw\. Введите Y, чтобы подтвердить установку, и нажмите ENTER, чтобы продолжить.

sudo apt install ufw

После завершения установки выполните приведенную ниже команду \ufw\, чтобы добавить профиль приложения \OpenSSH\. Затем запустите и включите службу брандмауэра UFW.

Вам будет предложено подтвердить и включить брандмауэр UFW, введите \y\ и нажмите ENTER. Брандмауэр UFW запущен и работает.

sudo ufw allow "OpenSSH"
sudo ufw enable

Затем откройте несколько портов для развертывания репликации MariaDB Master-Master. Некоторые порты TCP для развертывания репликации MariaDB: «3306», «4567», «4568» и «4444».

В этом примере только сетям «192.168.5.0/24» будет разрешен доступ к TCP-портам сервера MariaDB.

Для сервера \master1\ с IP-адресом \192.168.5.10\ выполните следующие команды \ufw\.

sudo ufw allow from 192.168.5.0/24 to 192.168.5.10 port 3306 proto tcp
sudo ufw allow from 192.168.5.0/24 to 192.168.5.10 port 4567 proto tcp
sudo ufw allow from 192.168.5.0/24 to 192.168.5.10 port 4568 proto tcp
sudo ufw allow from 192.168.5.0/24 to 192.168.5.10 port 4444 proto tcp

Для сервера \master2\ с IP-адресом \192.168.5.11\ выполните следующие команды \ufw\.

sudo ufw allow from 192.168.5.0/24 to 192.168.5.11 port 3306 proto tcp
sudo ufw allow from 192.168.5.0/24 to 192.168.5.11 port 4567 proto tcp
sudo ufw allow from 192.168.5.0/24 to 192.168.5.11 port 4568 proto tcp
sudo ufw allow from 192.168.5.0/24 to 192.168.5.11 port 4444 proto tcp

Наконец, проверьте и проверьте состояние брандмауэра UFW со всеми включенными правилами, используя приведенную ниже команду. Вы должны увидеть профиль приложения «OpenSSH» со всеми портами репликации MariaDB «3306», «4567», «4568» и «4444», доступными на брандмауэре UFW.

sudo ufw status

Настройка сервера master1 MariaDB

Вы завершили базовую настройку сервера Debian для развертывания репликации MariaDB Master-Master. Теперь давайте начнем настройку серверов MariaDB.

Во-первых, вы будете настраивать сервер MariaDB на сервере master1. Войдите в оболочку сервера master1.

Выполните приведенную ниже команду \systemctl\, чтобы остановить службу MariaDB. Это необходимо перед настройкой сервера MariaDB.

sudo systemctl stop mariadb

Теперь отредактируйте файл конфигурации сервера MariaDB \/etc/mysql/mariadb.conf.d/50-server.cnf\, используя следующую команду.

sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf

Измените значение по умолчанию \listen-address\ на внутренний IP-адрес. В этом примере сервер master1 имеет IP-адрес \192.168.5.10\. Затем включите \binary_log\ для сервера MariaDB, это позволит настроить репликацию на сервере MariaDB. Обязательно поместите следующую конфигурацию в параметр \[mysqld]\.

[mysqld]
bind-address = 192.168.5.10

server-id              = 1
report_host            = master1

log_bin                = /var/log/mysql/mariadb-bin
log_bin_index          = /var/log/mysql/mariadb-bin.index

relay_log              = /var/log/mysql/relay-bin
relay_log_index        = /var/log/mysql/relay-bin.index

Сохраните и закройте файл, когда закончите.

Затем выполните приведенную ниже команду \systemctl\, чтобы запустить службу MariaDB и применить новые изменения. Затем проверьте и проверьте, на каком IP-адресе работает MariaDB. Вы должны увидеть, что служба MariaDB теперь работает на внутреннем IP-адресе «192.168.5.10».

sudo systemctl start mariadb
ss -plnt

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

sudo mysql -u root -p

Выполните следующие запросы, чтобы создать нового пользователя MariaDB и пароль «replusr». Затем предоставьте пользователю правильные привилегии.

CREATE USER 'replusr'@'%' IDENTIFIED BY 'replusr';
GRANT REPLICATION SLAVE ON *.* TO 'replusr'@'%';
FLUSH PRIVILEGES;

Затем выполните следующий запрос, чтобы проверить текущий двоичный журнал и его точную позицию. В этом примере двоичный файл журнала для сервера MariaDB — «mariadb-bin.000001» с позицией «773». Эти выходные данные будут использованы на следующем этапе для настройки сервера master2.

SHOW MASTER STATUS;

Введите \quit\, чтобы выйти из оболочки MariaDB.

Настройка сервера master2 MariaDB

Теперь перейдите на сервер master2 и начните настройку сервера MariaDB. Конфигурация мастер-мастер-репликации MariaDB не сильно отличается для всех серверов MariaDB.

Выполните следующую команду, чтобы остановить службу MariaDB.

sudo systemctl stop mariadb

Отредактируйте файл конфигурации MariaDB \/etc/mysql/mariadb.conf.d/50-server.cnf\, используя следующую команду.

sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf

Измените \bind-address\ на локальный IP-адрес сервера \master2\. Затем включите двоичный журнал на сервере MariaDB master2, чтобы включить репликацию. Обязательно добавьте следующую конфигурацию в параметр \[mysqld]\.

[mysqld]
bind-address = 192.168.5.11

server-id              = 2
report_host            = master2

log_bin                = /var/log/mysql/mariadb-bin
log_bin_index          = /var/log/mysql/mariadb-bin.index

relay_log              = /var/log/mysql/relay-bin
relay_log_index        = /var/log/mysql/relay-bin.index

Сохраните и закройте файл, когда закончите.

Затем запустите службу MariaDB, чтобы применить новые изменения. Затем проверьте и подтвердите текущий IP-адрес, на котором работает сервер MariaDB. Если ваша конфигурация правильная, вы увидите, что сервер MariaDB не работает на внутреннем IP-адресе сервера «master2», который равен «192.168.5.11».

sudo systemctl start mariadb
ss -plnt

После запуска службы MariaDB выполните следующую команду, чтобы войти в оболочку MariaDB как пользователь root.

sudo mysql -u root -p

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

CREATE USER 'replusr'@'%' IDENTIFIED BY 'replusr';
GRANT REPLICATION SLAVE ON *.* TO 'replusr'@'%';
FLUSH PRIVILEGES;

После этого вам нужно будет внести изменения в сервер «master2» MariaDB и определить узел «Master», используя подробную конфигурацию сервера «master1» MariaDB.

Выполните следующие запросы, чтобы остановить ведомое устройство. Затем добавьте подробную информацию о сервере MariaDB master1. В этом примере сервер MariaDB «master1» использует имя хоста «master1», имя пользователя и пароль для репликации данных — «replusr», и, наконец, файл binlog — «mariadb-bin.000001». с позицией \773\.

STOP SLAVE;
CHANGE MASTER TO MASTER_HOST='master1', MASTER_USER='replusr', MASTER_PASSWORD='replusr', MASTER_LOG_FILE='mariadb-bin.000001', MASTER_LOG_POS=773;

Теперь снова запустите подчиненное устройство, используя следующий запрос. Затем проверьте и подтвердите состояние подчиненного устройства на сервере master2. Если вы получаете такие выходные данные, как \Slave_IO_Running: Yes\ и \Slave_SQL_Running: Yes\, это означает, что репликация MariaDB активна и выполняется. Кроме того, вы можете видеть, что двоичный файл журнала на сервере \master2\ - это \mariadb-bin.000001\ с позицией \773. \. который должен быть таким же, как на сервере \master1\. Кроме того, вы можете видеть, что значение MariaDB \Master_Host\ равно \master1\.

START SLAVE;
SHOW SLAVE STATUS\G

Вы также можете проверить основной двоичный файл журнала и позицию на сервере master2, используя следующий запрос. И вы должны получить тот же результат, что и двоичный файл журнала «mariadb-bin.000001» с позицией «773», как на сервере «master1».

SHOW MASTER STATUS;

Запустите репликацию Master-Master на сервере master1 MariaDB.

Поскольку это руководство предназначено для настройки репликации master-master MariaDB, вам также необходимо добавить и определить подробную конфигурацию master2 для сервера master1.

Вернитесь на сервер master1 и войдите в оболочку MariaDB с помощью приведенной ниже команды \mysql\.

sudo mysql -u root -p

Остановите подчиненное устройство с помощью следующей команды. Затем добавьте подробную информацию о сервере master2, которая включает имя хоста сервера master2, пользователя MariaDB и пароль для репликации, а также двоичный файл журнала и положение.

STOP SLAVE;
CHANGE MASTER TO MASTER_HOST='master2', MASTER_USER='replusr', MASTER_PASSWORD='replusr', MASTER_LOG_FILE='mariadb-bin.000001', MASTER_LOG_POS=773;

Теперь снова запустите подчиненное устройство, используя приведенную ниже команду. Затем проверьте подчиненный сервер на сервере \master1\. Вы должны увидеть такие выходные данные, как \Slave_IO_Running: Yes\ и \Slave_SQL_Running: Yes\, что означает, что репликация MariaDB активна и выполняется на\master1\ сервер MariaDB. Кроме того, вы можете видеть, что значение \Master_Host\ соответствует серверу \master2\.

START SLAVE;
SHOW SLAVE STATUS\G

Тестирование репликации базы данных

Чтобы проверить репликацию мастера-мастера MariaDB, создайте новую базу данных на сервере master1 и введите в нее некоторые данные. Затем войдите в «master2», проверьте базу данных и введите в нее другие данные.

Переместитесь на сервер master1 и войдите в оболочку MariaDB как пользователь root, используя следующую команду.

sudo mysql -u root -p

Создайте новую базу данных \testdb\, используя следующий запрос.

CREATE DATABASE testdb;
USE testdb;

Теперь создайте несколько таблиц в базе данных «testdb», используя следующий запрос.

CREATE TABLE users (id INT AUTO_INCREMENT,
firstname VARCHAR(30),
lastname VARCHAR(30),
date TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY(id));

После этого вставьте некоторые данные в «testdb», используя приведенный ниже запрос MariaDB.

INSERT INTO users(firstname,lastname) VALUES ('Alice','Wonders');

Чтобы проверить свои данные на сервере MariaDB, используйте запрос \SELECT\, как показано ниже. И вы должны увидеть данные, которые вы только что вставили.

SELECT * FROM users;

Затем перейдите на сервер \master2\ и войдите в оболочку MariaDB с помощью приведенной ниже команды \mysql\.

sudo mysql -u root -p

Проверьте и проверьте список баз данных на сервере master2, используя следующий запрос. И вы должны получить базу данных «testdb», которую вы только что создали.

SHOW DATABASES;
USE testdb;

Затем вставьте некоторые другие данные в базу данных «testdb» с сервера «master2». Затем проверьте данные с помощью запроса \SELECT\. И вы должны получить новые данные, вставленные с сервера master2.

INSERT INTO users(firstname,lastname) VALUES ('Bob','Burgers');
SELECT * FROM users;

Теперь вернитесь к master1, чтобы проверить и подтвердить новые данные, которые вы только что вставили с сервера master2. Запустите следующий запрос, чтобы проверить новые данные с сервера master1. И вы должны увидеть, что новые данные, которые вы только что вставили с сервера master2, реплицированы на сервер master1.

select @@hostname;
SELECT * FROM users;

Заключение

Поздравляем! Теперь вы успешно развернули репликацию MariaDB Master-Master на серверах Debian 11. Вы также настроили синхронизацию времени на серверах MariaDB с помощью службы Chrony. Кроме того, вы также защитили развертывание сервера MariaDB с помощью брандмауэра UFW. В конце концов, у вас есть сервер MariaDB с автоматической репликацией между двумя серверами MariaDB, вы можете писать на все эти серверы MariaDB, и все данные будут автоматически реплицироваться.