Начало работы с кластером MariaDB Galera
Самая последняя версия MariaDB 10.11:
MariaDB 10.11.4 Стабильная (GA) СкачатьСейчас
Альтернативная загрузка с mariadb.org
Текущие версии библиотеки поставщика wsrep Galera составляют 26.4.13 для Galera 4 и 25.3.37 для Galera 3.
Для удобства, пакеты, содержащие эти библиотеки, включены в репозитории MariaDB YUM и APT.
В настоящее время кластер MariaDB Galera поддерживает только движок хранения InnoDB (хотя есть экспериментальная поддержка MyISAM и, начиная с MariaDB 10.6, Aria).
Отличным ресурсом для пользователей Galera является список рассылки, управляемый разработчиками Codership. Его можно найти по адресу Codership на Google Groups. Если вы используете Galera, рекомендуется подписаться.
Поддержка кластера Galera в MariaDB Server
MariaDB Galera Cluster работает на основе:
- MariaDB Server.
- Платка MySQL-wsrep для MySQL Server и MariaDB Server, разработанная компанией Codership. В настоящее время патч поддерживает только системы на основе Unix.
- Библиотека поставщика wsrep Galera.
В MariaDB 10.1 и более поздних версиях патч MySQL-wsrep был интегрирован в MariaDB Server. Это означает, что функциональность MariaDB Galera Cluster может быть получена путем установки стандартных пакетов MariaDB Server и пакета библиотеки поставщика wsrep Galera. Следующая версия Galera соответствует каждой версии MariaDB Server:
- В MariaDB 10.4 и более поздних версиях MariaDB Galera Cluster использует Galera 4. Это означает, что патч MySQL-wsrep имеет версию 26, а библиотека Galera wsrep provider library - версию 4.
- В MariaDB 10.3 и более ранних версиях MariaDB Galera Cluster использует Galera 3. Это означает, что патч MySQL-wsrep имеет версию 25, а библиотека Galera wsrep provider library - версию 3.
См. Расшифровка номеров версий Galera для получения дополнительной информации о способах интерпретации этих номеров версий.
См. Что такое MariaDB Galera Cluster?: Версии Galera для получения дополнительной информации о том, какая конкретная версия Galera включена в каждый выпуск MariaDB Server.
В поддерживаемых сборках функциональность кластера Galera может быть включена путем установки некоторых параметров конфигурации, которые упомянуты ниже. Функциональность кластера Galera не включена в стандартной установке MariaDB Server, если явно не включена с помощью этих параметров конфигурации.
Предварительные условия
Требования к объему подкачки
Во время обычной работы узел MariaDB Galera не потребляет значительно больше памяти, чем обычный сервер MariaDB. Дополнительная память используется для индекса сертификации и наборов записей, которые еще не были подтверждены, но обычно это не заметно в типовом приложении. Однако есть одно исключение:
- Кэширование наборов записей во время передачи состояния. Когда узел получает передачу состояния, он не может обрабатывать и применять входящие наборы записей, потому что у него еще нет состояния, к которому можно применить эти наборы. В зависимости от механизма передачи состояния (например, mysqldump) узел, который отправляет передачу состояния, может также не иметь возможности применить наборы записей. Таким образом, им необходимо кэшировать эти наборы записей для фазы догоняющего процесса. В настоящее время наборы записей кэшируются в оперативной памяти, и если система испытывает недостаток оперативной памяти, либо передача состояния завершится неудачно, либо кластер заблокируется, ожидая завершения передачи состояния.
Для управления использованием памяти для кэширования наборов записей, проверьте параметры Galera: gcs.recv_q_hard_limit, gcs.recv_q_soft_limit, и gcs.max_throttle.
Ограничения
Перед использованием MariaDB Galera Cluster рекомендуется ознакомиться с известными ограничениями, чтобы убедиться, что оно подходит для вашего приложения.
Установка MariaDB Galera Cluster
Для использования MariaDB Galera Cluster необходимо установить два основных пакета:
- Версия MariaDB Server, поддерживающая Galera Cluster.
- Библиотека поставщика wsrep Galera.
Как упоминалось в предыдущем разделе, в MariaDB 10.1 и выше поддержка Galera Cluster фактически включена в стандартные пакеты MariaDB Server. Это означает, что установка MariaDB Galera Cluster аналогична установке стандартного пакета MariaDB Server в этих версиях. Однако вам также потребуется установить дополнительный пакет, чтобы получить библиотеку поставщика wsrep Galera.
Некоторые методы SST также могут потребовать установки дополнительных пакетов. Метод mariabackup обычно является лучшим вариантом для крупных кластеров, ожидающих большой нагрузки.
Установка MariaDB Galera Cluster с помощью менеджера пакетов
MariaDB Galera Cluster может быть установлен с помощью менеджера пакетов в Linux. Для этого ваша система должна быть настроена на установку из репозиториев MariaDB.
Вы можете настроить свой менеджер пакетов на установку из репозитория пакетов MariaDB Corporation, используя скрипт настройки MariaDB Package Repository.
Вы также можете настроить свой менеджер пакетов на установку из репозитория MariaDB Foundation, используя инструмент конфигурации репозитория MariaDB.
Установка MariaDB Galera Cluster с помощью yum/dnf
В дистрибутивах Linux, таких как RHEL, CentOS, Fedora и аналогичных, настоятельно рекомендуется установить соответствующие пакеты RPM из репозитория MariaDB с помощью yum или dnf. Начиная с RHEL 8 и Fedora 22, yum был заменён на dnf, который является следующей основной версией yum. Однако команды yum всё ещё работают на многих системах, использующих dnf.
Чтобы установить MariaDB Galera Cluster с помощью yum или dnf, следуйте инструкциям в Установка MariaDB Galera Cluster с помощью yum.
Установка MariaDB Galera Cluster с помощью apt-get
В дистрибутивах Linux, таких как Debian, Ubuntu и аналогичных, настоятельно рекомендуется установить соответствующие пакеты DEB из репозитория MariaDB с помощью apt-get.
Чтобы установить MariaDB Galera Cluster с помощью apt-get, следуйте инструкциям в Установка MariaDB Galera Cluster с помощью apt-get.
Установка MariaDB Galera Cluster с помощью zypper
В дистрибутивах Linux, таких как SLES, OpenSUSE и аналогичных, настоятельно рекомендуется установить соответствующие пакеты RPM из репозитория MariaDB с помощью zypper.
Чтобы установить MariaDB Galera Cluster с помощью zypper, следуйте инструкциям в Установка MariaDB Galera Cluster с помощью Zypper.
Установка MariaDB Galera Cluster с двоичным файлом tar
Чтобы установить MariaDB Galera Cluster с двоичным файлом tar, следуйте инструкциям в Установка MariaDB двоичных файлов tar.
Чтобы местоположение библиотеки libgalera_smm.so в двоичных файлах tar стало более похожим на её местоположение в других пакетах, библиотека теперь находится по адресу lib/galera/libgalera_smm.so в двоичных файлах tar, и существует символическая ссылка в каталоге lib, указывающая на неё.
Установка MariaDB Galera Cluster из исходных кодов
Чтобы установить MariaDB Galera Cluster, скомпилировав его из исходных кодов, вам необходимо скомпилировать как MariaDB Server, так и библиотеку поставщика wsrep Galera. Дополнительная информация по этому вопросу доступна на страницах Установка Galera из исходных кодов. Страницы Компиляция MariaDB из исходных кодов и Документация Galera Cluster: Сборка Galera Cluster для MySQL также могут быть полезны.
Настройка MariaDB Galera Cluster
Необходимо установить ряд параметров для работы кластера Galera при использовании MariaDB. Более подробная информация доступна в Настройка MariaDB Galera Cluster.
Инициализация нового кластера
Для первого узла нового кластера необходимо запустить mariadbd на этом узле с опцией --wsrep-new-cluster. Эта опция сообщает узлу, что нет существующего кластера для подключения. Узел создаст новый UUID для идентификации нового кластера.
Не используйте опцию --wsrep-new-cluster при подключении к существующему кластеру. Перезапуск узла с этой опцией приведет к созданию нового UUID для идентификации кластера, и узел не подключится к старому кластеру. См. следующий раздел о том, как подключиться к существующему кластеру.
Например, если вы вручную запускаете mariadbd на узле, то вы можете запустить его, выполнив следующее:
$ mariadbd --wsrep-new-cluster
Однако помните, что большинство пользователей не будут запускать mariadbd вручную. Вместо этого большинство пользователей будут использовать менеджер сервисов менеджера сервисов для запуска mariadbd. См. следующие разделы о том, как инициализировать узел с помощью наиболее распространённых менеджеров сервисов.
Systemd и Инициализация
В операционных системах, использующих systemd, узел можно инициализировать следующим образом:
$ galera_new_cluster
Этот wrapper использует systemd для запуска mariadbd с опцией --wsrep-new-cluster.
Если вы используете службу systemd, которая поддерживает метод службы systemd для взаимодействия с несколькими процессами MariaDB Server, то вы можете инициализировать конкретный экземпляр, указав имя экземпляра в качестве суффикса. Например:
$ galera_new_cluster mariadb@node1
Поддержка systemd и скрипта galera_new_cluster была добавлена в MariaDB 10.1.
SysVinit и Инициализация
В операционных системах, использующих sysVinit, узел можно инициализировать следующим образом:
$ service mysql bootstrap
Это запускает mariadbd с опцией --wsrep-new-cluster.
Добавление другого узла в кластер
После запуска кластера и необходимости добавить/подключить к нему другой узел, необходимо указать адрес одного или нескольких существующих членов кластера в опции wsrep_cluster_address. Например, если первый узел кластера имеет адрес 192.168.0.1, то вы можете добавить второй узел в кластер, установив следующую опцию в группе опций сервера группа опций в файле опций файл опций:
[mariadb] ... wsrep_cluster_address=gcomm://192.168.0.1 # DNS names work as well, IP is preferred for performance
Новому узлу необходимо подключиться только к одному из существующих узлов кластера. После подключения к одному из существующих узлов кластера он сможет увидеть все узлы кластера. Однако обычно лучше перечислить все узлы кластера в wsrep_cluster_address, чтобы любой узел мог присоединиться к кластеру, подключившись к любому другому узлу кластера, даже если один или несколько узлов кластера отключены. Даже указание IP-адреса собственного узла в wsrep_cluster_address допустимо, так как Galera Cluster достаточно умён, чтобы игнорировать его.
После того, как все члены согласятся с членством, состояние кластера будет обменено. Если состояние нового узла отличается от состояния кластера, он запросит IST или SST, чтобы согласовать своё состояние с другими узлами.
Перезапуск кластера
Если вы одновременно выключите все узлы, то фактически вы прекратите работу кластера. Конечно, данные кластера по-прежнему существуют, но работающий кластер больше не существует. В этом случае вам нужно будет снова инициализировать кластер.
Если кластер не инициализирован, и mariadbd на первом узле просто запущен в обычном режиме, то узел попытается подключиться хотя бы к одному из узлов, перечисленных в опции wsrep_cluster_address. Если в настоящее время ни один узел не запущен, то это завершится неудачей. Инициализация первого узла решает эту проблему.
Определение наиболее продвинутого узла
В некоторых случаях Galera откажется от инициализации узла, если обнаружит, что он может быть не самым продвинутым узлом в кластере. Galera делает это определение, если узел не был последним в кластере, выключенным, или если узел потерпел сбой. В этих случаях требуется ручное вмешательство.
Если вы точно знаете, какой узел является самым продвинутым, вы можете отредактировать файл grastate.dat в каталоге datadir. Вы можете установить safe_to_bootstrap=1 на самом продвинутом узле.
Вы можете определить, какой узел является самым продвинутым, проверив grastate.dat на каждом узле и найдя узел с самым высоким seqno. Если узел потерпел сбой и seqno=-1, то вы можете найти самый продвинутый узел, восстановив seqno на каждом узле с помощью опции wsrep_recover. Например:
$ mariadbd --wsrep_recover
Systemd и Восстановление Galera
В операционных системах, использующих systemd, положение узла можно восстановить, запустив скрипт galera_recovery. Например:
$ galera_recovery
Если вы используете службу systemd , которая поддерживает метод службы systemd для взаимодействия с несколькими процессами MariaDB Server, то вы можете восстановить положение конкретного экземпляра, указав имя экземпляра в качестве суффикса. Например:
$ galera_recovery mariadb@node1
Скрипт galera_recovery восстанавливает положение узла, запуская mariadbd с опцией wsrep_recover.
Когда скрипт galera_recovery запускает mariadbd, он не записывает в журнал ошибок. Вместо этого он перенаправляет выходные данные лога mariadbd в файл с именем в формате /tmp/wsrep_recovery.XXXXXX, где XXXXXX заменяется случайными символами.
Когда Galera включена, служба MariaDB systemd автоматически запускает скрипт galera_recovery перед запуском MariaDB, чтобы MariaDB запускалась с правильным положением Galera.
Поддержка systemd и скрипта galera_recovery была добавлена в MariaDB 10.1.
Передачи моментальных снимков состояния (SST)
При передаче моментального снимка состояния (SST) кластер обеспечивает узлы, передавая полную копию данных с одного узла на другой. Когда новый узел присоединяется к кластеру, новый узел запускает передачу моментального снимка состояния для синхронизации своих данных с узлом, который уже является частью кластера.
Дополнительную информацию см. в разделе Введение в передачи моментальных снимков состояния (SST).
Инкрементальные передачи состояний (IST)
При инкрементальной передаче состояний (IST) кластер обеспечивает узлы, передавая недостающие наборы записей узла с одного узла на другой. Когда новый узел присоединяется к кластеру, новый узел запускает инкрементальную передачу состояния для синхронизации своих данных с узлом, который уже является частью кластера.
Если узел отсутствовал в кластере только в течение короткого времени, то IST, как правило, быстрее, чем SST.
Шифрование данных в состоянии покоя
В MariaDB 10.1 и выше MariaDB Galera Cluster поддерживает шифрование данных в состоянии покоя. См. SST и шифрование данных в состоянии покоя для получения некоторых замечаний о влиянии SST при настройке шифрования.
Некоторые данные по-прежнему не могут быть зашифрованы:
- Дисковый кэш Galera gcache не шифруется (MDEV-8072).
Мониторинг
Переменные состояния
Переменные состояния Galera Cluster можно запросить с помощью стандартной SHOW STATUS команды. Например:
SHOW GLOBAL STATUS LIKE 'wsrep_%';
Уведомления о изменениях в кластере
Узлы кластера могут быть настроены для вызова команды при изменении членства в кластере или статуса узла. Этот механизм также может использоваться для передачи события некоторому внешнему агенту мониторинга. Это настраивается путём установки wsrep_notify_cmd. Подробности см. в документации Galera Cluster: Команда уведомления.
См. также
- Что такое MariaDB Galera Cluster?
- О репликации Galera
- Случаи использования Galera
- Codership в Google Groups
- Документация Galera Cluster
- Документация Galera Cluster: Команда уведомления
- Представление функции «Safe-To-Bootstrap» в Galera Cluster
- Github - galera
- Github - mysql-wsrep
Примечания
© 2023 MariaDB
Licensed under the Creative Commons Attribution 3.0 Unported License and the GNU Free Documentation License.
https://mariadb.com/kb/en/getting-started-with-mariadb-galera-cluster/