Percona XtraDB Cluster — это решение для кластеризации баз данных MySQL с открытым исходным кодом. Оно позволяет создавать серверы MySQL высокой доступности с надежной и высокой производительностью. Последняя версия Percona XtraDB Cluster — 8.0, которая полностью совместима с MySQL Server Comunity Edition 8.0.
Percona XtraDB Cluster предоставляет такие возможности, как синхронная репликация, репликация из нескольких источников, автоматическая инициализация узлов, автоматическая настройка SSL-шифрования и оптимизированная производительность.
Percona XtraDB Cluster обеспечивает высокую доступность сервера баз данных, линейную масштабируемость, предотвращает простои и потерю данных.
Это руководство покажет вам, как настроить кластер MySQL с помощью Percona XtraDB Cluster (PXC) на серверах Rocky Linux 9. Вы установите Percona XtraDB Cluster на несколько систем Rocky Linux, настроите Percona XtraDB Cluster для включения репликации базы данных между серверами, а также проверите, вставив данные на один сервер и проверив данные с другого сервера.
Prerequisistes
Чтобы выполнить это руководство, у вас должно быть два или более сервера под управлением Rocky Linux 9. Кроме того, на всех серверах должен быть пользователь, не являющийся root, с правами администратора sudo/root. Кроме того, SELinux будет работать в разрешительном режиме.
В данном примере будут использоваться три сервера Rocky Linux 9. Ниже приведена подробная информация о серверах:
Hostname IP Address -------------------------- pxc-rock01 192.168.5.80 pxc-rock02 192.168.5.81 pxc-rock03 192.168.5.82
Если все требования готовы, можно приступать к установке Percona XtraDB Cluster.
Настройка /etc/hosts и Firewalld
В этом первом шаге вы настроите файл /etc/hosts и firewalld на всех серверах Rocky Linux. Вы измените файл /etc/hosts и добавите сведения об IP-адресах и именах хостов для каждого сервера, затем вы добавите некоторые порты, которые будут использоваться кластером Percona XtraDB.
Ниже приведены сведения о портах Percona XtraDB Cluster, которые вы должны открыть на вашем брандмауэре.
Ports Used for --------------------------- 3306 MySQL client connection and SST (State Snapshot Transfer) 4444 SST via Percona XtraBackup 4567 write-set replication traffic (over TCP) and multicast replication (over TCP and UDP) 4568 IST (Incremental State Transfer)
Для начала откройте ‘/etc/hosts’ файл с помощью следующей команды редактора nano.
sudo nano /etc/hosts
Добавьте сведения об имени хоста и IP-адресе, которые будут использоваться для кластера. Не забудьте изменить эти данные в соответствии с окружением вашего сервера.
192.168.5.80 pxc-rock01 192.168.5.81 pxc-rock02 192.168.5.82 pxc-rock03
После завершения работы сохраните и закройте файл.
Далее введите следующую команду ‘firewall-cmd‘ добавьте подсеть своей внутренней сети в качестве доверенного источника. Таким образом, только доверенным сетям будет разрешен доступ ко всем серверам.
sudo firewall-cmd --permanent --add-source=192.168.5.0/24
Теперь откройте несколько портов для Percona XtraDB Cluster и перезагрузите firewalld, чтобы применить изменения. Вывод ‘успех‘ подтверждает, что новое правило было добавлено в firewalld.
sudo firewall-cmd --add-port={3306/tcp,4444/tcp,4567/tcp,4567/udp,4568/tcp} --permanent
sudo firewall-cmd --reload
Наконец, введите следующую команду ‘firewall-cmd’, чтобы проверить список включенных правил в firewalld.
sudo firewall-cmd --list-all
Следующий вывод будет распечатан в оболочке терминала. Убедитесь, что в списке указаны все порты, которые будут использоваться кластером Percona XtraDB.

С помощью /etc/hosts файл и настроен firewalld, далее вы установите пакеты Percona XtraDB Cluster.
Установка Percona XtraDB Cluster
В этом разделе вы установите Percona XtraDB Cluster на все ваши серверы Rocky Linux. Вы настроите репозиторий Percona XtraDB, затем установите пакет Percona XtraDB Cluster. Также в конце вы измените стандартный пароль корня MySQL на всех ваших серверах.
Сначала необходимо добавить и включить репозиторий EPEL. Введите следующую команду ‘dnf install’, чтобы добавить репозиторий EPEL.
sudo dnf install epel-release
Теперь введите следующую команду для установки приложения Percona release. Введите y, когда появится запрос, и нажмите ENTER, чтобы продолжить. Этот пакет предоставляет инструмент командной строки ‘percona-release‘, который можно использовать для управления репозиториями Percona.
sudo dnf install https://repo.percona.com/yum/percona-release-latest.noarch.rpm -y

Далее выполните следующую команду ‘percona-release‘, чтобы включить репозиторий Percona XtraDB Cluster v8.0. В процессе вам будет предложено отключить репозиторий MySQL по умолчанию, введите y для подтверждения и нажмите ENTER для продолжения.
sudo percona-release setup pxc-80
На выходе появится сообщение ‘Все готово!‘ подтверждает успешное выполнение операции.

Проверьте список включенных репозиториев, введя команду ‘dnf repolist’ ниже. Вы должны увидеть включенный репозиторий ‘pxc-80-release’ и список с некоторыми дополнительными репозиториями, такими как ‘prel-release’ и ‘tools-release’.
sudo dnf repolist

Теперь введите следующее ‘dnf install’ команда для установки пакета Percona XtraDB Cluster. Введите y, когда появится запрос на подтверждение, и нажмите ENTER, чтобы продолжить.
sudo dnf install percona-xtradb-cluster

Когда появится запрос на принятие ключа Percona GPG, введите y и нажмите ENTER для подтверждения.

После установки Percona XtraDB Cluster введите следующую командную утилиту systemctl для запуска и включения службы MySQL.
sudo systemctl start mysql sudo systemctl enable mysql
Теперь проверьте статус службы MySQL с помощью следующей команды. Вывод ‘активен (работает)‘ подтверждает, что MySQL запущен. А вывод ‘…; включено..» подтверждает, что MySQL будет запускаться автоматически при старте системы.
sudo systemctl status mysql

Запустив кластер Percona XtraDB, измените стандартный пароль root для всех ваших серверов MySQL.
Введите следующую команду, чтобы проверить сгенерированный по умолчанию пароль для корневого пользователя MySQL. Скопируйте пароль корневого пользователя MySQL по умолчанию.
sudo grep 'temporary password' /var/log/mysqld.log
Далее войдите в оболочку MySQL с помощью команды ‘mysql‘ команду ниже. Когда появится запрос на ввод пароля, вставьте стандартный пароль MySQL, который вы скопировали.
sudo mysql -u root -p
После входа в систему вы должны увидеть оболочку MySQL с подсказкой следующего вида ‘mysql>‘.

Введите следующий запрос MySQL для изменения пароля по умолчанию для пользователя MySQL root, выйдите из системы и завершите работу.
ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewP4ssr00tMySQL'; quit

Наконец, перед настройкой кластера Percona XtraDB Cluster необходимо остановить службу MySQL. Введите следующую команду ‘systemctl’, чтобы остановить службу MySQL на всех серверах.
sudo systemctl stop mysql
После установки кластера Percona XtraDB Cluster, настройки корня MySQL и остановки службы MySQL вы будете готовы к конфигурированию и настройке кластера.
Копирование сертификатов SSL/TLS
Начиная с версии Percona XtraDB Cluster 8.0, соединение между серверами кластера по умолчанию должно быть зашифровано. Чтобы установить зашифрованное соединение между серверами, необходимо иметь одинаковые сертификаты SSL/TLS на всех серверах.
В этом разделе вы скопируете сгенерированные по умолчанию сертификаты SSl/TLS из файла ‘pxc-rock01‘ сервер на ‘pxc-rock02‘ и ‘pxc-rock03‘ Серверы.
На ‘pxc-rock01‘ сервера, введите следующую команду для проверки доступных сертификатов. После этого необходимо скопировать файлы сертификатов ‘server-cert.pem‘, ‘server-key.pem‘, и ‘ca.pem‘ для обоих pxc-rock02 и pxc-rock03 сервера.
ls /var/lib/mysql/*.pem

Переместите рабочий каталог в ‘/var/lib/mysql‘.
cd /var/lib/mysql
Теперь введите следующее scp команда для копирования файлов сертификатов SSL/TLS на оба компьютера pxc-rock02 и pxc-rock03 сервера.
scp server-key.pem server-cert.pem ca.pem root@pxc-rock02:/var/lib/mysql scp server-key.pem server-cert.pem ca.pem root@pxc-rock03:/var/lib/mysql
Ниже приведен вывод в процессе копирования сертификатов SSL/TLS из файла pxc-rock01 к pxc-rock02 сервер.

Ниже приведен вывод в процессе копирования сертификатов SSL/TLS из файла pxc-rock01 к pxc-rock03 сервер.

Инициализация кластера Percona XtraDB на pxc-rock01
Сначала вы инициализируете кластер Percona XtraDB Cluster на сервере pxc-rock01. Для этого вам нужно будет изменить файл конфигурации сервера MySQL ‘/etc/my.cnf‘, затем запустите команду ‘mysql@bootstrap‘ service.
Откройте файл конфигурации MySQL ‘/etc/my.cnf’ с помощью следующей команды редактора nano.
sudo nano /etc/my.cnf
Добавьте список IP-адресов вашего сервера Percona XtraDB Cluster в папку ‘wsrep_cluster_address‘ параметр и добавьте параметр ‘default_storage_engine=InnoDB‘.
# Cluster connection URL contains the IPs of pxc-rock01, pxc-rock02, and pxc-rock03 wsrep_cluster_address=gcomm://192.168.5.80,192.168.5.81,192.168.5.82
# Using the MyISAM storage engine is not recommended.
default_storage_engine=InnoDB

Измените значение ‘wsrep_node_address‘ с текущим IP-адресом сервера, параметр ‘wsrep_node_name‘ с именем системного хоста, а ‘wsrep_cluster_name‘ с именем вашего кластера.
# Node 1 address wsrep_node_address=192.168.5.80 # Node Name wsrep_node_name=pxc-rock01
# Cluster name
wsrep_cluster_name=pxc-cluster

Наконец, в нижней части строки добавьте следующий конфиг, чтобы включить безопасное SSL/TLS-соединение между серверами Percona XtraDB Cluster и sst-соединением.
# enable ssl/tls connection wsrep_provider_options="socket.ssl_key=server-key.pem;socket.ssl_cert=server-cert.pem;socket.ssl_ca=ca.pem"
[sst]
encrypt=4
ssl-key=server-key.pem
ssl-ca=ca.pem
ssl-cert=server-cert.pem

Сохраните и закройте файл после завершения работы.
Далее введите следующую команду systemctl, чтобы запустить ‘mysql@bootstrap‘ и инициализируйте первый сервер Percona XtraDB Cluster.
systemctl start [email protected]
Чтобы проверить и убедиться в успехе инициализации Percona XtraDB Cluster, необходимо войти в оболочку MySQL и проверить ‘wsrep%‘ статус.
Введите следующую команду ‘mysql’, чтобы войти на сервер MySQL в качестве ‘root‘ пользователь. Введите новый пароль пользователя MySQL root, когда появится запрос.
sudo mysql -u root -p
После входа в систему введите следующий запрос, чтобы проверить детали ‘wsrep%‘ статус.
SHOW STATUS LIKE 'wsrep%';
Вы должны получить следующее сообщение — На ‘wsrep_cluster_size‘ в разделе вы увидите значение ‘1‘, что означает, что кластер Percona XtraDB Cluster инициализируется со значением 1 сервер. Вы также получите IP-адреса серверов на странице ‘wsrep_incoming_address‘ раздел. Наконец, узел находится в разделе . состояние, означающее, что он полностью подключен и готов к репликации с набором записей.

После этого первый сервер кластера Percona XtraDB ‘pxc-rock01‘ сервер инициализирован. На следующем этапе вы добавите сервер ‘pxc-rock02‘ и ‘pxc-rock03‘ Серверы в кластере.
Добавление сервера pxc-rock02 в кластер Percona XtraDB
После того как первый кластер Percona XtraDb Cluster будет инициализирован, добавьте в него сервер pxc-rock02 сервер в кластер. Способ добавления сервера в кластер Percona XtraDB Cluster аналогичен процессу инициализации, вам нужно изменить стандартный файл конфигурации сервера MySQL ‘/etc/my.cnf’ и определите список серверов для кластера, затем запустите службу MySQL обычным способом.
Введите следующую команду редактора nano, чтобы открыть файл конфигурации MySQL ‘/etc/my.cnf‘.
sudo nano /etc/my.cnf
Добавьте список IP-адресов вашего сервера Percona XtraDB Cluster в ‘wsrep_cluster_address‘ параметр и добавьте параметр ‘default_storage_engine=InnoDB‘.
# Cluster connection URL contains the IPs of pxc-rock01, pxc-rock02, and pxc-rock03 wsrep_cluster_address=gcomm://192.168.5.80,192.168.5.81,192.168.5.82
# Using the MyISAM storage engine is not recommended.
default_storage_engine=InnoDB

Измените ‘wsrep_node_address‘ с текущим IP-адресом сервера, параметр ‘wsrep_node_name‘ с именем системного хоста, а ‘wsrep_cluster_name‘ с именем вашего кластера.
# Node #2 address wsrep_node_address=192.168.5.81 # Node Name wsrep_node_name=pxc-rock02
# Cluster name
wsrep_cluster_name=pxc-cluster

Наконец, в нижней части строки добавьте следующий конфиг, чтобы включить безопасное SSL/TLS-соединение между серверами Percona XtraDB Cluster и sst-соединением.
# enable ssl/tls connection wsrep_provider_options="socket.ssl_key=server-key.pem;socket.ssl_cert=server-cert.pem;socket.ssl_ca=ca.pem"
[sst]
encrypt=4
ssl-key=server-key.pem
ssl-ca=ca.pem
ssl-cert=server-cert.pem

Сохраните и закройте файл после завершения работы.
Далее введите следующую команду systemctl, чтобы запустить службу MySQL. Это также приведет к тому, что ‘pxc-rock02‘ сервер присоединяется к инициализированному кластеру Percona XtraDB.
sudo systemctl start mysql
Наконец, чтобы убедиться, что pxc-rock02 сервер добавлен в Percona XtraDB Cluster, вы должны войти в оболочку MySQL как пользователь root, выполнив следующую команду. При появлении запроса введите пароль пользователя MySQL root.
sudo mysql -u root -p
Теперь введите следующий запрос для проверки деталей ‘wsrep%‘ статус.
SHOW STATUS LIKE 'wsrep%';
Вы должны получить следующее сообщение — На ‘wsrep_cluster_size‘ в разделе вы увидите значение ‘2‘, что означает наличие двух серверов в кластере Percona XtraDB. Вы также получите IP-адреса серверов на странице ‘wsrep_incoming_address‘ раздел, в котором указаны pxc-rock01 и pxc-rock02 IP-адреса серверов. Наконец, узел находится в . состояние, означающее, что он полностью подключен и готов к репликации с набором записей.

Добавление сервера pxc-rock03 в кластер Percona XtraDB
В этом разделе вы добавите третий сервер pxc-rock03 в кластер Percona XtraDB Cluster.
Откройте файл конфигурации ‘/etc/my.cnf‘ файл с помощью следующей команды редактора nano.
sudo nano /etc/my.cnf
Добавьте список IP-адресов вашего сервера Percona XtraDB Cluster в ‘wsrep_cluster_address‘ параметр и добавьте параметр ‘default_storage_engine=InnoDB‘.
# Cluster connection URL contains the IPs of pxc-rock01, pxc-rock02, and pxc-rock03 wsrep_cluster_address=gcomm://192.168.5.80,192.168.5.81,192.168.5.82
# Using the MyISAM storage engine is not recommended.
default_storage_engine=InnoDB

Измените значение ‘wsrep_node_address’ с текущим IP-адресом сервера, параметр ‘wsrep_node_name‘ с именем системного хоста, а ‘wsrep_cluster_name‘ с именем вашего кластера.
# Node #3 address wsrep_node_address=192.168.5.82 # Node Name wsrep_node_name=pxc-rock02
# Cluster name
wsrep_cluster_name=pxc-cluster

Наконец, в нижней части строки добавьте следующий конфиг, чтобы включить безопасное SSL/TLS-соединение между серверами Percona XtraDB Cluster и sst-соединением.
# enable ssl/tls connection wsrep_provider_options="socket.ssl_key=server-key.pem;socket.ssl_cert=server-cert.pem;socket.ssl_ca=ca.pem"
[sst]
encrypt=4
ssl-key=server-key.pem
ssl-ca=ca.pem
ssl-cert=server-cert.pem

После завершения работы сохраните и закройте файл.
Далее введите следующую команду systemctl, чтобы запустить службу MySQL и присоединить текущий сервер pxc-rock03 к кластеру Percona XtraDB.
sudo systemctl start mysql
Наконец, введите следующую команду mysql, чтобы войти в оболочку MySQL и проверить ‘wsrep%‘ статус. При появлении запроса введите пароль корня MySQL.
sudo mysql -u root -p
Теперь введите следующий запрос, чтобы проверить детали ‘wsrep%‘ статус.
SHOW STATUS LIKE 'wsrep%';
Вы должны получить следующее сообщение — На ‘wsrep_cluster_size‘ в разделе вы увидите значение ‘3‘, что означает, что в кластере Percona XtraDB Cluster доступно три сервера. Вы также получите IP-адреса серверов в разделе ‘wsrep_incoming_address’, которые являются pxc-rock01, pxc-rock02, и pxc-rock03 IP-адреса серверов. Наконец, узел находится в . состояние, означающее, что он полностью подключен и готов к репликации с набором записей.

На данный момент вы настроили Percona XtraDB Cluster с тремя различными серверами Rocky Linux 9. При этом репликация базы данных должна работать между серверами в Percona XtraDB Cluster. На следующем этапе вы проверите репликацию базы данных между несколькими серверами.
Тестирование репликации базы данных
В этом разделе вы проверите репликацию базы данных на Percona XtraDB CLuster. Это позволит убедиться, что установка прошла успешно и завершена.
Сначала войдите в оболочку MySQL из папки pxc-rock02 сервера и создайте новую базу данных под названием ‘testdb‘.
sudo mysql -u root -p CREATE DATABASE testdb;

Теперь перейдите в раздел pxc-rock03 сервера, подключитесь к оболочке MySQL под пользователем root, затем измените рабочую базу данных по умолчанию на ‘testdb‘.
sudo mysql -u root -p USE testdb;
Введите следующий запрос, чтобы создать новую таблицу под названием ‘таблица1‘.
CREATE TABLE table1 (node_id INT PRIMARY KEY, node_name VARCHAR(30));

Далее перейдите в раздел pxc-rock01 сервера, войдите в оболочку MySQL, затем вставьте новые данные в базу данных ‘testdb‘ через ‘INSERT‘ запрос ниже.
sudo mysql -u root -p
INSERT INTO testdb.table1 VALUES (1, 'pxc-rock01'); INSERT INTO testdb.table1 VALUES (2, 'pxc-rock02'); INSERT INTO testdb.table1 VALUES (3, 'pxc-rock03');

Когда данные будут добавлены, вернитесь в раздел pxc-rock02 сервера и введите приведенный ниже запрос SELECT для получения всех доступных данных в базе данных ‘testdb‘ и таблица ‘таблица1‘.
SELECT * FROM testdb.table1;
Если репликация прошла успешно, вставленные данные должны быть доступны на pxc-rock02 сервер. Ваши данные будут храниться на всех серверах кластера Percona XtraDB.

Это подтверждает, что установка кластера Percona XtraDB на серверы Rocky Linux 9 прошла успешно.
Заключение
В этом руководстве вы установили и развернули Percona XtraDB Cluster на трех серверах Rocky Linux 9. Вы узнали, как установить Percona XtraDB Cluster, защитить развертывание с помощью firewalld, инициализировать кластер, а также добавить узлы в кластер.
Кроме того, вы также защитили установку Percona XtraDB Cluster, зашифровав трафик между всеми серверами с помощью сертификатов SSL/TLS и опции ‘pxc-encrypt-cluster-traffic’, которая по умолчанию включена в Percona XtraDB Cluster 8.0.
С ее помощью вы можете добавить дополнительные серверы в текущий кластер Percona XtraDB Cluster, используя шаги, которые вы изучили при добавлении серверов pxc-rock02 и pxc-rock03. Также вы можете настроить балансировку нагрузки и высокую доступность с помощью сторонних приложений, таких как ProxySQL и HAPROXY. Чтобы узнать больше, посетите официальную документацию по кластеру Percona XtraDB Cluster.