📊 Как настроить кластер MariaDB Galera в Ubuntu 18.04, 18.10 и 16.04

Из этого туториала вы узнаете, как настроить кластер MariaDB Galera на сервере Ubuntu 18.04, 18.10 и 16.04.

MariaDB является бесплатной альтернативой сервера базы данных MySQL.

Что такое Galera Cluster?

Ранее я говорил о репликации мастер-слейв в MariaDB.

Это настройка, в которой изменения данных на главном сервере будут реплицироваться на ведомый, но изменения на ведомом не будут реплицироваться на ведущий.

Galera Cluster — это синхронный многоузловой кластер для серверов баз данных MySQL, MariaDB и Percona, обеспечивающий высокую производительность и высокую доступность для возврата данных.

Мультимастерный кластер позволяет выполнять чтение и запись на любом узле кластера.

Изменения данных на любом узле реплицируются на все остальные узлы.

Кластер Galera — это технология репликации и кластеризации данных с открытым исходным кодом, разработанная финской компанией Codership.

Существует 3 версии Galera Cluster:

  • Galera кластер для MySQL: оригинальная Galera, разработанная Codership
  • cluster MariaDB Galera: форк Codership Galera
  • cluster Percona XtraDB: еще один форк Codership Galer

В этом уроке мы будем использовать MariaDB Galera cluster.

Особенности и преимущества MariaDB Galera Cluster

  • Высокая доступность. В случае сбоя какого-либо отдельного узла в кластере другие узлы могут продолжать предоставлять услуги без необходимости ручных процедур отработки отказа.
  • Высокая согласованность данных. Кластер Galera использует синхронную репликацию, поэтому между узлами не допускается задержка ведомого устройства или расходящиеся данные, и данные не теряются после сбоя узла. Транзакции совершаются в одинаковом порядке на всех узлах.
  • Чтение и запись в любой узел кластера. Кластер действует как автономный сервер MariaDB.
  • И чтение и запись масштабируется. Не нужно разделять чтение и запись на разных узлах.
  • Автоматический контроль членства. Неудачные узлы удаляются из кластера.
  • Автоматическая подготовка узла. Нет необходимости вручную сбрасывать базу данных и импортировать ее на новые узлы.
  • Многопоточный ведомый узел, параллельная репликация, на уровне строк
  • Прозрачный для приложений. Прямые клиентские подключения.
  • Меньшие задержки клиента

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

Кластер Galera хорошо работает как в локальных, так и в глобальных сетях.

Вы можете иметь узлы в облаке, даже на небольших экземплярах сервера, в нескольких центрах обработки данных и на разных континентах.

Вместе с инструментом синхронизации файлов, таким как Resilio Sync, и службой балансировки нагрузки anycast CDN +, такой как Clouflare, владельцы веб-сайтов могут максимально приблизить свое содержимое к посетителям независимо от того, где находятся посетители.

Предварительные условия настройки кластера Galera в Ubuntu

Сколько узлов вы должны поместить в кластер?

Нет верхнего предела, но вы всегда должны выбирать нечетное число: 3, 5, 7 и т. д., чтобы предотвратить проблему расщепления мозга, о которой я расскажу в следующей статье.

Для кластера Galera требуется как минимум 3 узла, которые должны быть защищены от сбоев.

Чтобы следовать этому руководству, вам понадобится как минимум 3 сервера базы данных MariaDB, работающих на Ubuntu, каждый сервер должен иметь как минимум 512 МБ ОЗУ.

Используйте 1 ГБ ОЗУ или более на каждом сервере для бесперебойной работы и повышения производительности.

Рекомендуется использовать одинаковую конфигурацию оборудования на каждом узле, поскольку кластер будет работать так же медленно, как и самый медленный узел.

В этом уроке я использую 3 Linode VPS (виртуальный частный сервер) в 3 разных центрах обработки данных (Фримонт, Франкфурт и Сингапур), поэтому моя база данных будет по-прежнему доступна в случае сбоя питания или проблем с сетью в одном из дата-центры.

Вы можете установить сервер MariaDB из репозитория Ubuntu по умолчанию или установить последнюю версию из репозитория mariadb.org, и рекомендуется установить ту же версию на свои серверы.

Примечание: 1) Кластер Galera работает только на Linux и Unix-подобных ОС. Microsoft Windows не поддерживается. 2) Если ваш кластер Galera охватывает континенты, будет задержка от 100 до 300 мс. Задержка между моими 3 серверами составляет около 165 мс. Я также обнаружил, что иногда задержка IPv6 значительно выше, чем задержка IPv4, а в других случаях задержка IPv4 ниже, чем задержка IPv6.

Все серверы MariaDB должны использовать механизм хранения InnoDB или XtraDB, поскольку кластер Galera поддерживает только эти два механизма хранения.

Любые записи в таблицы других механизмов не будут реплицироваться на другие узлы.

Чтобы проверить механизмы хранения по умолчанию, используемые вашей базой данных, войдите в MariaDB и выполните следующую инструкцию:

MariaDB [(none)]> show variables like 'default_storage_engine';

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

Чтобы проверить, выполните следующую инструкцию.

Замените «database_name» на ваше реальное имя базы данных.

MariaDB [(none)]> select table_name,engine from information_schema.tables where table_schema = 'database_name' and engine = 'myISAM';

Если вы нашли таблицу с использованием механизма хранения, отличного от InnoDB, вы можете изменить его на InnoDB.

Например, чтобы изменить таблицу с MyISAM на InnoDB, запустите:

MariaDB [(none)]> use database_name;

MariaDB [(none)]> alter table table_name engine = InnoDB;

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

Таблицы в трех базах данных по умолчанию (information_schema, mysql и performance_schema) не используют механизм хранения InnoDB / XtraDB, и его не нужно менять.

Шаг 1: Настройка каждого узла в кластере

До версии MariaDB 10.1 системным администраторам необходимо установить пакет mariadb-galera-server для настройки кластера.

Начиная с MariaDB 10.1, функция кластера Galera включена в MariaDB.

Если на Ubuntu 18.04 работает MariaDB 10.1 или более поздней версии, вам просто нужно установить еще один пакет: galera-3 — библиотека поставщика Galera wsrep (write-set replication).

sudo apt install galera-3

Обычно этот пакет устанавливается автоматически при установке сервера MariaDB в Ubuntu.

Теперь выполните следующую команду, чтобы отредактировать основной файл конфигурации MariaDB на каждом узле.

(Если файл 50-server.cnf не существует на вашем сервере Ubuntu, отредактируйте файл конфигурации /etc/mysql/my.cnf или /etc/my.cnf.)

sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf

Добавьте следующие конфигурации в блок [mysqld].

[mysqld]
# Galera Cluster configurations
wsrep_on = ON
wsrep_provider = /usr/lib/galera/libgalera_smm.so
wsrep_cluster_address = "gcomm://IP_address_of_node1,IP_address_of_node2,IP_address_of_node3"
default_storage_engine = InnoDB
binlog_format = row
innodb_autoinc_lock_mode = 2
innodb_force_primary_key = 1
innodb_doublewrite = 1

При желании вы можете добавить следующие строки в [mysqld] unit.

wsrep_cluster_name = MyCluster
wsrep_node_name = MyNode1
wsrep_node_address = "IP_address_of_this_node"
innodb_flush_log_at_trx_commit=0

Если вы работаете с сервером MariaDB 10.1, вам также необходимо добавить следующую строку, чтобы отключить транзакции XA, потому что она не поддерживается Galera.

innodb_support_xa = 0

Если вы запускаете MariaDB 10.3, вам не следует добавлять эту строку, потому что она включена по умолчанию и не может быть отключена.

Говорят, что он полностью поддерживается в кластере MariaDB 10.4 Galera.

И вы должны закомментировать следующую строку или изменить адрес bind на 0.0.0.0, чтобы сервер MariaDB также прослушивал общедоступный IP-адрес, чтобы он мог взаимодействовать с другими узлами.

bind-address = 127.0.0.1

Сохраните и закройте файл. Не перезагружайте сервер MariaDB сейчас.

Шаг 2: Открытие сетевых портов в брандмауэре

Кластер Galera требует постоянной связи между всеми узлами из-за использования синхронной репликации, и они взаимодействуют друг с другом, используя следующие порты TCP.

  • 3306 (стандартный порт MariaDB)
  • 4444 (SST порт)
  • 4567 (порт репликации)
  • 4568 (IST port)

Необходимо настроить брандмауэр, чтобы разрешить трафик на эти порты с IP-адресов узлов кластера.

Если вы используете UFW, вы можете запустить следующие команды на каждом узле.

sudo ufw insert 1 allow in from IP_Address_of_node1 

sudo ufw insert 1 allow in from IP_Address_of_node2 

sudo ufw insert 1 allow in from IP_Address_of_node3

Если вы используете iptables, выполните следующие команды.

sudo iptables -I INPUT -p tcp --source IP_address_of_node1 -j ACCEPT

sudo iptables -I INPUT -p tcp --source IP_address_of_node2 -j ACCEPT

sudo iptables -I INPUT -p tcp --source IP_address_of_node3 -j ACCEPT

Шаг 3: Настройка AppArmor для mysqld

AppArmor по умолчанию включен в Ubuntu и может блокировать связь на нестандартных портах MariaDB, не давая кластеру Galera работать, поэтому нам нужно добавить политику AppArmor, чтобы MariaDB открывала дополнительные нестандартные порты:

cd /etc/apparmor.d/disable/

sudo ln -s /etc/apparmor.d/usr.sbin.mysqld

sudo systemctl restart apparmor

Обратите внимание, что серверный пакет MariaDB для Ubuntu теперь поставляется с пустым профилем AppArmor (/etc/apparmor.d/usr.sbin.mysqld), что фактически отключает AppArmor для MariaDB, поэтому вам больше не нужно запускать вышеуказанные команды.

Шаг 4: Запуск кластера

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

Выберите узел с базой данных в качестве первого узла и остановите сервер MariaDB на первом узле.

sudo systemctl stop mariadb

Затем выполните следующую команду, чтобы запустить основной компонент на первом узле.

(Примечание. Если сначала вы не остановите MariaDB, то следующая команда не имеет никакого эффекта.)

sudo galera_new_cluster

Теперь вы можете войти в монитор MariaDB.

mysql -u root -p

И проверьте размер кластера.

show status like 'wsrep_cluster_size';

Вы увидите, что в кластере есть только 1 узел.

Чтобы добавить другие узлы в кластер, просто перезапустите сервер MariaDB на других узлах.

(Примечание: если другие узлы имеют другие базы данных, эти базы данных будут удалены. Будут существовать только базы данных с первого узла.)

sudo systemctl restart mariadb

Выполнение этой команды может занять некоторое время, потому что, когда новые узлы присоединяются к кластеру, им необходимо выполнить передачу состояния моментального снимка (SST), то есть скопировать базы данных с первого узла, который может потреблять много оперативной памяти и пропускной способности. Вы можете проверить журнал SST с:

sudo journalctl -eu mariadb

После того, как два других узла успешно присоединились к кластеру, размер кластера изменится на 3.

Если вы импортируете новую базу данных на любом из узлов сейчас, эта база данных будет реплицирована на другие узлы.

Чтобы проверить, синхронизированы ли изменения данных, выполните следующую инструкцию на мониторе MariaDB.

show status like 'wsrep_local_state_comment';

Вы можете проверить статус другой Galera с:

show status like 'wsrep%';

Если какой-либо из узлов, в том числе первый, выйдет из строя и будет удален из кластера в результате, вам просто нужно перезапустить сервер MariaDB, и сбойный узел снова присоединится к кластеру.

Вы не должны снова запускать команду sudo galera_new_cluster, если только кластер не завершит работу (все узлы в кластере отключены).

Сбрасывание узла из кластера MariaDB Galera

Сначала войдите в монитор MariaDB и выполните следующую инструкцию:

show status like 'wsrep_local_state_comment';

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

sudo systemctl stop mariadb

На двух других узлах выполните следующую инструкцию на мониторе MariaDB.

show status like 'wsrep%';

Значение wsrep_cluster_size меняется на 2, и IP-адрес удаленных узлов больше не указывается в wsrep_incoming_address, что указывает на то, что узел был успешно удален.

Чтобы присоединиться к кластеру, просто перезапустите MariaDB снова.

sudo systemctl restart mariadb

Если вы не хотите, чтобы узел снова присоединялся к кластеру, удалите связанные с Galera настройки в основном файле конфигурации и перезапустите MariaDB.

Добавление новых узлов в кластер

Для кластера Galera требуется как минимум 3 узла для обеспечения безопасности при сбое, поэтому рекомендуется добавить больше узлов в кластер, чтобы сделать его более устойчивым.

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

  • Добавьте конфигурации Galera в файл 50-server.conf на новых узлах, откройте сетевой порт в брандмауэре и обновите политику AppArmor.
  • Добавьте IP-адреса новых узлов в переменную wsrep_cluster_address на каждом узле.
  • Перезапустите сервер MariaDB на существующих узлах в кластере один за другим. (Перезапустите следующий сервер MariaDB только после того, как предыдущий перезапустил.)
  • Перезапустите сервер MariaDB на новых узлах, чтобы они могли присоединиться к кластеру.

Подсказка: всегда устанавливайте нечетное количество узлов в кластере Galera.

Завершение работы или перезапуск кластера MariaDB Galera

Кластер исчезает, когда все узлы одновременно отключены.

Чтобы завершить работу кластера, необходимо закрыть все узлы.

Во-первых, убедитесь, что ваше приложение не использует базу данных, а wsrep_local_state_comment синхронизирован.

Затем выключите сервер MariaDB один за другим.

Чтобы перезапустить кластер Galera, выполните следующую команду на последнем узле, чтобы покинуть кластер.

sudo galera_new_cluster

Затем запустите сервер MariaDB на других узлах один за другим.

sudo systemctl start mariadb

 

cryptoparty

Cryptography is typically bypassed, not penetrated.

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

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

5e7fa976b0640d40