Поскольку память начала серьёзно так подводить, возвращаюсь к практике быстрых минизаметок. Итак, – задача быстро поднять сабж.
Поехали…
Для 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 [(none)]> DELETE FROM mysql.user WHERE user=''; MariaDB [(none)]> GRANT USAGE ON *.* to sst_user@'%' IDENTIFIED BY 'blabla'; MariaDB [(none)]> GRANT ALL PRIVILEGES on *.* to sst_user@'%'; MariaDB [(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 [(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 <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+репликацию
Обсуждение закрыто.