Установка и настройка MySQL Cluster на Ubuntu 16.04
MySQL Cluster обеспечивает отказоустойчивость и масштабирование для MySQL с помощью движка NDB/NDBCLUSTER. В статье показана поэтапная установка на четырёх серверах Ubuntu 16.04: узел управления (ndb_mgmd), два узла данных (ndbd) и SQL-узел (mysqld). Включены конфигурационные файлы, команды запуска, проверка кластера и плейбук восстановления.
Важно: примеры IP-адресов — 192.168.1.11–192.168.1.14. Замените их на свои.
Кому это нужно
- Администраторам БД, которые хотят обеспечить высокую доступность и масштабирование.
- Инженерам DevOps, которым нужно локально развёртывать MySQL Cluster для тестов или продакшна.
Ключевые термины (одной строкой)
- NDB (Network DataBase): распределённый хранилищный движок для MySQL Cluster.
- ndb_mgmd: процесс управления кластером.
- ndbd: процесс хранения данных (data node).
- mysqld: сервер MySQL, выступающий SQL-слоем кластера.
Обзор архитектуры
MySQL Cluster — мульти-мастер ACID-архитектура без единой точки отказа. Данные автоматически шардуются и реплицируются между data-узлами. Для простого кластера требуется 3 типа узлов:
- Management Node (ndb_mgmd) — управление и мониторинг.
- Data Node (ndbd) — хранение и репликация данных.
- SQL Node (mysqld) — интерфейс для приложений.
Предварительные требования
- Четыре сервера с Ubuntu 16.04 (Xenial):
- 192.168.1.11 — management-node
- 192.168.1.12 — data-node1
- 192.168.1.13 — data-node2
- 192.168.1.14 — sql-node
- root-привилегии на всех узлах.
- Доступ по SSH между администратором и каждым узлом.
Шаг 1 — Установка и настройка узла управления
Выполните вход на узел управления по SSH:
ssh [email protected]
TYPE YOUR PASSWORDA. Установка файлов управления
- Скачайте пакет MySQL Cluster (Linux-generic, 64-bit) с сайта MySQL. Пример с wget:
wget http://dev.mysql.com/get/Downloads/MySQL-Cluster-7.4/mysql-cluster-gpl-7.4.12-linux-glibc2.5-x86_64.tar.gz
tar -xzvf mysql-cluster-gpl-7.4.12-linux-glibc2.5-x86_64.tar.gz
mv mysql-cluster-gpl-7.4.12-linux-glibc2.5-x86_64/ mysql/- Скопируйте бинарники управления в /usr/local/bin и сделайте их исполняемыми:
cd ~/mysql/
cp bin/ndb_mgm* /usr/local/bin/
chmod +x /usr/local/bin/ndb_mgm*B. Конфигурация management node
Создайте каталог конфигурации и файл config.ini:
mkdir -p /var/lib/mysql-cluster/
vim /var/lib/mysql-cluster/config.iniВставьте в файл следующее (изменйте IP по вашей схеме при необходимости):
[ndbd default]
NoOfReplicas=2
DataMemory=80M
IndexMemory=18M
[mysqld default]
[ndb_mgmd default]
[tcp default]
# Cluster Control / Management node
[ndb_mgmd]
hostname=192.168.1.11
# Data Node 1
[ndbd]
hostname=192.168.1.12
DataDir= /var/lib/mysql-cluster
# Data Node 2
[ndbd]
HostName=192.168.1.13
DataDir=/var/lib/mysql-cluster
# SQL Node
[mysqld]
hostname=192.168.1.14
# If you to add new SQL Node
[mysqld]Сохраните и выйдите.
Запустите процесс управления:
ndb_mgmd -f /var/lib/mysql-cluster/config.ini --configdir=/var/lib/mysql-cluster/Добавьте автозапуск (добавляется строка в /etc/rc.local):
echo 'ndb_mgmd -f /var/lib/mysql-cluster/config.ini --configdir=/var/lib/mysql-cluster/' >> /etc/rc.localПроверьте вывод. Если увидите строку вида:
MySQL Cluster Management Server mysql-5.6.31 ndb-7.4.12то mgmd запущен.
Проверка портов и статуса:
# Проверка порта 1186, используемого ndb_mgmd
netstat -plntu
# Проверка готовности management node
ndb_mgm
show
Важно: убедитесь, что firewall/Security Group разрешает порт 1186 между узлами.
Шаг 2 — Установка и настройка data-узла
Повторите этот шаг для двух data-узлов (192.168.1.12 и 192.168.1.13). В примере показан первый узел.
Подключитесь по SSH:
ssh [email protected]A. Установка зависимостей и пользователя
Установите пакет libaio1 и создайте пользователя mysql:
apt-get install libaio1
groupadd mysql
useradd -g mysql mysqlСкачайте и распакуйте пакет, переименуйте папку в mysql:
wget http://dev.mysql.com/get/Downloads/MySQL-Cluster-7.4/mysql-cluster-gpl-7.4.12-linux-glibc2.5-x86_64.tar.gz
tar -xzvf mysql-cluster-gpl-7.4.12-linux-glibc2.5-x86_64.tar.gz
mv mysql-cluster-gpl-7.4.12-linux-glibc2.5-x86_64/ mysql/
mv mysql /usr/local/
cd /usr/local/mysql/Создайте системные базы данных:
./scripts/mysql_install_db --user=mysqlСкопируйте скрипт запуска и включите сервис:
cp support-files/mysql.server /etc/init.d/mysql
systemctl enable mysqlПеренесите бинарники и создайте симлинк:
mv bin/* /usr/local/bin/
rm -rf bin/
ln -s /usr/local/bin /usr/local/mysql/Измените владельцев:
chown -R root:mysql .
chown -R mysql dataB. Конфигурация data-узла
Создайте /etc/my.cnf и вставьте:
# MySQL Config
[mysqld]
datadir=/usr/local/mysql/data
socket=/tmp/mysql.sock
user=mysql
# Run ndb storage engine
ndbcluster
# IP address management node
ndb-connectstring=192.168.1.11
[mysql_cluster]
# IP address management node
ndb-connectstring=192.168.1.11
# MySQL Pid and Log
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pidСоздайте каталог данных ndb и назначьте владельца:
mkdir -p /var/lib/mysql-cluster/
chown -R mysql /var/lib/mysql-clusterC. Запуск ndb и mysql
Запустите демон хранения и сервис MySQL:
ndbd --initial
systemctl start mysqlЕсли ошибок нет, выполните безопасную настройку пароля:
mysql_secure_installationИли войдите в shell:
mysql -u root -pПримечание: повторите те же действия на втором data-узле (192.168.1.13).

Шаг 3 — Установка и настройка SQL-узла
SQL-узел (192.168.1.14) почти идентичен data-узлу, но на нём не запускается ndbd.
Подключитесь по SSH и выполните:
ssh [email protected]A. Установка и подготовка
apt-get install libaio1
groupadd mysql
useradd -g mysql mysql
wget http://dev.mysql.com/get/Downloads/MySQL-Cluster-7.4/mysql-cluster-gpl-7.4.12-linux-glibc2.5-x86_64.tar.gz
tar -xzvf mysql-cluster-gpl-7.4.12-linux-glibc2.5-x86_64.tar.gz
mv mysql-cluster-gpl-7.4.12-linux-glibc2.5-x86_64/ mysql/
mv mysql /usr/local/
cd /usr/local/mysql/
./scripts/mysql_install_db --user=mysql
cp support-files/mysql.server /etc/init.d/mysql
systemctl enable mysql
mv bin/* /usr/local/bin/
rm -rf bin/
ln -s /usr/local/bin /usr/local/mysql/
chown -R root:mysql .
chown -R mysql dataB. Конфигурация SQL-узла
Создайте /etc/my.cnf как для data-узла, укажите ndbcluster и ndb-connectstring на IP management node:
# MySQL Config
[mysqld]
datadir=/usr/local/mysql/data
socket=/tmp/mysql.sock
user=mysql
# Run ndb storage engine
ndbcluster
# IP address management node
ndb-connectstring=192.168.1.11
[mysql_cluster]
# IP address management node
ndb-connectstring=192.168.1.11
# MySQL Pid and Log
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pidC. Запуск SQL-узла
systemctl start mysql
mysql_secure_installationТеперь SQL-узел может подключаться к кластеру и выполнять SQL-запросы.
Шаг 4 — Тестирование
На SQL-узле создайте тестовую базу данных:
mysql -u root -p
TYPE PASSWORD
create database nanana;
Проверьте, что данные доступны и реплицируются на узлах данных. При выключении одного data-узла другой должен брать на себя нагрузку.
Показать базы данных:
mysql -u root -p
TYPE PASSWORD
show databases;
Проверка состояния кластера на узле управления:
ndb_mgm
show
Шаг 5 — Безопасная остановка и восстановление
Безопасное завершение работы кластера выполняется с management node:
ndb_mgm
shutdownКоманда завершит процессы ndb на data-узлах. Для старта снова выполните:
На management:
ndb_mgmd -f /var/lib/mysql-cluster/config.ini --configdir=/var/lib/mysql-cluster/На всех data-узлах:
ndbd
systemctl start mysqlНа SQL-узлах:
systemctl start mysqlПолезные команды и чек-лист
Cheat sheet — часто используемые команды:
# Проверка статуса кластера на management node
ndb_mgm
show
# Проверка процессов на data node
ps aux | grep ndbd
# Проверка сетевых подключений к mgmd
netstat -plntu | grep 1186
# Старт/рестарт MySQL на SQL-узле
systemctl start mysql
systemctl restart mysql
# Инициализация data node (при первом старте)
ndbd --initialРоль-ориентированные чек-листы при развёртывании:
Для администратора управления:
- Подготовить config.ini с корректными IP.
- Открыть порт 1186 между узлами.
- Запустить ndb_mgmd и проверить show.
Для инженера data-узлов:
- Установить libaio1, создать пользователя mysql.
- Настроить /etc/my.cnf с ndbcluster и ndb-connectstring.
- Запустить ndbd –initial и systemctl start mysql.
Для владельца SQL-узла:
- Убедиться, что mysqld видит ndb storage engine.
- Настроить резервное копирование и мониторинг.
Когда эта схема не подходит (контрпримеры)
- Нужен только однопользовательский локальный сервер с низкими требованиями — кластер избыточен.
- Если приложение использует сложные транзакции, затрагивающие большие объёмы данных, NDB может быть не лучшим выбором; рассмотрите InnoDB в конфигурации master-slave или Galera.
Альтернативы:
- MySQL Group Replication — для синхронной репликации без NDB.
- Galera Cluster (MariaDB / Percona XtraDB Cluster) — для многомастерной синхронной репликации.
Мини-методология развёртывания
- Подготовить сеть и сервера, согласовать IP и firewall.
- Настроить management node и убедиться в доступности порта 1186.
- Установить и запустить data-узлы, проверить регистрацию в mgm.
- Установить SQL-узлы и протестировать создание/чтение данных.
- Настроить мониторинг и регулярные резервные копии.
Runbook: восстановление после отказа data-узла
Симптом: один data-узел упал, остальные в режиме NoOfReplicas позволяют продолжать работу.
Действия:
- На management node выполните ndb_mgm и show, оцените статус.
- Попробуйте перезапустить ndbd на упавшем узле: ndbd. Если не удаётся, выполните системный рестарт сервера.
- После восстановления выполните ndb_mgm
start
(где nodeid — идентификатор узла).
- Проверьте консистентность данных через приложения и дополнительные проверки.
Критерии приёмки
- Все узлы зарегистрированы и в статусе started.
- SQL-узлы успешно читают и пишут данные.
- При отключении одного data-узла кластер продолжает обслуживать запросы.
Факт-бокс: ключевые параметры
- NoOfReplicas — количество копий фрагментов (рекомендуемо >=2 для отказоустойчивости).
- Порт mgmd — 1186 (по умолчанию).
- Минимальные компоненты — mgmd + >=2 data nodes + >=1 sql node.
Схема принятия решения (Mermaid)
flowchart TD
A[Нужно высокая доступность?] -->|Да| B[Использовать кластер]
A -->|Нет| C[Обычный MySQL 'InnoDB']
B --> D{Есть опыт с NDB?}
D -->|Да| E[Развернуть MySQL Cluster]
D -->|Нет| F[Рассмотреть Galera или Group Replication]Совместимость и миграция
- Версия примера — MySQL Cluster 7.4 с компонентами ndb-7.4.x. Нюансы и команды могут отличаться в более новых релизах.
- При миграции с InnoDB: планируйте тестовую миграцию и проверку целостности, NDB использует другую модель хранения и ограничения.
Краткое резюме
MySQL Cluster даёт отказоустойчивость и масштабирование для сценариев с высокой доступностью. Развёртывание требует строгой сетевой настройки, корректных config.ini и /etc/my.cnf, а также чёткого плана восстановления. Следуйте чек-листам по ролям, тестируйте отказ и проверяйте поведение приложений.
Примечание: ссылки на исходную документацию приведены в конце статьи.
Ссылки и материалы
Краткое руководство для социальных сетей
MySQL Cluster на Ubuntu 16.04: шаги установки management, data и SQL узлов, проверка статуса, команды восстановления и чек-листы для ролей. Быстрый запуск и тесты.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента