Краткая инструкция по быстрому запуску кластера Galera в связке с фронтендом HAProxy для балансировки нагрузки на сервера с СУБД MariaDB на ОС Debian GNU/Linux 11.3.
Имеем в наличии 3 сервера для БД:
- dvm30 — 192.168.1.30
- dvm31 — 192.168.1.31
- dvm32 — 192.168.1.32
Нам необходимо развернуть на них мульти-мастер с СУБД MariaDB.
Для этого на всех серверах установим пакет mariadb-server
# apt install mariadb-server
сделаем первичную настройку утилитой mysql_secure_installation
# /usr/bin/mysql_secure_installation
и проверим статус службы mariadb
# systemctl status mariadb
Служба должна быть активна.
Также создадим файл конфигурации для Galera
# touch /etc/mysql/conf.d/galera.cnf
Теперь на первом сервере 192.168.1.30 откроем файл конфигурации Galera
# nano /etc/mysql/conf.d/galera.cnf
и на первом сервере dvm30 внесём такие строки:
[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/libgalera_smm.so # Galera Cluster Configuration wsrep_cluster_name="galera_cluster" wsrep_cluster_address="gcomm://192.168.1.30,192.168.1.31,192.168.1.32" # Galera Synchronization Configuration wsrep_sst_method=rsync # Galera Node Configuration wsrep_node_address="192.168.1.30" wsrep_node_name="dvm30"
на втором сервере dvm31 — такие:
[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/libgalera_smm.so # Galera Cluster Configuration wsrep_cluster_name="galera_cluster" wsrep_cluster_address="gcomm://192.168.1.30,192.168.1.31,192.168.1.32" # Galera Synchronization Configuration wsrep_sst_method=rsync # Galera Node Configuration wsrep_node_address="192.168.1.31" wsrep_node_name="dvm31"
и на третьем сервере dvm32 — такие:
[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/libgalera_smm.so # Galera Cluster Configuration wsrep_cluster_name="galera_cluster" wsrep_cluster_address="gcomm://192.168.1.30,192.168.1.31,192.168.1.32" # Galera Synchronization Configuration wsrep_sst_method=rsync # Galera Node Configuration wsrep_node_address="192.168.1.32" wsrep_node_name="dvm32"
Затем на всех серверах остановим службу mariadb
# systemctl stop mariadb
На первом сервере dvm30 инициализируем кластер
# galera_new_cluster
входим в консоль mysql пользователем root
# mysql -u root -p
и выполним такой запрос:
SHOW STATUS LIKE 'wsrep_cluster_size';
консоль должна показать такой результат:
+--------------------+-------+ | Variable_name | Value | +--------------------+-------+ | wsrep_cluster_size | 1 | +--------------------+-------+ 1 row in set (0.002 sec)
Мы видим, что на данный момент количество серверов в кластере (value) — 1
На втором сервере dvm31 запускаем службу mariadb
# systemctl start mariadb
и на первом сервере dvm30 в консоли mysql проверим:
SHOW STATUS LIKE 'wsrep_cluster_size';
ответ консоли:
+--------------------+-------+ | Variable_name | Value | +--------------------+-------+ | wsrep_cluster_size | 2 | +--------------------+-------+ 1 row in set (0.002 sec)
После этого количество серверов в кластере изменится с 1 на 2.
Также на третем сервере dvm32 стартенём службу mariadb
# systemctl start mariadb
и на первом сервере dvm30 в консоли mysql проверим:
SHOW STATUS LIKE 'wsrep_cluster_size';
ответ консоли:
+--------------------+-------+ | Variable_name | Value | +--------------------+-------+ | wsrep_cluster_size | 3 | +--------------------+-------+ 1 row in set (0.002 sec)
Наконец мы увидим, что все три сервера у нас объединены в кластер (Value покажет значение 3)
Проверим. На любом из серверов создадим БД dvm_db:
CREATE DATABASE dvm_db;
и на каком-нибудь другом из этих серверов создадим БД example_db:
CREATE DATABASE example_db;
На каждом из серверов проверим наличие только что созданных баз данных:
SHOW DATABASES;
и на каждом из них в консоли должен быть одинаковый результат:
+--------------------+ | Database | +--------------------+ | example_db | | dvm_db | | information_schema | | mysql | | performance_schema | +--------------------+ 5 rows in set (0.002 sec)
Далее установим фронтенд HAProxy на первый сервер dvm30
# apt install haproxy
и проверим статус службы haproxy
# systemctl status haproxy
Служба должна быть активна.
Затем откроем файл конфигурации haproxy
# nano /etc/haproxy/haproxy.cfg
и в самом конце файла добавим:
# Load Balancing for Galera Cluster listen galera-cluster bind 192.168.1.30:3306 mode tcp option tcplog option mysql-check user haproxy balance roundrobin server dvm30 192.168.1.30:3306 check server dvm31 192.168.1.31:3306 check server dvm32 192.168.1.32:3306 check
Затем в консоли mysql создадим пользователя haproxy:
CREATE USER 'haproxy'@'192.168.1.30'; EXIT;
и перезапускаем службу haproxy
# systemctl restart haproxy
После этого при обращении к базам данных через фронтенд будет работать балансировка нагрузки на кластер Galera.