RHEL 8 - Percona MySQL (cluster)

Теги

Red Hat Enterprise Linux — дистрибутив Linux компании Red Hat. Данный дистрибутив позиционируется для корпоративного использования.

Основная особенность дистрибутива RHEL — наличие коммерческой поддержки на протяжении 10 лет, с возможностью продления до 13 лет. Многие производители программного и аппаратного обеспечения включили RHEL в число поддерживаемых ими дистрибутивов Linux. 

Данное руководство показывает, как построить multi-master базу данных на Red Hat Enterprise Linux 8. Раньше создание отказоустойчивого, безопасного multi-master сервиса MySQL было трудоемким делом. Построение решения на упрощенной ОС, такой как Red Hat Enterprise Linux (RHEL) 8, и использование профессионально упакованного multi-master дистрибутива MySQL от Percona облегчают задачу.

Установить программное обеспечение кластера. Выполните следующие команды на всех трех серверах (DB1, DB2 и DB3):

# yum -y install https://repo.percona.com/yum/percona-release-latest.noarch.rpm

# percona-release enable-only pxc-80 release

# percona-release enable tools release

# yum repolist 

Updating Subscription Management repositories. 

repo id                                         repo name 

prel-release-noarch                             Percona Release release/noarch YUM repository 

pxc-80-release-x86_64                           Percona XtraDB Cluster 8.0 release/x86_64 YUM repository 

rhel-8-for-x86_64-appstream-rpms                Red Hat Enterprise Linux 8 for x86_64 - AppStream (RPMs) 

rhel-8-for-x86_64-baseos-rpms                   Red Hat Enterprise Linux 8 for x86_64 - BaseOS (RPMs) 

satellite-tools-6.8-for-rhel-8-x86_64-rpms      Red Hat Satellite Tools 6.8 for RHEL 8 x86_64 (RPMs) 

tools-release-x86_64                            Percona Tools release/x86_64 YUM repository

Поскольку репозитории RHEL 8 включают в себя версию MySQL, для успешного завершения установки Percona, необходимо отключить доступ к ним.

# yum -y module disable mysql

# yum -y install percona-xtradb-cluster

Настройте кластер. На сервере DB1 запустите службу базы данных для доступа к ней через клиент MySQL, чтобы обновить пароль по умолчанию и позволить любому хосту удаленно подключаться для управления:

# systemctl start mysql


# grep 'temporary password' /var/log/mysqld.log
# mysql -u root -p


Изменить root пароль по умолчанию с помощью команды ALTER:

# mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'redhatPERCONA';

Включите login с любого хоста с помощью команды UPDATE:

# mysql> UPDATE mysql.user SET host='%' WHERE user='root';

Выход из администрирования MySQL:

# mysql> exit

На сервере DB1 остановите службу баз данных:

# systemctl stop mysql

На серверах DB2 и DB3 запустите/остановите службу MySQL для создания исходных файловых структур:

# systemctl start mysql

# systemctl stop mysql

На всех серверах баз данных в кластере (DB1, DB2 и DB3) убедитесь, что конфигурационный файл /etc/my.cnf содержит следующие уникальные поля:

wsrep_cluster_address=gcomm://

wsrep_cluster_name=

wsrep_node_name=

Добавьте IP-адрес каждого сервера баз данных:

wsrep_cluster_address=gcomm://192.168.40.91,192.168.40.92,192.168.40.93

Добавьте уникальное название кластера. Оно должно быть одинаковым на всех серверах в кластере. Это позволит идентифицировать кластер в других кластерах:

wsrep_cluster_name=pxc-cluster

Добавьте уникальное имя узла и его IP-адрес. Кластер должен иметь способ идентификации каждого узла:

wsrep_node_name=pxc-cluster-node-db1

wsrep_node_address=192.168.40.91

Выполните эту команду на каждом сервере баз данных, чтобы убедиться в правильности сделанных вами настроек:

[DB1]

# grep -e address -e cluster /etc/my.cnf | grep -v \# 

wsrep_cluster_address=gcomm://192.168.40.91,192.168.40.92,192.168.40.93 

wsrep_node_address=192.168.40.91 

wsrep_cluster_name=pxc-cluster 

wsrep_node_name=pxc-cluster-node-db1

[DB2]

# grep -e address -e cluster /etc/my.cnf | grep -v \# 

wsrep_cluster_address=gcomm://192.168.40.91,192.168.40.92,192.168.40.93 

wsrep_node_address=192.168.40.92 

wsrep_cluster_name=pxc-cluster 

wsrep_node_name=pxc-cluster-node-db2

[DB3]

# grep -e address -e cluster /etc/my.cnf | grep -v \# 

wsrep_cluster_address=gcomm://192.168.40.91,192.168.40.92,192.168.40.93 

wsrep_node_address=192.168.40.93 

wsrep_cluster_name=pxc-cluster 

wsrep_node_name=pxc-cluster-node-db3

Запускаем кластер
. Когда конфигурация готова, следующим шагом будет загрузка сервера DB1. Это делается с помощью специального сервиса mysql@bootstrap.service:

# systemctl start mysql@bootstrap.service

Войдите в систему, чтобы проверить состояние с помощью следующих команд:

# mysql -u root -p

# mysql> show status like 'wsrep%';

Ищите wsrep_cluster_size, который должен быть 1, так как единственным сервером в кластере на данный момент является DB1.

Служба bootstrap генерирует TLS сертификаты безопасности, используемые для защищенных кластерных коммуникаций. Скопируйте эти файлы в /var/lib/mysql на двух других серверах баз данных: server-key.pem, ca.pem и server-cert.pem.

# cd /var/lib/mysql

# scp server-key.pem server-cert.pem ca.pem db2:/var/lib/mysql/

# scp server-key.pem server-cert.pem ca.pem db3:/var/lib/mysql/


Настройте брандмауэр для безопасной работы кластера. Кластер Percona требует, чтобы следующие четыре порта были открыты для правильной работы: 3306, 4444, 4567 и 4568. Выполните эти команды брандмауэра на всех трех серверах (DB1, DB2 и DB3) для их настройки.

Убедитесь, что служба firewalld работает:

# systemctl enable firewalld

# systemctl start firewalld

Зона по умолчанию является публичной, поэтому, если вы не изменили ее, вы можете добавить требуемые четыре порта таким образом:

# firewall-cmd --add-port 3306/tcp --zone=public --permanent

# firewall-cmd --add-port 4444/tcp --zone=public --permanent

# firewall-cmd --add-port 4567/tcp --zone=public --permanent


# firewall-cmd --add-port 4568/tcp --zone=public --permanent

Или, если хотите, добавьте несколько портов одновременно:

# firewall-cmd --add-port={3306/tcp,4444/tcp,4567/tcp,4568/tcp} --zone=public --permanent

Перезагрузите службу Firewalld следующей командой, а затем перечислите порты, чтобы подтвердить, что служба настроена так, как ожидается:  

# firewall-cmd --reload


# firewall-cmd --list-ports 

3306/tcp 4444/tcp 4567/tcp 4568/tcp

Теперь пришло время добавить еще несколько серверов в существующий кластер из одного, который в настоящее время работает после загрузки. Целью является добавление как DB2, так и DB3 в кластер, работающий на DB1. По очереди запустите службу MySQL на каждом сервере, ожидая ее завершения запуска, прежде чем переходить к следующему серверу.

На DB2, введите:

# systemctl start mysql

На DB3, введите:

# systemctl start mysql

На DB1, следите за выводом mysql.log, чтобы найти новые серверы, присоединяющиеся к кластеру. Это даст вам знать, работает ли все так, как ожидается, или возникают ошибки на этапе присоединения к кластеру:

# tail -f /var/log/mysqld.log | grep db3


2021-04-08T17:48:25.892746Z 0 [Note] [MY-000000] [Galera] STATE EXCHANGE: got state msg: 9ea100f1-9892-11eb-af
0e-66802999478c from 0 (pxc-cluster-node-db3) 
       0: 9e07f773-9892-11eb-a4b8-7bfcd02aca9e, pxc-cluster-node-db3


2021-04-08T17:48:26.405209Z 0 [Note] [MY-000000] [Galera] Member 0.0 (pxc-cluster-node-db3) requested state tr
ansfer from '*any*'. Selected 1.0 (pxc-cluster-node-db1)(SYNCED) as donor.


2021-04-08T17:48:41.023324Z 0 [Note] [MY-000000] [Galera] 1.0 (pxc-cluster-node-db1): State transfer to 0.0 (p
xc-cluster-node-db3) complete. 

2021-04-08T17:48:46.677727Z 0 [Note] [MY-000000] [Galera] 0.0 (pxc-cluster-node-db3): State transfer from 1.0 
(pxc-cluster-node-db1) complete. 

2021-04-08T17:48:46.678022Z 0 [Note] [MY-000000] [Galera] Member 0.0 (pxc-cluster-node-db3) synced with group.

В вышеприведенном выводе лог-файла видно, что DB3 присоединилась к кластеру, запросила передачу состояния и успешно синхронизировала свои данные с DB1. Еще одним способом проверки размера кластера является вход на любой сервер, являющийся членом кластера, и выполнение этих команд:

# mysql -u root -p

# mysql> show status like 'wsrep%';

Ищите wsrep_cluster_size, который должен быть равен 3, так как все три сервера (DB1, DB2 и DB3) уже присоединились к кластеру. Ищите wsrep_incoming_addresses, которые должны показывать IP-адреса всех трех серверов. Опять же, это еще один способ подтвердить, что все серверы находятся в кластере и правильно взаимодействуют.

Тестирование кластеров. Теперь, когда у вас есть трехузловой кластер, вам нужно протестировать возможности active-active-active. На сервере DB1 создайте новую базу данных следующей командой:

# mysql -u root -p

# mysql> create database myACTIVEdb;

На сервере DB2 или DB3 выполните следующие команды, чтобы проверить, не появляется ли вновь созданная БД:  

# mysql -u root -p

# mysql> show databases; 

Новая база данных должна появиться практически сразу. Независимо от того, какой сервер записывает данные, они реплицируются на другие серверы базы данных. 


Жизненный цикл версий Red Hat Enterprise Linux составляет не менее семи лет для версий 3 и 4, для более поздних версий, таких как 5, 6 и 7, поддержка составляет 10 лет.