Связаться по:
vkarabedyants Telegram Viber
+7 (499) 350-10-69

Блог о системном администрировании серверов и сайтов

Установка, настройка программного обеспечения Linux, Windows операционных систем

Как настроить master-slave репликацию MariaDB с SSL на Ubuntu Linux

Как настроить Master-Slave репликацию данных с использованием сервера MariaDB на сервере Ubuntu Linux 16.04 LTS? Как шифровать трафик репликации, чтобы данные зашифровывались при передаче, защищая мои данные и пользователей от слежки?

Репликация данных «Master-Slave» позволяет копировать базы данных на несколько серверов MariaDB. Это полезно для резервного копирования, восстановления данных, балансировки нагрузки и многого другого. В этом учебном руководстве вы узнаете, как настроить репликацию MariaDB, защищенную SSL, между главным и подчиненным серверами.

Наш пример

mariadb mysql master slave setup

Рис. 01: Настройка репликации главного подчиненного устройства в MariaDB

В этой статье будут использоваться следующие IP-адреса серверов db1 и db2:

  1. 192.168.2.5 (db1) — главный сервер MariaDB
  2. 192.168.2.6 (db2) — подчиненный сервер MariaDB

Я собираюсь предположить, что оба db1 и db2 являются совершенно новыми серверами. На сервере нет существующей базы данных.

Что вам нужно для установки master-slave-кластера MariaDB?

  1. Минимум два сервера (могут быть облачные или физические)
  2. Частная сеть (LAN / VLAN) между серверами
  3. VPN между двумя центрами обработки данных, если устанавливается между двумя IDC
  4. Ubuntu Linux 16.04 LTS на обоих серверах

Обновите /etc/hosts

Сначала обновите файл /etc/hosts на сервере db1 и db2 следующим образом:

$ sudo vi /etc/hosts

Изменить / добавить следующим образом:

192.168.2.5 db1
192.168.2.6 db2

Сохраните и закройте файл. Проверьте следующим образом:

$ ping -c4 db1
$ ping -c4 db2

Шаг 1 — Установите последнюю стабильную версию MariaDB на Ubuntu 16.04 LTS

Введите следующую команду apt-get на сервере db1 и db2 для установки MariaDB:

$ sudo apt-get install software-properties-common
$ sudo apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0xF1656F24C74CD1D8
$ sudo add-apt-repository 'deb [arch=amd64,i386,ppc64el] http://mirror.lstn.net/mariadb/repo/10.1/ubuntu xenial main'
$ sudo apt-get update
$ sudo apt-get install mariadb-server mariadb-client

Результат выполнения:

установка mariadb

Рис. 02: Установка сервера MariaDB

Шаг 2 — Защитите MariaDB

Введите следующую команду:

$ mysql_secure_installation

Результат выполнения:

защита mariadb

Рис. 02: Настройка установки MariaDB

Шаг 3. Создание ключей SSL и сертификатов для MariaDB

Введите следующие команды только на сервере db1 :

$ sudo mkdir -p /etc/mysql/ssl/
$ cd /etc/mysql/ssl/
$ sudo openssl genrsa 2048 > ca-key.pem
## set CA common name to " MariaDB admin " ##
$ sudo openssl req -new -x509 -nodes -days 730 -key ca-key.pem -out ca-cert.pem
## set server certificate common name to " MariaDB server " ##
$ sudo openssl req -newkey rsa:2048 -days 730 -nodes -keyout server-key.pem -out server-req.pem
$ sudo openssl rsa -in server-key.pem -out server-key.pem
$ sudo openssl x509 -req -in server-req.pem -days 730 -CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 -out server-cert.pem
## set client common name to " MariaDB client " ##
$ sudo openssl req -newkey rsa:2048 -days 730 -nodes -keyout client-key.pem -out client-req.pem
$ sudo openssl rsa -in client-key.pem -out client-key.pem
$ sudo openssl x509 -req -in client-req.pem -days 365000 -CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 -out client-cert.pem
$ sudo openssl verify -CAfile ca-cert.pem server-cert.pem client-cert.pem

Чтобы избежать каких-либо проблем, вы должны называть их так:

  • Общее имя CA: MariaDB admin
  • Общее имя сервера: MariaDB server
  • Клиентское общее имя: MariaDB client

Также скопируйте все сертификаты на подчиненный сервер db2:

$ ssh [email protected] mkdir /tmp/ssl/
$ cd /etc/mysql/ssl/
$ scp * [email protected]:/tmp/ssl/

Шаг 4. Настройка главного сервера MariaDB.

Введите следующие команды на главном сервере db1. Вам нужно отредактировать файл /etc/mysql/my.cnf, запустите:

$ sudo vi /etc/mysql/my.cnf

Настройте клиент MariaDB (добавьте в раздел [client]) для использования SSL:

ssl-ca=/etc/mysql/ssl/ca-cert.pem
ssl-cert=/etc/mysql/ssl/client-cert.pem
ssl-key=/etc/mysql/ssl/client-key.pem

Set bind address, то есть прослушивание только частного IP-адреса db1 192.168.2.5 (убедитесь, что вы заменили IP 192.168.2.5 на ваш реальный IP-адрес)

bind-address = 192.168.2.5

Отметьте этот сервер как главный сервер. Это число должно быть уникальным:

server-id = 1

Убедитесь, что на сервере установлены binlogs, т.е. убедитесь, что log_bin и lob_bin_index установлены следующим образом:

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

Настройте сервер MariaDB (добавьте в раздел [mysqld]), использовать SSL:

ssl
ssl-ca=/etc/mysql/ssl/ca-cert.pem
ssl-cert=/etc/mysql/ssl/server-cert.pem
ssl-key=/etc/mysql/ssl/server-key.pem

Сохраните и закройте файл. Перезапустите сервер MariaDB, запустите:

$ sudo systemctl restart mysql.service

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

Введите следующую команду на сервере master db1 :

$ mysql

ИЛИ

$ mysql -u root -p

Вы должны создать пользователя MySQL на главном сервере (db1). Синтаксис:

grant replication slave on *.* TO {username}@'{ip_of_db2_server}' identified by '{password}' REQUIRE SSL;

Например:

mysql> GRANT REPLICATION SLAVE ON *.* TO 'db_slave_usr'@'192.168.2.6' IDENTIFIED BY 'secretePassword' REQUIRE SSL;
mysql> FLUSH PRIVILEGES;
mysql> quit

Узнать статус мастера

Введите в командной строке следующую команду:

$ mysql -u root -p

После открытия оболочки MySQL введите:

mysql> SHOW MASTER STATUS;

Результат выполнения:

настройка mariadb

Рис. 03: узнать статус мастера и записать позицию

Запишите файл и данные о расположении подчиненного сервера с именем db2.

Шаг 5. Настройка подчиненного сервера MariaDB

Введите следующие команды на сервере db2 . Сначала переместите все сертификаты из каталога /tmp/ssl/ в каталог /etc/mysql/:

$ sudo mv /tmp/ssl/ /etc/mysql/

Вам нужно отредактировать файл /etc/mysql/my.cnf, запустите:

$ sudo vi /etc/mysql/my.cnf

Настройте клиент MariaDB (добавьте в раздел [client]) для использования SSL:

ssl-ca=/etc/mysql/ssl/ca-cert.pem
ssl-cert=/etc/mysql/ssl/client-cert.pem
ssl-key=/etc/mysql/ssl/client-key.pem

Set bind address, то есть прослушивать только частный IP-адрес db2 192.168.2.6 (убедитесь, что вы заменили IP 192.168.2.6 на ваш реальный IP-адрес)

bind-address = 192.168.2.6

Отметьте этот сервер как подчиненный сервер. Это число должно быть уникальным:

server-id = 2

Настройте сервер MariaDB (добавьте в раздел [mysqld]), чтобы использовать SSL:

ssl
ssl-ca=/etc/mysql/ssl/ca-cert.pem
ssl-cert=/etc/mysql/ssl/server-cert.pem
ssl-key=/etc/mysql/ssl/server-key.pem

Сохраните и закройте файл. Перезапустите сервер MariaDB, запустите:

$ sudo systemctl restart mysql.service

Введите следующую команду на подчиненном сервере db2:

$ mysql -u root -p

Введите следующую команду sql:

mysql> CHANGE MASTER TO MASTER_HOST='192.168.2.5', MASTER_USER='db_slave_usr', MASTER_PASSWORD='secretePassword', MASTER_LOG_FILE='mysql-bin.000006', MASTER_LOG_POS=661; MASTER_SSL=1;
mysql> SLAVE START;
mysql> SHOW SLAVE STATUS\G

Теперь добавьте или удалите данные на главном сервере с именем db1, и он будет реплицирован на подчиненном сервере db2.

Примечание

Вам нужно изменить свое веб-приложение, написанное на PHP / Perl / Python, чтобы записывать данные только на главный сервер db1. Если сервер master db1 упал,  читать данные с подчиненного сервера db2.

Наша команда имеет большой опыт построения отказоустойчивых систем, обращайтесь [email protected]

Оставить комментарий

Лимит времени истёк. Пожалуйста, перезагрузите CAPTCHA.