Содержание
Percona XtraDB Cluster на Debian 11
Установка кластера
# Обновляем систему: apt update # Устанавливаем необходимые пакеты: apt install -y wget gnupg2 lsb-release curl # Закачиваем установочный пакет percona wget https://repo.percona.com/apt/percona-release_latest.generic_all.deb # Устанавливаем его через dpkg: dpkg -i percona-release_latest.generic_all.deb # Обновляем информацию о пакетах: apt update # Включаем репозиторийна установку Percona XtraDB Cluster: percona-release setup pxc80 # Устанавливаем кластер: apt install -y percona-xtradb-cluster
В процессе установке нужно будет установить пароль root на MySQL. Эти действия необходимо выполнить на каждой ноде кластера.
Конфигурирование кластера
У нас имеется три виртуальных машины в локальной сети 10.20.30.0/24:
Node | Host | IP |
---|---|---|
Node 1 | pxc1 | 10.20.30.2 |
Node 2 | pxc2 | 10.20.30.3 |
Node 3 | pxc3 | 10.20.30.4 |
# Останавливаем Percona. После новой установки он не стартует сам. # Это необходимо сделать, если вы запускали сервер вручную самостоятельно. service mysql stop # Отредактируем файл конфигурации, в Debian or Ubuntu это /etc/mysql/mysql.conf.d/mysqld.cnf: # Указываем в переменной через запятую состав кластера. wsrep_cluster_address=gcomm://10.20.30.2,10.20.30.3,10.20.30.4 # Конфигурируем ноду 1. # Требуется указать имя ноды и её IP адрес # Остальные параметры можно оставить определенными по-умолчанию. wsrep_node_name=pxc1 wsrep_node_address=10.20.30.2 # Для ноды 2 wsrep_node_name=pxc2 wsrep_node_address=10.20.30.3 # Для ноды 3 wsrep_node_name=pxc3 wsrep_node_address=10.20.30.4
По сути настройки всех нод аналогичные, разницы между ними нет. В файле конфигурации следует указать список всех участников и для каждой ноды - ее IP адрес и имя. Есть еще настройки для шифрования трафика, но их пока оставляем за пределами этой заметки.
Стартуем кластер
В результате на текущий момент у нас имеется три одинаковых по характеристикам и настройкам сервера с установленным и выключенным mysql percona clister. pxc1 для подключения и подключаем остальные две (2 и 3) к первой.
bootstap-им первую ноду
# Стартуем (bootstap-им первую ноду) # Нода в этот момент находится в режиме для подключения, она не смотрит в сформированный нами конфиг # и выставляет переменную wsrep_cluster_conf_id в 1 root@pxc1:~# systemctl start mysql@bootstrap.service systemctl start mysql@bootstrap.service
Смотрим в mysql на первой ноде, что происходит:
mysql> show status like 'wsrep%'; | wsrep_cluster_size | 1 | | wsrep_cluster_state_uuid | 67682be6-fb38-11ed-aa0e-1a0b1104418d | | wsrep_cluster_status | Primary | | wsrep_connected | ON | | wsrep_local_bf_aborts | 0 | | wsrep_local_index | 2 | | 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> (modified by Percona <https://percona.com/>) | | wsrep_provider_version | 4.14(779b689) | | wsrep_ready | ON | | wsrep_thread_count | 9 | +----------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------+ 79 rows in set (0.01 sec)
Видим, что первая нода работает и ждет подключений остальных.
Стартуем вторую ноду
root@pxc2:~# service mysql start
service mysql start
mysql> show status like 'wsrep%'; .... | wsrep_cluster_conf_id | 4 | | wsrep_cluster_size | 2 | | wsrep_cluster_state_uuid | 67682be6-fb38-11ed-aa0e-1a0b1104418d | | 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> (modified by Percona <https://percona.com/>) | | wsrep_provider_version | 4.14(779b689) | | wsrep_ready | ON | | wsrep_thread_count | 9 | +----------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------+ 79 rows in set (0.00 sec)
Видим, что в составе ноды появился второй участник, на это указывает параметр wsrep_cluster_size, равный 2. Аналогично добавляем третью ноду.
Добавляем ноду 3
# Добавляем ноду 3 # root@pxc3:~# service mysql start service mysql start
Скорее всего, что нода так же добавится и параметр wsrep_cluster_size установится в 3. У меня именно так и произошло, но после нескольких попыток.
Переключение первой ноды в обычный режим
Все это хорошо, но кластер сейчас в режиме добавления. И нам нужно переключить первую ноду в обычный режим и проверить его работу кластера, ради чего все затевалось то?
# На первой ноде останавливаем bootstrap # root@pxc1:~# systemctl stop mysql@bootstrap.service systemctl stop mysql@bootstrap.service # Теперь стартуем mysql в обычном режиме # root@pxc1:~# systemctl start mysql systemctl start mysql
Включение кластера
mysql> show status like 'wsrep%'; | wsrep_cluster_size | 3 | | wsrep_cluster_state_uuid | 67682be6-fb38-11ed-aa0e-1a0b1104418d | | 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> (modified by Percona <https://percona.com/>) | | wsrep_provider_version | 4.14(779b689) | | wsrep_ready | ON | | wsrep_thread_count | 9 | +----------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------+ 79 rows in set (0.00 sec) mysql>
Видим два параметра: wsrep_cluster_size 3 и текущее состояние кластера wsrep_cluster_state_uuid, он должен совпадать на всех нодах кластера, проверяем это от 1 до 3.
Проверка репликации кластера на тестовой БД
На первой ноде выполняем команду в mysql:
# На первой ноде выполняем команду в mysql pxc1: mysql> CREATE DATABASE tempo; CREATE DATABASE tempo;
На второй ноде:
# На второй ноде выполняем команду в mysql pxc2: mysql> USE tempo; mysql> USE tempo; Database changed
На третьей ноде выполняем команду в mysql:
# На третьей ноде выполняем команду в mysql pxc3: mysql> CREATE TABLE tempo.example (node_id INT PRIMARY KEY, node_name VARCHAR(30)); mysql> CREATE TABLE tempo.example (node_id INT PRIMARY KEY, node_name VARCHAR(30)); Query OK, 0 rows affected (7.60 sec)
Теперь снова на первой ноде выполняем команду в MySQL
# На первой ноде выполняем команду в mysql pxc1: mysql> INSERT INTO tempo.example VALUES (1, 'pxc1'); mysql> INSERT INTO tempo.example VALUES (1, 'pxc1'); Query OK, 1 row affected (1.35 sec)
Как видим, наш кластер живет и работает неплохо. Теперь можно заливать в него БД…