Установка и настройка 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 и обеспечить надежную и производительную базу данных для вашего проекта.

Оцените статью