Установка MariaDB Galera Cluster

Не так давно я знакомился кластером Galera для MariaDB. Поэтому решил подготовить небольшую шпаргалку о том, как выполняется установка MariaDB Galera Cluster.

Общее описание схемы развертывания

Схема развертывания:

Кластер Galera работает в режиме “active – active”, т.е. каждый узел может как читать данные, так и выполнять запись в базу. Для настройки кластера необходимо минимум три сервера.

В качестве операционной системы на узлах кластера я использовал Ubuntu Server 22.04.

Предварительные требования

Если на узлах вашего кластера включен брандмауэр, то необходимо убедиться в том, что для всех необходимых портов настроены соответствующие исключения. Полный перечень портов для исключения доступен в разделе документации. Кратки приведу список портов, необходимых для корректно работы кластера Galera:

  • Порт 3306 TCP используется сервером MariaDB по умолчанию. Если вы изменили номер порта, то не забудьте скорректировать номер порта при настройке исключения.
  • Порт 4567 TCP и UDP используется для репликации.
  • Порт 4568 TCP.
  • Порт 4444 TCP.

Установка MariaDB Galera Cluster

Первый шаг – установка пакета сервера MariaDB:

sudo apt -y install mariadb-server

Теперь я выполню первоначальную настройку безопасности сервера MariaDB:

mysql_secure_installation

Редактируем конфигурационный файл с параметрами для запуска калетра Galera:

sudo nano /etc/mysql/mariadb.conf.d/60-galera.cnf

Контент на первой ноде:

[galera]
wsrep_on=ON
wsrep_provider=/usr/lib/galera/libgalera_smm.so
wsrep_cluster_address="gcomm://10.10.10.16,10.10.10.17,10.10.10.18"
binlog_format=row
default_storage_engine=InnoDB
innodb_autoinc_lock_mode=2
wsrep_cluster_name="MariaDB_Cluster"
wsrep_node_address="10.10.10.16"

Тут важно отменить несколько параметров:

  • wsrep_cluster_address – в этом параметры нужно перечислить IP-адреса всех узлов кластера.
  • wsrep_cluster_name – этот параметр указывает кластерной имя.
  • wsrep_node_address – указывается IP-адрес текущего узла кластера.

На второй и третьей ноде отличается только параметр “wsrep_node_address” – указывается актуальный IP-адрес для кторого и третьего узла соответственно.

wsrep_node_address="10.10.10.29"

В конфигурационной файле /etc/mysql/mariadb.conf.d/50-server.cnf добавить строку:

sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf 

Вносим изменения:

bind-address = 0.0.0.0

У меня есть статья по оптимизации конфигурационного файла для сервера MySQL. Информация из этой статьи в большей степени применима и для сервера MaraDB.

Пример моего конфигурационного файла /etc/mysql/mariadb.conf.d/50-server.cnf:

[mysqld]
# GENERAL
datadir = /var/lib/mysql
socket = /var/run/mysqld/mysqld.sock
pid_file = /var/lib/mysql/mysql.pid
user = mysql
port = 3306
bind-address = 0.0.0.0
# INNODB
innodb_buffer_pool_size = 2G
innodb_file_per_table = 1
innodb_flush_log_at_trx_commit = 1
# LOGGING
log_error = /var/log/mysql/mysql-error.log
slow_query_log      = 1
slow_query_log_file = /var/log/mysql/mysql-slow.log
# OTHER
tmp_table_size = 32M
max_heap_table_size = 32M
max_connections = 300
thread_cache_size = 30
table_open_cache = 2000
open_files_limit = 65535

Создаем кластер на первом узле:

sudo galera_new_cluster

Перезапускаем службу mariadb на втором и третьем узле кластера:

systemctl restart mariadb

Проверка после установки

Проверяем общее количество узлов в кластере – их должно быть три в нашем случае:

mysql -u root -p -e "show status like 'wsrep_cluster_size'"

Все верно. Теперь попробуем создать тестовую базу и проверим – отреплицируются ли изменения на два оставшихся узла кластера.

Создаем тестовую базу на первом узле кластера. Запускаем клиент MySQL на первом узле:

mysql -u root -p

Создаем тестовую базу данных:

create database tst;
use tst;
create table distro(id int,dist varchar(50));
insert into distro values(1,'Ubuntu');
insert into distro values(2,'CentOS');
insert into distro values(3,'Mint');

Запускаем клиент MySQL на втором узле:

mysql -u root -p

Проверяем доступность данных

select * from tst.distro;

Все хорошо, данные доступны. Аналогичную проверку необходимо выполнить и на третьем узле кластера.

Что-то пошло не так

Если что-то не работает, то без анализа журналов не обойтись. Стандартное расположение журналов сервера MariaDB:

/var/log/mysql/mysql.log

Если вы использовали мой конфигурационный файл выше, то ошибки будут расположены вот в этом журнале:

/var/log/mysql/mysql-error.log

Можно еще посмотреть журнале службы mariadb:

sudo journalctl -u mariadb.service

Анализируем журналы выше, делаем какие-то предположения, меняем настройки и проверяем. Очень часто ответы есть буквально на первых строчках поисковика.

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *