Rate this post
Как настроить Master-Slave репликацию данных с использованием сервера MariaDB на сервере Ubuntu Linux 16.04 LTS? Как шифровать трафик репликации, чтобы данные зашифровывались при передаче, защищая мои данные и пользователей от слежки?nnРепликация данных «Master-Slave» позволяет копировать базы данных на несколько серверов MariaDB. Это полезно для резервного копирования, восстановления данных, балансировки нагрузки и многого другого. В этом учебном руководстве вы узнаете, как настроить репликацию MariaDB, защищенную SSL, между главным и подчиненным серверами.
n

Наш пример

mariadb mysql master slave setupnn

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

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

    n

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

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

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

    n

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

n

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

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

$ sudo vi /etc/hosts

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

192.168.2.5 db1n192.168.2.6 db2

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

$ ping -c4 db1n$ ping -c4 db2

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

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

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

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

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

n

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

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

$ mysql_secure_installation

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

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

n

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

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

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

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

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

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

$ ssh user@db2 mkdir /tmp/ssl/n$ cd /etc/mysql/ssl/n$ scp * user@db2:/tmp/ssl/

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

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

$ sudo vi /etc/mysql/my.cnf

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

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

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

bind-address = 192.168.2.5

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

server-id = 1

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

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

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

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

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

$ sudo systemctl restart mysql.service

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

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

$ mysql

ИЛИn

$ mysql -u root -p

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

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

Например:n

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

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

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

$ mysql -u root -p

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

mysql> SHOW MASTER STATUS;

Результат выполнения:настройка mariadbnn

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

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

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

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

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

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

$ sudo vi /etc/mysql/my.cnf

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

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

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

bind-address = 192.168.2.6

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

server-id = 2

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

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

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

$ sudo systemctl restart mysql.service

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

$ mysql -u root -p

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

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;nmysql> SLAVE START;nmysql> SHOW SLAVE STATUS\Gn

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

Примечание

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

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