Запуск Galera в связке с HAProxy в Debian 11

Краткая инструкция по быстрому запуску кластера 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.

Добавить комментарий

Ваш адрес email не будет опубликован.