Установка Percona XtraDB Cluster

Установка Percona XtraDB Cluster

Percona XtraDB Cluster (PXC) является кластером с высокой доступностью и высокой масштабируемостью, решение для MySQL кластеризации. Percona сервера, Percona XtraBackup и Galera library служит для обеспечения высокой доступности объединеных друг с другом серверов, как PXC. Это обеспечивает синхронную, Multi-Master и параллельную репликации. Все узлы (nodes) этого кластера готовы работать и отвечать на запросы чтение / запись одновременно. Сейчас, я хотел бы написать данную статью «Установка Percona XtraDB Cluster» в виде заметки.

ВМ используется для тестирования. Здесь я использовал 1 виртуальную машину с ОС — CentOS и 2 виртуальной машины с Ubuntu. В реальном мире не смешивайте различные ОС в кластер. Это только для тестовых целей. Все узлы должны быть с единой ОС и той же конфигурации аппаратных средств / программного обеспечения.

И так, у меня имеется:

CentOS19        97.79.237.19           node1
CentOS16        97.79.237.16           node2
Ubuntu17        97.79.237.17           node3

Добавление репозитория для необходимой ОС.

Проверим какая у нас разрядность:

# uname -a

Centos/Redhat 32 бит (i386):

# yum install http://www.percona.com/downloads/percona-release/percona-release-0.0-1.i386.rpm

Centos/Redhat 64 бит (x86_x64):

# yum install http://www.percona.com/redir/downloads/percona-release/percona-release-0.0-1.x86_64.rpm

Установка PXC (кластера на перкона):

# yum install Percona-XtraDB-Cluster-56

Иногда требуется установка socat.
Для начала подключаем репозиторий EPEL и после чего выполняем:

$ yum install socat
$ yum install Percona-XtraDB-Cluster-56

Проверим работает ли mysql:

# ps -ef | grep mysql

root     22706 19675  0 08:17 pts/0    00:00:00 grep mysql

Так же можно установить на Debian/Ubuntu:

1. Способ.
Для начала добавляем клюк с репозиторием:

$ sudo apt-key adv --keyserver keys.gnupg.net --recv-keys 1C4CBDCDCD2EFD2A

Нужно добавить в файл /etc/apt/sources.list репозиторий:

# vim /etc/apt/sources.list

Добавляем:

[...]
deb http://repo.percona.com/apt raring main
deb-src http://repo.percona.com/apt raring main
[...]

Обновляем локальный кеш:

$ sudo apt-get update

Устанавливаем PXC:

$ sudo apt-get install percona-xtradb-cluster-56

Проверяем:

$ ps -ef | grep mysql

2. Способ.
Скачиваем готовые пакеты:

# cd /usr/local/src
# wget http://www.percona.com/redir/downloads/percona-release/debian/percona-release_0.1-3.squeeze_all.deb

или

# wget http://www.percona.com/redir/downloads/percona-release/debian/percona-release_0.1-3.wheezy_all.deb

После чего устанавливаем. Мне на данный момент не сильно это нужно было, по этому я рассказал и собрал материал в кучу ( если понадобится попозже, я переделаю и дополню данную статью). Если есть вопросы, пишите, я попробую помочь.

MySQL Config: node1

[root@Centos19 ~]# mysql -uroot -p

mysql@percona1> CREATE USER 'sstuser'@'localhost' IDENTIFIED BY 'your_passwd_for_user_sstuser';
mysql@percona1> GRANT RELOAD, LOCK TABLES, REPLICATION CLIENT ON *.* TO 'sstuser'@'localhost';
mysql@percona1> FLUSH PRIVILEGES;

и

[root@Centos19 ~]# vim /etc/my.cnf

[mysqld]

datadir=/var/lib/mysql
user=mysql

# Path to Galera library
wsrep_provider=/usr/lib64/libgalera_smm.so

# Cluster connection URL contains the IPs of node#1, node#2 and node#3
#wsrep_cluster_address = gcomm://97.79.237.19,97.79.237.16,97.79.237.17
wsrep_cluster_address = gcomm://

#In order for Galera to work correctly binlog format should be ROW
binlog_format=ROW

# MyISAM storage engine has only experimental support
default_storage_engine=InnoDB

# This changes how InnoDB autoincrement locks are managed and is a requirement for Galera
innodb_autoinc_lock_mode=2

# Node #1 address
wsrep_node_address=97.79.237.19

# SST method
wsrep_sst_method=xtrabackup-v2

# Cluster name
wsrep_cluster_name=PXC

# Authentication for SST method
wsrep_sst_auth="sstuser:your_passwd_for_user_sstuser"

wsrep_cluster_address = gcomm:// — это строка, которая говорит нам что мы пытаемся создать кластер и 1-й инодой, потом мы добавим еще другие ноды. Но для начала нужно именно так!

wsrep_provider = /usr/lib/libgalera_smm.so — это путь где лежит библиотека для 32 битной ОС

wsrep_provider = /usr/lib64/libgalera_smm.so — это путь где лежит библиотека для 64 битной ОС

По этому в зависимости от розрядности вашей ОС поправьте путь, у меня х64 бит.

Начальная загрузка кластера:

[root@Centos19 ~]# /etc/init.d/mysql bootstrap-pxc
запуск node на percona cluster

запуск node на percona cluster

mysql> show global status like '%wsrep_cluster%';

смотрим статус кластера

MySQL Config: node2

root@CentOS16:~# vim /etc/my.cnf

Прописываем:

# Percona Cluster config file
[mysqld]

datadir=/var/lib/mysql
user=mysql

# Cluster name
wsrep_cluster_name = PXC

# Path to Galera library
wsrep_provider = /usr/lib64/libgalera_smm.so

# Cluster connection URL contains the IPs of node#1, node#2 and node#3
wsrep_cluster_address = gcomm://97.79.237.19,97.79.237.16,97.79.237.17

# In order for Galera to work correctly binlog format should be ROW
binlog_format=ROW

# MyISAM storage engine has only experimental support
default_storage_engine=InnoDB

# This changes how InnoDB autoincrement locks are managed and is a requirement for Galera
innodb_autoinc_lock_mode=2

# Node #2 address
wsrep_node_address = 97.79.237.16

# SST method
wsrep_sst_method=xtrabackup-v2

# Authentication for SST method
wsrep_sst_auth="sstuser:your_passwd_for_user_sstuser"

Запускаем Mysql в кластере:

root@CentOS16:~# /etc/init.d/mysql start

Выводим статус кластера:

# mysql -uroot -p
mysql> show global status like '%wsrep_cluster%';

2 ноды в кластере

MySQL Config: node3

root@Ubuntu17:~# vim /etc/mysql/my.cnf

Прописываем:

# Percona Cluster config file
[mysqld]

datadir=/var/lib/mysql
user=mysql

# Cluster name
wsrep_cluster_name = PXC

# Path to Galera library
wsrep_provider = /usr/lib64/libgalera_smm.so

# Cluster connection URL contains the IPs of node#1, node#2 and node#3
wsrep_cluster_address = gcomm://97.79.237.19,97.79.237.16,97.79.237.17

# In order for Galera to work correctly binlog format should be ROW
binlog_format=ROW

# MyISAM storage engine has only experimental support
default_storage_engine=InnoDB

# This changes how InnoDB autoincrement locks are managed and is a requirement for Galera
innodb_autoinc_lock_mode=2

# Node #3 address
wsrep_node_address = 97.79.237.17

# SST method
wsrep_sst_method=xtrabackup-v2

# Authentication for SST method
wsrep_sst_auth="sstuser:your_passwd_for_user_sstuser"

Запускаем кластер:

root@Ubuntu17:~# /etc/init.d/mysql start

Проверяем статус кластера:

mysql> show global status like '%wsrep_cluster%';

3 ноды на кластера percona

После этого, идем на node1 (самый первый сервер) и меняем строчку:

# vim /etc/my.cnf

Ищем:

wsrep_cluster_address = gcomm://

Меняем на:

wsrep_cluster_address = gcomm://97.79.237.19,97.79.237.16,97.79.237.17

После чего перезапускаем сервер с первой нодой:

# service mysql restart

Выполняем тест репликации:

root@CentOS16:~# mysql -e "create database testing"
root@CentOS16:~# mysql -e "create table testing.city (id int, cname varchar(20));"
root@Ubuntu17:~# mysql -e "insert into testing.city values (1,'Hyderabad')"

Проверим статус кластера и поглядим, работате ли все нормально:

[root@Centos19 ~]# mysql -e "show global status like '%wsrep_cluster%';"

все ноды в кластере на перкона

[root@Centos19 ~]# mysql -e "select * from testing.city"

И должна вывести столбцы данной базы (testing).

Удаление Percona Cluster

Чтобы удалить перкону, стоит выполнить команду:

# yum remove Percona-XtraDB-Cluster*
# yum remove percona*
# yum remove mysql55w-libs

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

Вывод:

Percona XtraDB кластера является хорошим инструментом для обеспечения высокой нагрузки. Percona сервера, Percona XtraBackup и Galera Cluster объединены друг с другом. Выключите несколько узлов и посмотрите, как можно их восстановить.

Вот и все, я завершил «Установка Percona XtraDB Cluster», проверялось на 3 нодах с CentOS. Очень доволен данным кластером.

13 thoughts on “Установка Percona XtraDB Cluster

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

  1. Спасибо за пост.
    Не подскажите как проверить распределение между mysql — ами

  2. Только начал читать и обратил внимание: «1 виртуальную машину с ОС – CentOS и 2 виртуальной машины с Ubuntu». А выводе консоли — 2 CentOS’а.
    А так за статью спасибо, очень полезная заметка! Беру в закладки 😉

  3. «wsrep_cluster_address = gcomm:// – это строка, которая говорит … потом мы добавим еще другие ноды. Но для начала нужно именно так!»
    На самом деле это нужно для того, чтобы развернуть (bootstrap) кластер. А строка пустая т.к. это первая нода и ты сообщаешь ей что ей НЕ нужно ни с кем синкаться, ты его просто деплоишь. А при добавлении следующих, они уже должны синкаться с первой. Она будет вроде мастера. Когда добавляешь остальные, и меняешь на мастере строку со всеми адресами, она становиться равнозначным членом реплики. Вобщем как-то так.

    • Да, допустил ошибку при написании данного руководства, исправил и сейчас все нормально. Спасибо!

    • На slave(new master), используйте «CHANGE MASTER TO» команду чтобы подключиться к старому master серверу и запустить новую мастер-ноду, например:

      New_slave_server > CHANGE MASTER TO
        MASTER_HOST="$new_master_ip",
        MASTER_USER="repl",
        MASTER_PASSWORD="$slavepass",
        MASTER_PORT=3306,
        MASTER_LOG_FILE=’master-bin.001′,
        MASTER_LOG_POS=4;
        MASTER_AUTO_POSITION = 1;
      

      Запускаем:

      > START SLAVE;
      
      • Спасибо большое за ответ!

        Но я новичок в этом деле )) Так и не понял как мне это применить правильно. Дело в том что я делаю курсовую и у меня такое задание:

        -Установить три разных сервера Linux Debian. Сетевой интерфейс каждого из серверов выставить в режим «мост» с привязкой к реальной сетевой карте.

        -Установить на каждом из серверов percona-xtradb-cluster-56. Убедиться, что процесс mysql в системе активен.

        -Настроить кластер так, чтобы управляющей была вторая нода. За вторую ноду принять второй по увеличению ip-адрес, который будет выдан по dhcp. Например, первая нода имеет адрес 192.168.0.15, вторая нода: 192.168.0.18, и третья нода 192.168.0.20. В качестве управляющей ноды назначаем сервер с ip: 192.168.0.18.

        • IP для нод не играет никакой роли. Так же, не имеет никакой роли Unix/Linux ОС на которой кластер собирается, я специально привел пример с CentOS и Debian.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.