====== Установка 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