Установка и настройка Percona XtraDB Cluster на Centos7/Ubuntu14

Разработчик продукта рекомендует использовать минимум 3 ноды для создания кластера(причины описаны в статье). С целью знакомства с этим продуктом использовалось две ноды на виртуальных машинах.

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

Centos

Подключаем EPEL-репозитарий(если он еще не был подключен)

Устанавливаем пакет, необходимій для Percona XtraDB Cluster

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

 

Отклчаем SELinux, если он включен

 

Ubuntu

Отключаем Apparmor для mysql

 

Порты,которые используются по умолчанию

Открываем в iptables следующие порты 3306, 4444, 4567 and 4568

3306 – подключение клиентов к MySQL-серверу (если клиенты подключаются удаленно, а не локально)

4567 – порт для групповой коммуникации  — может быть изменен опцией

4444 – порт для State Snapshot Transfer (SST) — может быть изменен опцией

4568 – порт для Incremental State Transfer(IST) – по умолчанию его значение выбирается, как значение порта для групповой коммуникации(4567) + 1 т.е 4568

Может быть изменен опцией

 

В качестве метода State Snapshot Transfer (SST) используется xtrabackup.

При добавлении новой ноды в кластер она будет подключаться к существующей/донорской ноде в кластере и снимать с нее бекап с помощью xtrabackup и копировать этот бекап к себе с помощью socat

Нода получает изменения от донорской ноды через механизм SST(state snapshot transfer)или   IST(incremental snapshot transfer). Если добавляется новая нода в кластер, то применяется SST-создается полная копия с существующей ноды. Существует три способа получения такой копии

Mysqldump, rsync, xtrabackup.

 

Недостатком mysqldump и rsync является то, что на время снятия бекапа с донорской ноды, все таблицы донорской ноды блокируются на запись (SST использует FLUSH TABLES WITH READ LOCK).

В отличии от mysqldump и rsync, Xtrabackup не накладывает такую блокировку(за исключением,когда снимает бекап таблиц schemas и НЕ InnoDB таблиц)

 

IST-инкрементный бекап используется тогда, когда нода отсутствовала в кластере непродолжительное время — state UUID добавляемой ноды такой же, как и на донорской ноде И все пропущенные/недостающие изменения (write-set) доступны в кеше донорской ноды. Количество изменений, которое донорская нода хранит в своем кеше определяется параметром gcache.size – размером системной памяти, выделяемой для хранения таких изменений(параметр настраивается в конфигурационном файле). Т.е донорская нода определенное кол-во изменений сохраняет у себя в буфере и способна отдать эти изменения на недолго отсутствующую в кластере ноду из этого кеша/буфера. Если размер таких изменений превосходит размер, определенный параметром gcache.size, то снимается с донорской ноды полный бекап.

 

Например, на добавляемой ноде состояние, на котором остановилась нода

А на донорской ноде/всех остальных нодах

Т.е state UUID одинаковы 5a76ef62-30ec-11e1-0800-dba504cf2aab

(выполняется первое условие для IST)

Теперь донорская нода проверяет свой кеш на наличие write-set с номером(sequence number – seqno 197223). Если он обнаруживается, значит использует инкрементный бекап(IST). Если не обнаруживается – полный (SST)

 

Нода считается недоступной и будет выброшена с кластера, если она не отвечает в течение времени, установленного параметром

(по умолчанию 5 секунд)

Этот параметр можно узнать из вывода всех настроек командой

Если в кластере используется только 2 ноды и одна из них теряет связь с другой нодой, то обе ноды переходит в режим No-Primary — перестают принимать запросы для предотвращения нарушения консистентности данных(split-brain)

Т.к в случае использования двух нод и недоступности их друг друга, кворум на этих нодах будет ½ (50%) – ОДИНАКОВЫМ на обеих нодах, что не позволяет выбрать первичную(главную) ноду

Если, например, используется кластер из трех нод и при этом одна нода теряет связь с остальными, то у оставшихся двух нодах, которые доступны между собой кворум будет 2/3(66%), а у проблемной ноды 1/3(33%). Нода, которая имеет наименьший кворум перестанет обрабатывать запросы — проблемная нода перестанет принимать запросы

 

Например, на второй ноде добавим правило для блокировки трафика между этими нодами

 

До добавления правила

После добавления правила и истечения 5 секунд(evs.suspect_timeout) статус ОБОИХ нод изменится на non-Primary

После чего использование mysql становится невозможным

Теоретически можно изменить пару параметров

По умолчанию они имеют такие значения

Но это может привесте к рассогласованию/неконсистенции данных на нодах

https://www.percona.com/blog/2012/07/25/percona-xtradb-cluster-failure-scenarios-with-only-2-nodes/

Поэтому при использовании только двух нод для репликации рекомендуется использовать Galera Arbitrator

http://galeracluster.com/documentation-webpages/arbitrator.html

 

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

После чего эта нода сможет обрабатывать все подключения.

После добавления бывшей проблемной ноды в кластер она вытянет все изменения с текущего донора (на котором устанавливали SET GLOBAL wsrep_provider_options=’pc.bootstrap=true’; )

 

Мониторинг кластера

 

Состояние ноды в кластере

Состояние ноды

Конфликты репликации

Сообщения управления

Большие очереди репликации

 

Метрики

Размеры очереди

Управление потоком

Количество входящих и исходящих транзакций на ноде

Количество байт входящих и исходящих транзакций

Конфликты репликации

 

Настройка первой/донорской ноды(192.168.1.82)

 

Если используется xtrabackup в качестве метода SST, То создаем пользователя с необходимыми правами.

Если используется mysqldump в качестве SST/IST, то необходимо указывать пользователя/пароль  root mysql в параметре wsrep_sst_auth

Если используется метод rsync, то этот метод не требует указания логина/пароля в параметре wsrep_sst_auth

 

Создаем пользователя с необходимымы правами

 

Основная/Донорская нода запускается командой

Centos

В дальнейшем все ноды запускаются через

 

Ubuntu

Все параметры аналогично параметрам в Centos за исключением нахождения библиотеки Galera

Основная/Донорская нода запускается командой

В дальнейшем все ноды запускаются через

Если необходимо остановить уже запущенную службу MySQL

 

Вывод всех переменных

 

Самые важные параметры

 

Настройка второй ноды(192.168.1.83)

Запуск второй ноды

После подключения второй ноды смотрим параметры(они одинаковы на всех нодах кластера)

Например, на второй ноде

 

 

Проверяем репликацию

На второй ноде создаем пустую базу

Проверем ее наличие на первой

На первой ноде вливаем дамп в вновь созданную базу

В логах на первой ноде видно, что репликация для myisam таблиц выключена

Включаем репликация myisam на обоих нодах

Останавливаем вторую ноду

Перезапускаем первую ноду

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

Проверка текущего состояния ноды

 

Больше по мониторингу статистики Percona XtraDB Cluster

https://www.percona.com/blog/2012/11/26/realtime-stats-to-pay-attention-to-in-percona-xtradb-cluster-and-galera/

 

Источник:

https://www.percona.com/doc/percona-xtradb-cluster/5.6/index.html

https://www.percona.com/blog/2012/07/25/percona-xtradb-cluster-failure-scenarios-with-only-2-nodes/

http://habrahabr.ru/post/152969/

 

Комментирование и размещение ссылок запрещено.

Комментарии закрыты.

Яндекс.Метрика