
Установка 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
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%';
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%';
После этого, идем на 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. Очень доволен данным кластером.
Спасибо за пост.
Пожалуйста, уточните пожалуйста что нужно (конкретная цель). Просто много переменных имеется и для разных целей. Постараюсь выложить новую статью о данной теме, но попозже.
Спасибо за пост.
Не подскажите как проверить распределение между mysql — ами
Thanks for the post. I used similar post for installation. Did you made some performance tests(high load) ? Thanks in advance.
You are welcome, I didn’t make any performance tests(high load), but I will do it soon.
Только начал читать и обратил внимание: «1 виртуальную машину с ОС – CentOS и 2 виртуальной машины с Ubuntu». А выводе консоли — 2 CentOS’а.
А так за статью спасибо, очень полезная заметка! Беру в закладки 😉
«wsrep_cluster_address = gcomm:// – это строка, которая говорит … потом мы добавим еще другие ноды. Но для начала нужно именно так!»
На самом деле это нужно для того, чтобы развернуть (bootstrap) кластер. А строка пустая т.к. это первая нода и ты сообщаешь ей что ей НЕ нужно ни с кем синкаться, ты его просто деплоишь. А при добавлении следующих, они уже должны синкаться с первой. Она будет вроде мастера. Когда добавляешь остальные, и меняешь на мастере строку со всеми адресами, она становиться равнозначным членом реплики. Вобщем как-то так.
В MySQL Config: node2 ошибка?
# Node #2 address
wsrep_node_address = 97.79.237.17 должно быть 97.79.237.16
Да, допустил ошибку при написании данного руководства, исправил и сейчас все нормально. Спасибо!
Здравствуйте, как сделать управляющей 2-ю ноду?
На slave(new master), используйте «CHANGE MASTER TO» команду чтобы подключиться к старому master серверу и запустить новую мастер-ноду, например:
Запускаем:
Спасибо большое за ответ!
Но я новичок в этом деле )) Так и не понял как мне это применить правильно. Дело в том что я делаю курсовую и у меня такое задание:
-Установить три разных сервера 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.