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