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

Как настроить высокую доступность MariaDB с Heartbeat и DRBD в Ubuntu 16.04 LTS


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

  1. Требования
  2. Начало работы
  3. Установите DRBD и Heartbeat
  4. Настройка DRBD и Heartbeat
  5. Установка и настройка MariaDB
  6. Инициировать пульсацию для службы MariaDB
  7. Тестирование 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)