Установка и настройка 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.tar1.B. Установка зависимостей и удаление конфликтов
Перед установкой необходимо поставить perl-Data-Dumper и удалить mariadb-libs, который конфликтует с MySQL Cluster:
yum -y install perl-Data-Dumper
yum -y remove mariadb-libs1.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.tar2.B. Зависимости и удаление конфликтов
yum -y install perl-Data-Dumper
yum -y remove mariadb-libs2.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.rpm2.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.tar3.B. Зависимости
yum -y install perl-Data-Dumper
yum -y remove mariadb-libs3.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.rpm3.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 start3.E. Повторите на db5
Повторите шаги 3.A–3.D на втором SQL-узле (db5).
Шаг 4 — Мониторинг кластера
Войдите на управляющий узел и используйте ndb_mgm для проверки статуса:
ssh [email protected]
ndb_mgm
ndb_mgm> show
Полезные команды мониторинга:
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 на надёжный пароль. Пример вывода при назначении привилегий:

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?
Кластер продолжит обслуживать запросы, так как существует минимум одна дополнительная реплика. После возвращения узла произойдёт репликация данных.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента