В этом руководстве я покажу вам, как настроить репликацию Master-Slave MariaDB на сервере Ubuntu 18.04 и Debian 9.
MariaDB – это разработанная сообществом форк системы управления реляционными базами данных MySQL, которая имеет огромное сообщество, стоящее за ее развитием, безопасностью и улучшениями.
Процесс репликации MariaDB позволяет вам поддерживать несколько копий данных MySQL.
Все данные в мастере синхронизируются с подчиненными серверами в автоматизированном процессе, и если у вас есть сбой, вы можете легко продвигать Slave на Master для операций фиксации.
Основная роль репликации заключается в распространении рабочих нагрузок на чтение и запись на нескольких серверах для обеспечения простой масштабируемости.
Шаг 1: установите MariaDB на Ubuntu 18.04 / Debian 9
У меня есть два узла, которые будут использоваться для настройки репликации Master-Slave MariaDB.
Первый узел будет действовать как главный узел, а второй – подчиненный.
Node 1: 192.168.18.40 Node 2: 192.168.18.41
Версия MariaDB, используемая в этой демонстрации, v10.3.
Вы можете заменить 10.3 на версию MariaDB, которую вы собираетесь установить.
Установите MariaDB 10.3 на Ubuntu 18.04
Используйте приведенные ниже команды, чтобы установить MariaDB 10.3 на сервер Ubuntu 18.04.
sudo apt update sudo apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0xF1656F24C74CD1D8 sudo add-apt-repository 'deb [arch=amd64] http://mirror.zol.co.zw/mariadb/repo/10.3/ubuntu bionic main' sudo apt update sudo apt install mariadb-server mariadb-client
Установите MariaDB 10.3 на Debian 9
Добавьте репозиторий MariaDB 10.3 и установите пакет mariadb-server.
sudo apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 0xF1656F24C74CD1D8 sudo add-apt-repository 'deb [arch=amd64,i386,ppc64el] http://mirror.zol.co.zw/mariadb/repo/10.3/debian stretch main' sudo apt-get update && sudo apt-get install mariadb-server
При необходимости введите пароль root
While not mandatory, it is highly recommended that you set a password for the MariaDB administrative "root" user. If this field is left blank, the password will not be changed. New password for the MariaDB "root" user: Repeat password for the MariaDB "root" user:
Шаг 2: Настройте главный сервер MariaDB
После того, как MariaDB установлен на обоих серверах, войдите в Node 1 (главный узел) через ssh и измените адрес прослушивания на фактический IP-адрес сервера.
Отредактируйте файл /etc/mysql/my.cnf и добавьте следующую строку в раздел mysqld.
#bind-address = 127.0.0.1 bind-address = 192.168.18.40
Установите идентификатор сервера, который будет уникальным идентификатором главного сервера.
server-id = 100
Создайте пользователя репликации базы данных
$ mysql -u root -p Enter password: Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 50 Server version: 10.3.9-MariaDB-1:10.3.9+maria~bionic-log mariadb.org binary distribution Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MariaDB [(none)]> grant replication slave on *.* to mysql_replica@'%' identified by 'StrongPassword'; Query OK, 0 rows affected (0.001 sec) MariaDB [(none)]> flush privileges; Query OK, 0 rows affected (0.001 sec) MariaDB [(none)]> exit Bye
Перезапустите сервер MariaDB, чтобы изменения вступили в силу.
sudo systemctl restart mysql
Проверьте статус с помощью команды ss или netstat.
# ss -tunelp | grep 3306 tcp LISTEN 0 70 192.168.18.40:3306 0.0.0.0:* users:(("mysqld",pid=16877,fd=22)) uid:111 ino:48116 sk:4 <->
Если вы используете брандмауэр, откройте порт 3306
sudo ufw allow 3306
Шаг 3: Настройте второй сервер MariaDB
Войдите в подчиненный сервер и настройте MariaDB:
$ sudo vim /etc/mysql/my.cnf
Установите значения ниже в разделе [mysqld].
[mysqld] bind-address = 192.168.18.41 server-id = 101 log_bin = /var/log/mysql/mariadb-bin read_only = 1 report-host = mariadb-slave1 expire-logs-days = 7
read_only = 1: устанавливает подчиненный режим только для чтения.
server-id = 101: Это уникальный идентификационный сервера. По умолчанию он будет равен 1, если «master-host» не установлен.
log_bin=/var/log/mysql/mariadb-bin: Это позволяет вести двоичный журнал.
Перезапустите mariadb после изменения настроек.
sudo systemctl restart mysql
Шаг 4: Инициализация процесса репликации
Мы должны быть готовы начать процесс репликации на подчиненном сервере.
Начните с проверки состояния на ведущем устройстве:
MariaDB [(none)]> show master status\G *************************** 1. row *************************** File: mariadb-bin.000003 Position: 344 Binlog_Do_DB: Binlog_Ignore_DB: 1 row in set (0.000 sec)
Обратите внимание на текущий файл и положение основного журнала.
Затем настройте ведомый сервер с данными, полученными из команды главного состояния.
Войдите в подчиненный сервер MariaDB как пользователь root и настройте подключение к главному серверу
$ mysql -u root -p CHANGE MASTER TO MASTER_HOST='192.168.18.40', MASTER_USER='mysql_replica', MASTER_PASSWORD='StrongPassword', MASTER_LOG_FILE='mariadb-bin.000003', MASTER_LOG_POS=344;
Затем запустите репликацию на подчиненном устройстве:
mysql> start slave; Query OK, 0 rows affected (0.002 sec)
Чтобы проверить статус ведомого, используйте:
MariaDB [(none)]> show slave status\G *************************** 1. row *************************** Slave_IO_State: Waiting for master to send event Master_Host: 192.168.18.40 Master_User: mysql_replica Master_Port: 3306 Connect_Retry: 60 Master_Log_File: mariadb-bin.000003 Read_Master_Log_Pos: 344 Relay_Log_File: mysqld-relay-bin.000002 Relay_Log_Pos: 557 Relay_Master_Log_File: mariadb-bin.000003 Slave_IO_Running: Yes Slave_SQL_Running: Yes Replicate_Do_DB: Replicate_Ignore_DB: Replicate_Do_Table: Replicate_Ignore_Table: Replicate_Wild_Do_Table: Replicate_Wild_Ignore_Table: Last_Errno: 0 Last_Error: Skip_Counter: 0 Exec_Master_Log_Pos: 344 Relay_Log_Space: 867 Until_Condition: None Until_Log_File: Until_Log_Pos: 0 Master_SSL_Allowed: No Master_SSL_CA_File: Master_SSL_CA_Path: Master_SSL_Cert: Master_SSL_Cipher: Master_SSL_Key: Seconds_Behind_Master: 0 Master_SSL_Verify_Server_Cert: No Last_IO_Errno: 0 Last_IO_Error: Last_SQL_Errno: 0 Last_SQL_Error: Replicate_Ignore_Server_Ids: Master_Server_Id: 100 Master_SSL_Crl: Master_SSL_Crlpath: Using_Gtid: No Gtid_IO_Pos: Replicate_Do_Domain_Ids: Replicate_Ignore_Domain_Ids: Parallel_Mode: conservative SQL_Delay: 0 SQL_Remaining_Delay: NULL Slave_SQL_Running_State: Slave has read all relay log; waiting for the slave I/O thread to update it Slave_DDL_Groups: 0 Slave_Non_Transactional_Groups: 0 Slave_Transactional_Groups: 0 1 row in set (0.001 sec)
Ведомый IO и SQL должен указывать на текущее состояние:
Slave_IO_Running: Yes Slave_SQL_Running: Yes
Проверка списка процессов на ведущем устройстве также должна отображать соединения с подчиненными серверами.
MariaDB [(none)]> select ID,user,host,db,command,time,state from information_schema.processlist order by time desc limit 5; +----+---------------+---------------------+------+-------------+------+------------------------------------------------------------------+ | ID | user | host | db | command | time | state | +----+---------------+---------------------+------+-------------+------+------------------------------------------------------------------+ | 38 | mysql_replica | 192.168.18.41:51522 | NULL | Binlog Dump | 988 | Master has sent all binlog to slave; waiting for binlog to be up | | 2 | system user | | NULL | Daemon | 0 | InnoDB purge worker | | 5 | system user | | NULL | Daemon | 0 | InnoDB shutdown handler | | 1 | system user | | NULL | Daemon | 0 | InnoDB purge coordinator | | 4 | system user | | NULL | Daemon | 0 | InnoDB purge worker | +----+---------------+---------------------+------+-------------+------+------------------------------------------------------------------+ 5 rows in set (0.000 sec)