MariaDB Master-Master кластер на Centos 7

Поскольку память начала серьёзно так подводить, возвращаюсь к практике быстрых минизаметок. Итак, – задача быстро поднять сабж.

Поехали…

Для Master-Master репликации используем Galera-кластер.

Ставим mariadb из официального репозитория. Здесь – https://downloads.mariadb.org/mariadb/repositories/#mirror=biznetgio генерим конфиг yum для нужной нам версии. Сохраняем его на всех серверах кластера:

cat >/etc/yum.repos.d/mariadb.repo<<EOL
# MariaDB 10.4 CentOS repository list - created 2020-01-29 16:44 UTC
# http://downloads.mariadb.org/mariadb/repositories/
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.4/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1
EOL

Устанавливаем пакеты:

yum install MariaDB-client MariaDB-common MariaDB-server MariaDB-backup galera-4 socat pigz

Стартуем сервер mysql и устанавливаем пароль рута на всех серверах кластера:

systemctl enable mariadb
systemctl start mariadb
mysql_secure_installation

Теперь надо создать на всех серверах пользователя (например sst_user) для репликации:

#mysql -u root -p
MariaDB &#91;(none)]> DELETE FROM mysql.user WHERE user='';
MariaDB &#91;(none)]> GRANT USAGE ON *.* to sst_user@'%' IDENTIFIED BY 'blabla';
MariaDB &#91;(none)]> GRANT ALL PRIVILEGES on *.* to sst_user@'%';
MariaDB &#91;(none)]> FLUSH PRIVILEGES;

Настраиваем iptables. Добавляем в /etc/sysconfig/iptables:

#mysql
-A INPUT -p tcp --dport 3306 -s <Наша сеть кластера> -j ACCEPT
#galera
-A INPUT -p tcp --dport 4567 -s <Наша сеть кластера> -j ACCEPT
#IST
-A INPUT -p tcp --dport 4568 -s <Наша сеть кластера> -j ACCEPT
#SST
-A INPUT -p tcp --dport 4444 -s <Наша сеть кластера> -j ACCEPT


Здесь, порт 3306 – это собственно, сервер Mysql. 4567 – порт репликации galera, если используется мультикаст, может быть как udp так и tcp. 4568 – Incremental State Transfers. 4444 – State Snapshot Transfer. За используемые порты и протоколы отвечают параметры:
port (mysql), wsrep_node_address (GRP), ist.recv_addr in wsrep_provider_options (IST) and wsrep_sst_receive_address (SST).

После настройки пользователей, создаём конфиги для серверов в кластере. В качестве метода репликации по умолчанию используется rsync, однако это не хороший вариант, потому что нода-донор полностью лочится как на запись, так и на чтение. Поэтому, метод репликации используем – mariabackup. Кроме этого, надо найти, где у нас библиотека libgalera_smm.so (их может стоять две – одна из epel, вторую, galera-4, подтягивает mariadb – она свежее) и указать правильный путь. Используем версию с mariadb:

# rpm -ql galera-4 | grep libgalera_smm.so
/usr/lib64/galera-4/libgalera_smm.so

Простой, примерный конфиг:

[mysqld]
bind-address=0.0.0.0
large_pages = 1

innodb_file_per_table = 1
default_storage_engine = InnoDB
innodb_autoinc_lock_mode = 2

[galera]
wsrep_on=ON
wsrep_provider=/usr/lib64/galera-4/libgalera_smm.so
#здесь перечисляем все ноды в кластере. параметр может быть одинаков на всех нодах
wsrep_cluster_address='gcomm://1.1.1.1,2.2.2.2,3.3.3.3'
#имя кластера
wsrep_cluster_name='test_cluster'
#название текущей ноды
wsrep_node_name='node1'

#метод репликации и пользователь
wsrep_sst_method=mariabackup
wsrep_sst_auth=sst_user:blablabla

binlog_format = ROW
binlog_row_image = minimal
log_bin = mysql-bin
log_bin_trust_function_creators = 1


Выбираем первую попавшуюся ноду первичной и инициализируем кластер:

#systemctl stop mariadb
#galera_new_cluster
#systemctl enable mariadb

После чего рестартуем mariadb на всех остальных нодах и не забываем поставить сервис в автозагрузку. Кластер в работе.
Проверить состояние можно залогинившись в консоль и выполнив команду:

MariaDB &#91;(none)]> SHOW GLOBAL STATUS LIKE 'wsrep_%';
+-------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------+
| Variable_name                 | Value                                                                                                                                          |
+-------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------+
| wsrep_local_state_uuid        | 4b4868fe-41fd-11ea-b055-d62cafd9c5c3                                                                                                           |
| wsrep_protocol_version        | 10                                                                                                                                             |
| wsrep_last_committed          | 356                                                                                                                                            |
| wsrep_replicated              | 13                                                                                                                                             |
| wsrep_replicated_bytes        | 4920                                                                                                                                           |
| wsrep_repl_keys               | 40                                                                                                                                             |
| wsrep_repl_keys_bytes         | 632                                                                                                                                            |
| wsrep_repl_data_bytes         | 3404                                                                                                                                           |
| wsrep_repl_other_bytes        | 0                                                                                                                                              |
| wsrep_received                | 3                                                                                                                                              |
| wsrep_received_bytes          | 312                                                                                                                                            |
| wsrep_local_commits           | 12                                                                                                                                             |
......................
| wsrep_local_state             | 4                                                                                                                                              |
| wsrep_local_state_comment     | Synced                                                                                                                                         |
...........
| wsrep_evs_state               | OPERATIONAL                                                                                                                                    |
| wsrep_gcomm_uuid              | 467c0a21-42a4-11ea-adeb-965b8200034f                                                                                                           |
| wsrep_applier_thread_count    | 1                                                                                                                                              |
| wsrep_cluster_capabilities    |                                                                                                                                                |
| wsrep_cluster_conf_id         | 18446744073709551615                                                                                                                           |
| wsrep_cluster_size            | 2                                                                                                                                              |
| wsrep_cluster_state_uuid      | 4b4868fe-41fd-11ea-b055-d62cafd9c5c3                                                                                                           |
| wsrep_cluster_status          | Primary                                                                                                                                        |
| wsrep_connected               | ON                                                                                                                                             |
| wsrep_local_bf_aborts         | 0                                                                                                                                              |
| wsrep_local_index             | 0                                                                                                                                              |
| wsrep_provider_capabilities   | :MULTI_MASTER:CERTIFICATION:PARALLEL_APPLYING:TRX_REPLAY:ISOLATION:PAUSE:CAUSAL_READS:INCREMENTAL_WRITESET:UNORDERED:PREORDERED:STREAMING:NBO: |
| wsrep_provider_name           | Galera                                                                                                                                         |
| wsrep_provider_vendor         | Codership Oy &lt;info@codership.com>                                                                                                              |
| wsrep_provider_version        | 26.4.3(r4535)                                                                                                                                  |
| wsrep_ready                   | ON                                                                                                                                             |
| wsrep_rollbacker_thread_count | 1                                                                                                                                              |
| wsrep_thread_count            | 2                                                                                                                                              |
+-------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------+
65 rows in set (0.005 sec)

P.S. Если у вас произошла неприятность в виде выключения ВСЕХ нод кластера, то запуститься снова сам кластер скорее всего не сможет. Необходимо на первичной ноде выполнить его инициализацию повторно и только потом стартовать остальные ноды!

P.P.S. Дополнительные интересные фишки и ссылки:

mariabackup-sst-method
comparing-galera-wsrep-sst-methods-rsync-vs-mariabackup


Настройка отказоустойчивого кластера MySQL с синхронной мульти-master репликацией с помощью Galera в Ubuntu, Debian и CentOS Linux – Ну почему нормальная статья попадается, когда сам уже наступил на все очевидные грабли(

Обычный кластер:

Репликация+данных
Как+настроить+mysql+master-slave+репликацию
Как+настроить+mysql+master-master+репликацию

 

Обсуждение закрыто.