====== Установка Percona XtraDB Cluster на Debian 11 ======
===== Подготовка Оси =====
apt update
apt install -y wget gnupg2 curl lsb-release
==== Установка кластера ====
=== Получаем репозиторий и устанавливаем его ===
wget https://repo.percona.com/apt/percona-release_latest.generic_all.deb
dpkg -i percona-release_latest.generic_all.deb
=== Устанавливаем кластер ===
percona-release disable all
# percona cluster 57
percona-release enable pxc-57 testing
percona-release enable pxb-24 testing
apt-get update
apt install percona-xtradb-cluster-57
# percona cluster 80
percona-release setup pxc80
apt install percona-xtradb-cluster
=== При необходимости устанавливаем утилиты percona-toolkit ===
percona-release enable tools release
apt update
apt install percona-toolkit
=== После установки останавливаем mysql ===
# После установки останавливаем mysql
service mysql stop
==== Конфигурируем кластер ====
Имеется два сервера, которые необходимо собрать в кластер
^ Node ^ Host ^ IP ^
|Node 1 | db4 | 192.168.0.220 |
|Node 2 | db5 | 192.168.0.221 |
====Создаем конфиг первой ноды====
mkdir /etc/mysql/percona-xtradb-cluster.conf.d/
nano /etc/mysql/percona-xtradb-cluster.conf.d/wsrep.cnf
В файл добавляем следующее содержимое:
[mysqld]
wsrep_provider=/usr/lib/libgalera_smm.so
wsrep_cluster_name=pxc-cluster
wsrep_cluster_address=gcomm://192.168.0.220,192.168.0.221
wsrep_node_name=db4
wsrep_node_address=192.168.0.220
wsrep_sst_method=xtrabackup-v2
wsrep_sst_auth=sstuser:verySt0ngPa$$wd
pxc_strict_mode=ENFORCING
binlog_format=ROW
default_storage_engine=InnoDB
innodb_autoinc_lock_mode=2
# Подключаем конфиг в MySQL
echo '!includedir /etc/mysql/percona-xtradb-cluster.conf.d/' >> /etc/mysql/my.cnf
#Конфигурируем пользователя для синка данных между БД
mysql -u root -p
====Добавляем пользователя MySQL====
Останавливаем MySQL
service mysql stop
Bootstrat-им ноду
# В этот момент текущая нода определяет переменную wsrep_cluster_conf_id в 1
systemctl start mysql@bootstrap.service
# Подключаемся в mysql и добавляем пользователя с паролем
mysql -p
CREATE USER 'sstuser'@'localhost' IDENTIFIED BY 'verySt0ngPa$$wd';
GRANT RELOAD, LOCK TABLES, PROCESS, REPLICATION CLIENT ON *.* TO 'sstuser'@'localhost';
FLUSH PRIVILEGES;
==== Генерация сертификатов ====
# Генерация сертификатов
mkdir /etc/mysql/certs; cd /etc/mysql/certs
# Generate CA key and certificate
# Generate the CA key file:
openssl genrsa 2048 > ca-key.pem
# Generate the CA certificate file:
openssl req -new -x509 -nodes -days 9999 -key ca-key.pem -out ca.pem
# Generate server key and certificate
# Generate the server key file:
openssl req -newkey rsa:2048 -days 9999 -nodes -keyout server-key.pem -out server-req.pem
# Remove the passphrase:
openssl rsa -in server-key.pem -out server-key.pem
# Generate the server certificate file:
openssl x509 -req -in server-req.pem -days 9999 -CA ca.pem -CAkey ca-key.pem -set_serial 01 -out server-cert.pem
# Generate client key and certificate
# Generate the client key file:
openssl req -newkey rsa:2048 -days 9999 -nodes -keyout client-key.pem -out client-req.pem
# Remove the passphrase:
openssl rsa -in client-key.pem -out client-key.pem
# Generate the client certificate file:
openssl x509 -req -in client-req.pem -days 9999 -CA ca.pem -CAkey ca-key.pem -set_serial 01 -out client-cert.pem
root@db4 ~ # /etc/init.d/mysql bootstrap-pxc
Bootstrapping Percona XtraDB Cluster database server: mysqld ..
====Особенности конфигурации в Debian ====
Здесь есть важное замечание, на которое следует обратить пристальное внимание, Проблема в том, что в скрипте systemd debian не содержится опций для остановки bootstrap
root@db4:~# service mysql
Usage: /etc/init.d/mysql start|stop|restart|restart-bootstrap|reload|force-reload|status|bootstrap-pxc
Сам файл /etc/systemd/system/mysql.bootstrap.service:
[Unit]
Description=Percona XtraDB Cluster daemon
After=network.target
After=syslog.target
[Install]
WantedBy=multi-user.target
[Service]
User=mysql
Group=mysql
Type=forking
TimeoutSec=0
PermissionsStartOnly=true
ExecStart=/etc/init.d/mysql bootstrap-pxc
ExecStop=/usr/bin/mysqladmin shutdown
ExecReload=/etc/init.d/mysql reload
EnvironmentFile=-/etc/default/mysql
LimitNOFILE = 5000
Restart=on-failure
RestartSec=3
RestartPreventExitStatus=1
PrivateTmp=false
Поэтому для остановки bootstrap следует через ps aux вычислить id работающего процесса и убить его.
После этого нужно запустить работать mysql в обычном режиме командой ''service mysql start''
====Добавляем вторую ноду====
Необходимо добавить пользователя на ноду, аналогично первой ноде.
В конфиге исправляем два параметра - **IP** и **имя** ноды :
wsrep_node_name=db5
wsrep_node_address=192.168.0.221
Стартуем сервер MySQL
root@db5 ~ # service mysql stop
root@db5 ~ # service mysql start
Проверяем работу, заходим в MySQL mysql -p
mysql> show status like 'wsrep%';
mysql> show status like 'wsrep_local_state_comment';
+---------------------------+--------+
| Variable_name | Value |
+---------------------------+--------+
| wsrep_local_state_comment | Synced |
+---------------------------+--------+
1 row in set (0.00 sec)
mysql> show status like 'wsrep_cluster_status';
+----------------------+---------+
| Variable_name | Value |
+----------------------+---------+
| wsrep_cluster_status | Primary |
+----------------------+---------+
1 row in set (0.00 sec)
mysql> show status like 'wsrep_connected';
+-----------------+-------+
| Variable_name | Value |
+-----------------+-------+
| wsrep_connected | ON |
+-----------------+-------+
1 row in set (0.00 sec)
mysql> show status like 'wsrep_local_state';
+-------------------+-------+
| Variable_name | Value |
+-------------------+-------+
| wsrep_local_state | 4 |
+-------------------+-------+
1 row in set (0.00 sec)
Аналогично можно добавить еще одну или несколько нод percona при необходимости.
==== Пример конфига /etc/mysql/percona-xtradb-cluster.conf.d/wsrep.cnf ====
[mysqld]
wsrep_provider=/usr/lib/galera3/libgalera_smm.so
wsrep_cluster_address=gcomm://149.202.225.167,149.202.225.163
binlog_format=ROW
default_storage_engine=InnoDB
wsrep_slave_threads=8
wsrep_log_conflicts
innodb_autoinc_lock_mode=2
wsrep_node_address=149.202.XXX.XXX
wsrep_cluster_name=pxc-cluster
wsrep_node_name=pxc-cluster-node-1
pxc_strict_mode=ENFORCING
wsrep_sst_method=xtrabackup-v2
wsrep_sst_auth=sstuser:Passw0rd