Как настроить высокую доступность MariaDB с Heartbeat и DRBD в Ubuntu 16.04 LTS
На этой странице
- Требования
- Начало работы
- Установите DRBD и Heartbeat
- Настройка DRBD и Heartbeat
- Установка и настройка MariaDB
- Инициировать пульсацию для службы MariaDB
- Тестирование Heartbeat и DRBD
Heartbeat и DRBD используются для кластерного решения для любого приложения, использующего два сервера. Оба сервера работают в активном и пассивном режимах, один сервер будет работать одновременно, а другой сервер будет резервным. DRBD (распределенное реплицированное блочное устройство) — это служба уровня ядра, которая синхронизирует данные между двумя серверами в режиме реального времени. Heartbeat — программа с открытым исходным кодом, которая позволяет первичному и резервному серверам Linux определять, является ли другой «живым», а если первичный — нет, резервные ресурсы переключаются на резервный. Он также будет управлять высокой доступностью IP и другими службами на ваших серверах.
В этом руководстве мы узнаем, как добиться высокой доступности MariaDB с помощью Heartbeat и DRBD на сервере Ubuntu 16.04.
Требования
- Два узла с установленным сервером Ubuntu 16.04.
- На каждом узле установлены две сетевые карты.
- Дополнительный неразмеченный жесткий диск, установленный на каждом узле.
- Пользователь без полномочий root с настройкой привилегий sudo на каждом узле.
Начиная
Прежде чем начать, вам нужно будет настроить IP-адрес на каждом узле. Используйте следующий IP-адрес на каждом узле:
172.16.0.1 на eth0 и 192.168.0.101 на eth1
172.16.0.2 на eth0 и 192.168.0.102 на eth1
IP 192.168.0.103 будет IP-адресом высокой доступности.
Далее вам также потребуется настроить имя хоста и разрешение имени хоста на каждом узле. Таким образом, каждый узел может общаться друг с другом. На первом узле откройте файл /etc/hosts и файл /etc/hostname:
sudo nano /etc/hosts
Добавьте в конец файла следующие строки:
172.16.0.1 Node1 172.16.0.2 Node2
sudo nano /etc/hostname
Измените файл, как показано ниже:
Node1
Сохраните и закройте файл, когда закончите.
На втором узле откройте файл /etc/hosts и файл /etc/hostname:
sudo nano /etc/hosts
Добавьте в конец файла следующие строки:
172.16.0.1 Node1 172.16.0.2 Node2
sudo nano /etc/hostname
Измените файл, как показано ниже:
Node2
Сохраните и закройте файл, когда закончите.
Затем обновите каждый узел последней версией с помощью следующей команды:
sudo apt-get update -y
sudo apt-get upgrade -y
После обновления вашей системы перезапустите систему, чтобы применить эти изменения.
Установите DRBD и Heartbeat
Далее вам нужно будет установить DRBD и Heartbeat на обоих узлах. По умолчанию оба доступны в репозитории по умолчанию Ubuntu 16.04. Вы можете установить их, просто выполнив следующую команду на обоих узлах:
sudo apt-get install drbd8-utils heartbeat -y
Затем запустите службу DRBD и Heartbeat и включите их запуск во время загрузки:
sudo systemctl start drbd
sudo systemctl start heartbeat
systemctl enable drbd
systemctl enable heartbeat
Настройте DRBD и Heartbeat
Далее вам нужно будет настроить устройство DRBD на каждом узле. Создайте один раздел на втором неразмеченном диске /dev/sdb на каждом узле.
Вы можете сделать это, просто выполнив следующую команду на каждом узле:
sudo echo -e 'n\np\n1\n\n\nw' | fdisk /dev/sdb
Далее вам нужно будет настроить DRBD на обоих узлах. Вы можете сделать это, создав файл /etc/drbd.d/r0.res на каждом узле.
sudo nano /etc/drbd.d/r0.res
Добавьте следующие строки:
global { usage-count no; } resource r0 { protocol C; startup { degr-wfc-timeout 60; } disk { } syncer { rate 100M; } net { cram-hmac-alg sha1; shared-secret "aBcDeF"; } on Node1 { device /dev/drbd0; disk /dev/sdb1; address 172.16.0.1:7789; meta-disk internal; } on Node2 { device /dev/drbd0; disk /dev/sdb1; address 172.16.0.2:7789; meta-disk internal; } }
Сохраните и закройте файл, когда закончите, затем откройте другой файл конфигурации на каждом узле:
sudo nano /etc/ha.d/ha.cf
Добавьте следующие строки:
# Check Interval keepalive 1 # Time before server declared dead deadtime 10 # Secondary wait delay at boot initdead 60 # Auto-failback auto_failback off # Heartbeat Interface bcast eth1 # Nodes to monitor node Node1 node Node2
Сохраните и закройте файл.
Затем откройте файл ресурсов /etc/ha.d/haresources на каждом узле:
sudo nano /etc/ha.d/haresources
Добавьте следующие строки:
Node1 192.168.0.103/24 drbddisk::r0 Filesystem::/dev/drbd0::/var/lib/mysql::ext4::noatime
Здесь Node1 — это имя вашего основного активного узла, 192.168.0.103 — IP-адрес с плавающей запятой, /var/lib/mysql — точка монтирования, а /dev/drbd0 — устройство DRBD.
Далее вам нужно будет определить и сохранить идентичные ключи авторизации на обоих узлах. Вы можете сделать это с помощью файла /etc/ha.d/authkeys на каждом узле:
sudo nano /etc/ha.d/authkeys
Добавьте следующие строки:
auth1 1 sha1 your-secure-password
Здесь your-secure-password — это ваш безопасный пароль. Используйте один и тот же пароль на обоих узлах.
Затем создайте и запустите DRBD, выполнив следующую команду на Node1:
sudo drbdadm create-md r0
sudo systemctl restart drbd
sudo drbdadm outdate r0
sudo drbdadm -- --overwrite-data-of-peer primary all
sudo drbdadm primary r0
sudo mkfs.ext4 /dev/drbd0
sudo chmod 600 /etc/ha.d/authkeys
sudo mkdir /var/lib/mysql
После создания диска DRBD на узле Node1 создайте диск DRBD на узле Node2 с помощью следующей команды:
sudo drbdadm create-md r0
sudo systemctl restart drbd
sudo chmod 600 /etc/ha.d/authkeys
sudo mkdir /var/lib/mysql
Теперь вы можете убедиться, что диск DRBD подключен и правильно синхронизируется, выполнив следующую команду:
sudo cat /proc/drbd
Если все в порядке, вы должны увидеть следующий вывод:
version: 8.4.5 (api:1/proto:86-101) srcversion: F446E16BFEBS8B115AJB14H 0: cs:SyncSource ro:Primary/Secondary ds:UpToDate/Inconsistent C r----- ns:210413 nr:0 dw:126413 dr:815311 al:35 bm:0 lo:0 pe:11 ua:0 ap:0 ep:1 wo:f oos:16233752 [>....................] sync'ed: 3.3% (14752/14350)M finish: 0:12:23 speed: 12,156 (16,932) K/sec
Затем запустите пульсацию на обоих узлах, чтобы включить отказоустойчивую часть вашей установки.
sudo systemctl start heartbeat
Затем проверьте смонтированный раздел DRBD с помощью следующей команды на узле Node1:
sudo mount | grep drbd
Вы должны увидеть следующий вывод:
/dev/drbd0 on /var/lib/mysql type ext4 (rw,noatime,data=ordered)
Затем убедитесь, что плавающий IP-адрес привязан только к Node1 с помощью следующей команды:
sudo ip addr show | grep 192.168.0.103
Вы должны увидеть следующий вывод:
inet 192.168.0.103/24 brd 192.168.0.255 scope global secondary eth1:0
Установить и настроить MariaDB
Как только все настроено правильно на обоих узлах, пришло время установить сервер MariaDB на обоих узлах.
Выполните следующую команду на обоих узлах, чтобы установить сервер MariaDB:
sudo apt-get install mariadb-server -y
Далее вам нужно будет отключить службу MariaDB на обоих узлах:
sudo systemctl disable mysql
Здесь мы будем использовать Node1 в качестве основного, а базы данных на Node2 должны создаваться и заполняться посредством синхронизации с Node1. Поэтому вам нужно будет остановить службу MariaDB и удалить содержимое внутри /var/lib/mysql на Node2. Вы можете сделать это с помощью следующей команды:
sudo systemctl stop mysql
sudo rm -rf /var/lib/mysql/*
Затем вам нужно будет скопировать файл конфигурации обслуживания MySQL с узла Node1 на узел Node2. Вы можете сделать это, выполнив следующую команду:
sudo scp /etc/mysql/debian.cnf :/etc/mysql/debian.cnf
Затем вам нужно будет создать пользователя root для удаленного управления и доступа к базам данных в высокодоступном экземпляре MySQL.
Вы можете сделать это, выполнив следующую команду на Node1:
mysql -u root -p
Введите пароль root, затем создайте пользователя root с помощью следующей команды:
MariaDB [(none)]> CREATE USER 'root'@'192.168.0.%' IDENTIFIED BY 'password';
MariaDB [(none)]> GRANT ALL PRIVILEGES ON *.* TO 'root'@'192.168.0..%' WITH GRANT OPTION;
MariaDB [(none)]> FLUSH PRIVILEGES;
MariaDB [(none)]> QUIT;
Затем установите адрес привязки для MySQL на обоих узлах с помощью следующей команды:
sudo sed -i 's/127.0.0.1/0.0.0.0/g' /etc/mysql/mariadb.conf.d/*.cnf
Инициировать Heartbeat для службы MariaDB
Затем вам нужно будет добавить службу MariaDB в ваши экземпляры пульса на обоих узлах. Вы можете сделать это, отредактировав файл /etc/ha.d/haresources:
sudo nano /etc/ha.d/haresources
Измените следующие строки:
Node1 192.168.0.103/24 drbddisk::r0 Filesystem::/dev/drbd0::/var/lib/mysql::ext4::noatime mysql
Сохраните и закройте файл, когда закончите.
После настройки пульса вам нужно будет перезапустить его на обоих узлах.
Сначала перезапустите heartbea на узле Node1:
sudo systemctl restart heartbeat
Затем подождите 50 секунд, затем перезапустите службу пульса на узле 2:
sudo systemctl restart heartbeat
Проверка сердцебиения и DRBD
Теперь, когда все настроено правильно, пришло время выполнить серию тестов, чтобы убедиться, что пульсация действительно инициирует передачу с активного сервера на пассивный сервер, когда активный сервер каким-либо образом выходит из строя.
Во-первых, убедитесь, что Node1 является основным узлом drbd, выполнив следующую команду на Node1:
sudo cat /proc/drbd
Вы должны увидеть следующий вывод:
version: 8.4.5 (api:1/proto:86-101) srcversion: F446E16BFEBS8B115AJB14H O cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r----- ns:22764644 nr:256 dw:529232 dr:22248299 al:111 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0
Далее мы проверим, смонтирован ли диск DRBD, с помощью следующей команды:
sudo mount | grep drbd
/dev/drbd0 on /var/lib/mysql type ext4 (rw,noatime,data=ordered)
Затем проверьте службу MariaDB с помощью следующей команды:
sudo systemctl status mysql
Затем подключитесь к серверу MariaDB с удаленного компьютера, используя плавающий IP-адрес, и создайте тестовую базу данных:
mysql -h 192.168.0.103 -u root -p
MariaDB [(none)]> create database test;
MariaDB [(none)]> quit
Затем перезапустите пульс на Node1:
sudo systemctl restart heartbeat
Теперь пульс будет интерпретировать этот перезапуск как сбой MariaDB на узле 1 и должен инициировать аварийное переключение, чтобы сделать узел 2 основным сервером.
Вы можете проверить, что DRBD теперь рассматривает Node1 как вторичный сервер, с помощью следующей команды на Node1:
sudo cat /proc/drbd
Вы должны увидеть следующий вывод:
version: 8.4.5 (api:1/proto:86-101) srcversion: F446E16BFEBS8B115AJB14H 0: cs:Connected ro:Secondary/Primary ds:UpToDate/UpToDate C r----- ns:22764856 nr:388 dw:529576 dr:22248303 al:112 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0
Теперь убедитесь, что Node2 является основным узлом drbd, выполнив следующую команду на Node2:
sudo cat /proc/drbd
Вы должны увидеть следующий вывод:
version: 8.4.5 (api:1/proto:86-101) srcversion: F446E16BFEBS8B115AJB14H 0: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r----- ns:412 nr:20880892 dw:20881304 dr:11463 al:7 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0
Затем убедитесь, что MariaDB работает на Node2:
sudo systemctl status mysql
Теперь подключитесь к серверу MariaDB, используя плавающий IP-адрес на Node2 от удаленного пользователя.
mysql -h 192.168.0.103 -u root -p
Затем просмотрите тестовую базу данных, которую мы создали ранее, когда Node1 был основным сервером.
MariaDB [(none)]> show databases;
Вы должны увидеть следующий вывод:
+--------------------+ | Database | +--------------------+ | test | | information_schema | | lost+found | | mysql | | performance_schema | +--------------------+ 5 rows in set (0.04 sec)