Гид по технологиям

Установка и настройка MySQL Cluster на CentOS 7

• 7 min read • Базы данных • Обновлено 26 Nov 2025
MySQL Cluster на CentOS 7 — установка и настройка
MySQL Cluster на CentOS 7 — установка и настройка

TL;DR

MySQL Cluster (NDB/NDBCLUSTER) предоставляет отказоустойчивую, масштабируемую и низколатентную архитектуру для MySQL. В руководстве показана пошаговая установка: один управляющий узел (MGM), два дата-узла (NDB) и два SQL-узла (mysqld) на CentOS 7. Приведены команды для загрузки, установки, конфигурации и базового тестирования кластера.

Важно: в shared-nothing архитектуре каждый узел должен иметь собственную память и диск — сетевые файловые системы (NFS/SAN) не рекомендуются.

Введение

MySQL Cluster реализует хранение и репликацию данных через движок NDB (Network DataBase). Он обеспечивает автоматическое шардингование и синхронную репликацию данных между нодами. Типичная развёртка требует трёх типов узлов, каждый на отдельном сервере:

  • Управляющий узел (Management Node, ndb_mgmd)
  • Дата-узлы (Data Nodes, ndbd/ndbmtd)
  • SQL-узлы (MySQL сервера, mysqld)

Цель этой инструкции — показать практическую установку кластера на пяти серверах CentOS 7: один MGM, два NDB и два SQL.

Основные варианты назначения и целевая аудитория

Целевая аудитория: системные администраторы и DBA, которым нужен отказоустойчивый кластер MySQL для OLTP-сценариев с высокой доступностью и низкой задержкой.

Ключевые термины (1‑строчная дефиниция):

  • NDB: распределённый движок хранения для MySQL, обеспечивающий репликацию в памяти и на диск.
  • MGM (ndb_mgmd): процесс управления конфигурацией кластера.
  • ndbd/ndbmtd: процессы, которые хранят и реплицируют данные.

Требования и подготовка

  • ОС: CentOS 7 x86_64 на всех серверах.
  • 5 серверов/VM с доступом по сети.
  • Примерные host/IP:
    • Управляющий: db1 = 192.168.1.120
    • Дата-узлы: db2 = 192.168.1.121, db3 = 192.168.1.122
    • SQL-узлы: db4 = 192.168.1.123, db5 = 192.168.1.124

Прежде чем начать, убедитесь, что: у вас есть root-доступ по SSH к каждому хосту; имеются базовые утилиты (wget, tar, yum) и свободное место на диске.

Шаг 1 — Настройка управляющего узла (MGM)

Управляющий узел будет установлен на db1 (192.168.1.120). Входите под root.

1.A. Загрузка пакета MySQL Cluster

Используем RPM-бандл, совместимый с RHEL/CentOS 7, и распаковываем его:

cd ~
wget http://dev.mysql.com/get/Downloads/MySQL-Cluster-7.4/MySQL-Cluster-gpl-7.4.10-1.el7.x86_64.rpm-bundle.tar
tar -xvf MySQL-Cluster-gpl-7.4.10-1.el7.x86_64.rpm-bundle.tar

1.B. Установка зависимостей и удаление конфликтов

Перед установкой необходимо поставить perl-Data-Dumper и удалить mariadb-libs, который конфликтует с MySQL Cluster:

yum -y install perl-Data-Dumper
yum -y remove mariadb-libs

1.C. Установка пакетов MySQL Cluster

Устанавливаем клиент, сервер и shared-пакеты RPM:

cd ~
rpm -Uvh MySQL-Cluster-client-gpl-7.4.10-1.el7.x86_64.rpm
rpm -Uvh MySQL-Cluster-server-gpl-7.4.10-1.el7.x86_64.rpm
rpm -Uvh MySQL-Cluster-shared-gpl-7.4.10-1.el7.x86_64.rpm

Проверьте отсутствие ошибок в выводе.

1.D. Конфигурация управляющего узла

Создаём директорию для конфигурации и файл config.ini:

mkdir -p /var/lib/mysql-cluster
cd /var/lib/mysql-cluster
vi config.ini

Вставьте (локализованы комментарии):

[ndb_mgmd default]
# Директория для логов MGM
DataDir=/var/lib/mysql-cluster

[ndb_mgmd]
# Management Node db1
HostName=192.168.1.120

[ndbd default]
NoOfReplicas=2     # Число реплик
DataMemory=256M    # Память для хранения данных
IndexMemory=128M   # Память для индексов
# Директория для данных Data Node
DataDir=/var/lib/mysql-cluster

[ndbd]
# Data Node db2
HostName=192.168.1.121

[ndbd]
# Data Node db3
HostName=192.168.1.122

[mysqld]
# SQL Node db4
HostName=192.168.1.123

[mysqld]
# SQL Node db5
HostName=192.168.1.124

Сохраните и выйдите.

1.E. Запуск управляющего узла

Запустите процесс управления:

ndb_mgmd --config-file=/var/lib/mysql-cluster/config.ini

Ожидаемый вывод (пример):

MySQL Cluster Management Server mysql-5.6.28 ndb-7.4.10
2016-03-22 19:26:08 [MgmtSrvr] INFO     -- The default config directory '/usr/mysql-cluster' does not exist. Trying to create it...
2016-03-22 19:26:08 [MgmtSrvr] INFO     -- Successfully created config directory

Для мониторинга используйте ndb_mgm:

ndb_mgm
show

Проверка статуса кластера.

Из вывода видно, что MGM стартовал и отображает версии mysql/ndb.

Шаг 2 — Настройка дата-узлов (Data Nodes)

Дата-узлы будут установлены на db2 (192.168.1.121) и db3 (192.168.1.122). Процедура для обоих одинаковая.

2.A. Вход и загрузка пакета

Пример входа по SSH на db2:

ssh [email protected]

Затем скачиваем и распаковываем пакет так же, как на MGM:

cd ~
wget http://dev.mysql.com/get/Downloads/MySQL-Cluster-7.4/MySQL-Cluster-gpl-7.4.10-1.el7.x86_64.rpm-bundle.tar
tar -xvf MySQL-Cluster-gpl-7.4.10-1.el7.x86_64.rpm-bundle.tar

2.B. Зависимости и удаление конфликтов

yum -y install perl-Data-Dumper
yum -y remove mariadb-libs

2.C. Установка пакетов

cd ~
rpm -Uvh MySQL-Cluster-client-gpl-7.4.10-1.el7.x86_64.rpm
rpm -Uvh MySQL-Cluster-server-gpl-7.4.10-1.el7.x86_64.rpm
rpm -Uvh MySQL-Cluster-shared-gpl-7.4.10-1.el7.x86_64.rpm

2.D. Конфигурация Data Node

Создайте /etc/my.cnf и добавьте параметры подключения к MGM:

vi /etc/my.cnf

Вставьте:

[mysqld]
ndbcluster
ndb-connectstring=192.168.1.120     # IP адрес управляющего узла

[mysql_cluster]
ndb-connectstring=192.168.1.120     # IP адрес управляющего узла

Создайте директорию данных, как в config.ini:

mkdir -p /var/lib/mysql-cluster

Запустите узел данных:

ndbd

Ожидаемый фрагмент лога:

2016-03-22 19:35:56 [ndbd] INFO     -- Angel connected to '192.168.1.120:1186'
2016-03-22 19:35:56 [ndbd] INFO     -- Angel allocated nodeid: 2

Повторите шаги 2.A–2.D на db3.

Шаг 3 — Настройка SQL-узлов (mysqld)

SQL-узлы предоставляют доступ приложениям. Устанавливаем их на db4 (192.168.1.123) и db5 (192.168.1.124).

3.A. Вход и загрузка пакета

ssh [email protected]
cd ~
wget http://dev.mysql.com/get/Downloads/MySQL-Cluster-7.4/MySQL-Cluster-gpl-7.4.10-1.el7.x86_64.rpm-bundle.tar
tar -xvf MySQL-Cluster-gpl-7.4.10-1.el7.x86_64.rpm-bundle.tar

3.B. Зависимости

yum -y install perl-Data-Dumper
yum -y remove mariadb-libs

3.C. Установка пакетов

cd ~
rpm -Uvh MySQL-Cluster-client-gpl-7.4.10-1.el7.x86_64.rpm
rpm -Uvh MySQL-Cluster-server-gpl-7.4.10-1.el7.x86_64.rpm
rpm -Uvh MySQL-Cluster-shared-gpl-7.4.10-1.el7.x86_64.rpm

3.D. Конфигурация SQL-узла

Создайте /etc/my.cnf и укажите подключение к MGM и движок по умолчанию:

vi /etc/my.cnf

Вставьте:

[mysqld]
ndbcluster
ndb-connectstring=192.168.1.120       # IP управляющего узла
default_storage_engine=ndbcluster     # Движок по умолчанию

[mysql_cluster]
ndb-connectstring=192.168.1.120       # IP управляющего узла

Запустите MySQL сервис:

service mysql start

3.E. Повторите на db5

Повторите шаги 3.A–3.D на втором SQL-узле (db5).

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

Войдите на управляющий узел и используйте ndb_mgm для проверки статуса:

ssh [email protected]
ndb_mgm
ndb_mgm> show

Состояние кластера NDB.

Полезные команды мониторинга:

ndb_mgm -e "all status"
ndb_mgm -e "all report memory"

Команда “show” показывает список узлов, их статус и назначенные id.

Шаг 5 — Тестирование кластера

Выполните тесты с любого SQL-узла (db4 или db5).

5.A. Смена пароля root

Файл .mysql_secret в домашней директории содержит автоматически сгенерированный пароль. Прочитайте его и запустите mysql_secure_installation:

cd ~
cat .mysql_secret
mysql_secure_installation

Следуйте подсказкам, введите старый пароль и задайте новый.

5.B. Подключение и создание привилегий

Подключитесь в mysql и создайте root-пользователя, доступного извне (пример):

mysql -u root -p
CREATE USER 'root'@'%' IDENTIFIED BY 'your_secure_password';
SELECT user, host, password FROM mysql.user;
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;

Замените your_secure_password на надёжный пароль. Пример вывода при назначении привилегий:

Предоставление привилегий в MySQL

5.C. Проверка репликации данных

Создайте базу на db4 и убедитесь, что она доступна на db5 — это подтверждение, что NDB распределил данные между дата-узлами.

Все узлы онлайн.

Если база видна на обоих SQL-узлах и в выводе ndb_mgm все узлы в состоянии “Started”, кластер функционирует корректно.

Практические рекомендации и нюансы

  • Не используйте NFS/SAN для каталогов ndb — это нарушает shared-nothing архитектуру.
  • Для продакшна увеличьте DataMemory и IndexMemory в config.ini в зависимости от рабочих нагрузок.
  • Настройте firewall/SELinux: откройте порты 1186 (ndb_mgmd) и другие, требуемые NDB/SQL (проверяйте документацию версии).
  • Резервное копирование: используйте ndb_restore и обычные дампы MySQL для критичных данных.

Когда MySQL Cluster не подходит (примеры и ограничения)

  • Большие аналитические запросы (OLAP) с полными сканированиями таблиц — NDB оптимизирован под OLTP.
  • Случаи с очень большой латентностью сети между узлами — NDB требует низкой задержки сети.
  • Требования к специфическим MySQL-расширениям, которые не поддерживаются NDB (например, некоторые типы временных таблиц и специфичные функции движков).

Альтернативные подходы

  • Galera Cluster (для InnoDB) — синхронная репликация на уровне сервера MySQL, проще в настройке для типичных web-приложений.
  • Patroni/etcd + PostgreSQL — если предпочтителен PostgreSQL с HA.
  • MySQL Group Replication — вариант от Oracle для синхронной репликации на уровне SQL узлов.

Контрольный чеклист ролей (быстрая проверка перед запуском)

  • Администратор сети:
    • Проверил маршрутизацию и задержки между узлами (<1–2 ms желательны в LB-сегменте).
    • Открыл необходимые порты.
  • Сисадмин/инженер развёртывания:
    • Установил пакеты и зависимости на всех хостах.
    • Настроил /etc/my.cnf и config.ini согласно IP.
  • DBA:
    • Проверил параметры памяти (DataMemory/IndexMemory).
    • Протестировал создание таблиц и отказоустойчивость путем остановки одного Data Node.

Мини‑методология приёмки (SLA‑ориентированная проверка)

Критерии приёмки:

  • Все узлы находятся в статусе Started в ndb_mgm.
  • CRUD‑операции с таблицами NDB проходят с ожидаемой латентностью.
  • При остановке одного дата-узла кластер продолжает обслуживать запросы (NoOfReplicas>=2).
  • Резервная копия успешно создаётся и восстанавливается на тестовом стенде.

Быстрая таблица параметров (Fact box)

  • Рекомендуемый минимальный набор узлов: 1 MGM, 2 NDB, 2 SQL
  • NoOfReplicas: минимум 2 для отказоустойчивости
  • DataMemory/IndexMemory: на тесте 256M/128M; в продакшне — по нагрузке

Типичные сценарии инцидентов и действия (Runbook)

  • Симптом: ndbd не подключается к MGM
    • Проверить доступность 192.168.1.120:1186 (telnet/netcat)
    • Проверить /var/lib/mysql-cluster/config.ini на правильный HostName
    • Просмотреть логи ndbd и ndb_mgmd
  • Симптом: одна из реплик недоступна
    • ndb_mgm> show
    • При необходимости выполнить graceful restart и оценить время ре-синхронизации

Безопасность и конфиденциальность (кратко)

  • Избегайте публикации администратора MGM и ndb_connectstring в общедоступных репозиториях.
  • Используйте firewall и VPN для изоляции сетевого сегмента кластера.
  • Убедитесь, что backup-шифрование и ротация паролей выполнены по политике безопасности.

Краткий глоссарий (1 строка на термин)

  • MGM: управляющий процесс, хранит config.ini и управляет узлами.
  • Data Node: хранит данные и участвует в репликации.
  • SQL Node: точка доступа приложений к кластеру.
  • NoOfReplicas: количество копий данных в кластере.

Частые ошибки и как их избежать

  • Неудалённый mariadb-libs перед установкой — rpm выдаст ошибку конфликта. Удалять обязательно.
  • Неверный ndb-connectstring в /etc/my.cnf — узел не подключится к MGM.
  • Использование сетевых томов для DataDir — может привести к потере целостности.

Заключение

MySQL Cluster предоставляет надёжный и масштабируемый механизм хранения для сценариев с высокой доступностью и низкой задержкой. Пошаговая настройка включает подготовку окружения, установку пакетов на каждую роль узла и простую конфигурацию. Для продакшна рекомендуется скорректировать параметры памяти, протестировать процедуру восстановления и встроить мониторинг.

Важно: перед переносом в продуктив выполните нагрузочное тестирование на копии конфигурации и данных, чтобы подобрать оптимальные значения DataMemory/IndexMemory и сетевые параметры.

FAQ

Нужно ли удалять mariadb-libs на всех серверах?

Да. Пакет mariadb-libs конфликтует с MySQL-Cluster-server на CentOS 7 и должен быть удалён перед установкой.

Можно ли использовать NFS для /var/lib/mysql-cluster?

Нет. MySQL Cluster использует shared-nothing архитектуру: каждый узел должен хранить свои данные локально.

Как увеличить объём памяти для NDB?

Отредактируйте параметры DataMemory и IndexMemory в разделе [ndbd default] файла config.ini и перезапустите кластер согласно документации.

Что произойдёт при падении одного Data Node при NoOfReplicas=2?

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

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Несколько аккаунтов Skype: Multi Skype Launcher
Программное обеспечение

Несколько аккаунтов Skype: Multi Skype Launcher

Журнал для работы: повысить продуктивность
Productivity

Журнал для работы: повысить продуктивность

Персональные звуки уведомлений на Android
Android.

Персональные звуки уведомлений на Android

Скачивание шоу Hulu для офлайн‑просмотра
Стриминг

Скачивание шоу Hulu для офлайн‑просмотра

Microsoft Start: персонализированная новостная лента
Новости

Microsoft Start: персонализированная новостная лента

Как изменить имя в Epic Games быстро
Гайды

Как изменить имя в Epic Games быстро