Налаштування MySQL кластера Galera в Ubuntu 22.04

MySQL є однією з найпопулярніших реляційних баз даних у світі, яка використовується для зберігання та обробки даних у різних додатках. Проте, як і будь-яка база даних, MySQL може зіткнутися з проблемою відмови або збою, що може призвести до втрати даних та простою системи. Кластер Galera — це рішення, яке дозволяє створювати високодоступні та відмовостійкі кластери MySQL, де дані зберігаються на кількох вузлах і можуть бути доступними навіть при відмові одного з них. У цій статті ми розглянемо, як встановити та налаштувати високодоступний відмовостійкий кластер Galera на операційній системі Ubuntu 22.04.

Крок 1: Встановлення необхідних пакетів

Для налаштування MySQL кластера Galera (офіційний сайт: https://galeracluster.com/) нам необхідно встановити наступні пакети:

sudo apt update
sudo apt install software-properties-common
sudo add-apt-repository universe
sudo apt update
sudo apt install galera-4 mysql-server-8.0 mysql-client-8.0

Крок 2: Налаштування первинного сервера

Налаштування первинного сервера починається зі створення конфігураційного файлу /etc/mysql/conf.d/galera.cnf з наступним вмістом:

[mysqld]
binlog_format=ROW
default-storage-engine=innodb
innodb_autoinc_lock_mode=2
bind-address=0.0.0.0
# Galera Provider Configuration
wsrep_on=ON
wsrep_provider=/usr/lib/galera-4/libgalera_smm.so
# Galera Cluster Configuration
wsrep_cluster_name="test_cluster"
wsrep_cluster_address="gcomm://"
# Galera Synchronization Configuration
wsrep_sst_method=rsync

Тут ми вмикаємо режим запису бінарних логів ROW, вказуємо сховище за замовчуванням InnoDB, задаємо режим блокування для автоінкрементних ключів та відкриваємо прив’язку до будь-якої доступної IP-адреси. Потім ми вказуємо параметри для підключення до кластера Galera та метод синхронізації SST (State Snapshot Transfer).

Після того як ми створили конфігураційний файл, ми можемо запустити первинний сервер за допомогою команди:

sudo galera_new_cluster

Крок 3: Налаштування вторинного сервера

Налаштування вторинного сервера майже ідентичне налаштуванню первинного сервера. Створіть файл /etc/mysql/conf.d/galera.cnf з наступним вмістом:

[mysqld]
binlog_format=ROW
default-storage-engine=innodb
innodb_autoinc_lock_mode=2
bind-address=0.0.0.0
# Galera Provider Configuration
wsrep_on=ON
wsrep_provider=/usr/lib/galera-4/libgalera_smm.so
# Galera Cluster Configuration
wsrep_cluster_name="test_cluster"
wsrep_cluster_address="gcomm://<ip-адрес первинного сервера>"
# Galera Synchronization Configuration
wsrep_sst_method=rsync

Замініть <ip-адрес первинного сервера> на IP-адрес первинного сервера. Потім запустіть службу MySQL на вторинному сервері:

sudo systemctl start mysql

Крок 4: Перевірка статусу кластера

Після налаштування первинного та вторинного серверів ми можемо перевірити статус кластера. Для цього виконайте команду:

sudo mysql -u root -p -e "SHOW STATUS LIKE 'wsrep_cluster_size'"

Ця команда повинна показати розмір кластера, який повинен бути рівним двом (один для первинного сервера та один для вторинного сервера).

Крок 5: Перевірка реплікації даних

Ми можемо перевірити, що дані реплікуються між серверами, створивши базу даних на первинному сервері та перевіривши її наявність на вторинному сервері. Для цього виконайте наступні команди на первинному сервері:

sudo mysql -u root -p -e "CREATE DATABASE test_db"
sudo mysql -u root -p -e "CREATE TABLE test_db.test_table (id INT PRIMARY KEY, name VARCHAR(50))"
sudo mysql -u root -p -e "INSERT INTO test_db.test_table (id, name) VALUES (1, 'Test Data')"

Потім перевірте наявність бази даних та таблиці на вторинному сервері:

sudo mysql -u root -p -e "SHOW DATABASES"
sudo mysql -u root -p -e "USE test_db; SELECT * FROM test_table"

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

Крок 6: Налаштування балансувальника навантаження

Нарешті, ми можемо налаштувати балансувальник навантаження для розподілу трафіку між серверами в кластері. Для цього можна використати будь-який доступний балансувальник навантаження, такий як HAProxy або NGINX.

Встановлення та налаштування Nginx у якості балансувальника навантаження ми вже розглядали.

Наприклад, для налаштування HAProxy створіть файл /etc/haproxy/haproxy.cfg з наступним вмістом:

frontend mysql-cluster
    bind <ip-адрес балансувальника>:3306
    mode tcp
    default_backend mysql-nodes

backend mysql-nodes
    mode tcp
    balance roundrobin
    option tcpka
    option mysql-check user haproxy_check
    server node1 <ip-адрес первинного сервера>:3306 check weight 1
    server node2 <ip-адрес вторинного сервера>:3306 check weight 1

Замініть <ip-адрес балансувальника>, <ip-адрес первинного сервера> та <ip-адрес вторинного сервера> на відповідні IP-адреси. Потім запустіть службу HAProxy:

sudo systemctl start haproxy

Тепер ви можете підключатися до кластера через балансувальник навантаження, який автоматично розподілятиме трафік між первинним та вторинним серверами в кластері.

Крок 7: Обслуговування кластера Galera

Як і будь-яка база даних, кластер Galera потребує регулярного обслуговування для підтримання оптимальної продуктивності та надійності. Ось деякі загальні рекомендації з обслуговування кластера Galera:

  • Регулярно перевіряйте стан кластера та статус синхронізації вузлів. Це можна зробити за допомогою команди SHOW STATUS LIKE 'wsrep_%'.
  • Резервуйте достатньо місця на диску для зберігання бази даних та журналів транзакцій.
  • Оптимізуйте запити та індекси для покращення продуктивності.
  • Регулярно резервуйте базу даних та журнали транзакцій для захисту від втрати даних.
  • Оновлюйте систему та програмне забезпечення, включаючи кластер Galera, щоб отримувати останні виправлення помилок та покращення продуктивності.

Висновки

У цій статті ми розглянули, як встановити та налаштувати кластер Galera на Ubuntu 22.04. Ми пройшли через усі необхідні кроки, починаючи від встановлення MySQL, до налаштування кластера та балансувальника навантаження. Також ми розглянули деякі загальні рекомендації з обслуговування кластера. Сподіваюсь, цей матеріал допоможе вам налаштувати кластер Galera та забезпечити надійну та продуктивну базу даних для вашого проєкту.

Оцініть статтю