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

Тестирование MySQL-кластера

• 5 min read • Базы данных • Обновлено 27 Nov 2025
Тестирование MySQL-кластера
Тестирование MySQL-кластера

Краткое определение

NDB Cluster — распределённое хранилище для MySQL, где ndbd — дата-узлы, ndb_mgmd — менеджер кластера, а mysqld (API) — серверы MySQL, подключающиеся к кластеру.

4 — Тестирование MySQL-кластера

Наша конфигурация кластера завершена, теперь её нужно протестировать. На сервере управления кластером (loadb1.example.com) запустите клиент управления кластером ndb_mgm, чтобы проверить, подключены ли узлы:

loadb1.example.com:

ndb_mgm 

Вы должны увидеть примерно следующее:

| -- NDB Cluster -- Management Client -- ndb_mgm> |

Теперь введите show; в командной строке:

show;

Вывод должен выглядеть так:

| ndb_mgm> show; Connected to Management Server at: localhost:1186 Cluster Configuration --------------------- [ndbd(NDB)] 2 node(s) id=2 @192.168.0.101 (Version: 5.0.19, Nodegroup: 0, Master) id=3 @192.168.0.102 (Version: 5.0.19, Nodegroup: 0) [ndb_mgmd(MGM)] 1 node(s) id=1 @192.168.0.103 (Version: 5.0.19) [mysqld(API)] 2 node(s) id=4 @192.168.0.101 (Version: 5.0.19) id=5 @192.168.0.102 (Version: 5.0.19) ndb_mgm> |

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

Введите:

quit;

чтобы выйти из консоли ndb_mgm.

Теперь создадим тестовую базу и таблицу с данными на sql1.example.com:

sql1.example.com:

mysql -u root -p  
CREATE DATABASE mysqlclustertest;  
USE mysqlclustertest;  
CREATE TABLE testtable (i INT) ENGINE=NDBCLUSTER;  
INSERT INTO testtable () VALUES (1);  
SELECT * FROM testtable;  
quit;

Внимание: в операторе CREATE TABLE обязательно укажите ENGINE=NDBCLUSTER для всех таблиц, которые должны храниться в кластере. Если использовать другой движок, кластерирование не будет работать.

Ожидаемый результат SELECT:

| mysql> SELECT * FROM testtable; +------+ | i | +------+ | 1 | +------+ 1 row in set (0.03 sec) |

Теперь создайте ту же базу на sql2.example.com (структуру базы нужно создать, данные должны реплицироваться автоматически, потому что таблица — NDB):

sql2.example.com:

mysql -u root -p  
CREATE DATABASE mysqlclustertest;  
USE mysqlclustertest;  
SELECT * FROM testtable;

SELECT должен вернуть тот же результат, что и на sql1.example.com:

| mysql> SELECT * FROM testtable; +------+ | i | +------+ | 1 | +------+ 1 row in set (0.04 sec) |

Данные были реплицированы с sql1.example.com на sql2.example.com. Теперь вставим ещё строку в testtable на sql2.example.com:

sql2.example.com:

INSERT INTO testtable () VALUES (2);  
quit;

Вернёмся на sql1.example.com и проверим новую строку:

sql1.example.com:

mysql -u root -p  
USE mysqlclustertest;  
SELECT * FROM testtable;  
quit;

Ожидаемый вывод:

| mysql> SELECT * FROM testtable; +------+ | i | +------+ | 1 | | 2 | +------+ 2 rows in set (0.05 sec) |

Таким образом, оба MySQL-узла показывают одинаковые данные.

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

Остановите узел 1 (sql1.example.com):

sql1.example.com:

killall ndbd 

Проверьте, что процессы ndbd завершены:

ps aux | grep ndbd | grep -iv grep

Если процессы всё ещё видны, повторите killall ndbd, пока они не пропадут.

Теперь проверьте статус кластера на сервере управления (loadb1.example.com):

loadb1.example.com:

ndb_mgm

В консоли ndb_mgm выполните:

show;

Вы должны увидеть состояние с одной отключённой нодой:

| ndb_mgm> show; Connected to Management Server at: localhost:1186 Cluster Configuration --------------------- [ndbd(NDB)] 2 node(s) id=2 (not connected, accepting connect from 192.168.0.101) id=3 @192.168.0.102 (Version: 5.0.19, Nodegroup: 0, Master) [ndb_mgmd(MGM)] 1 node(s) id=1 @192.168.0.103 (Version: 5.0.19) [mysqld(API)] 2 node(s) id=4 @192.168.0.101 (Version: 5.0.19) id=5 @192.168.0.102 (Version: 5.0.19) ndb_mgm> |

Видно, что sql1.example.com не подключён.

Введите:

quit;

чтобы выйти из ndb_mgm.

Проверьте данные на sql2.example.com:

sql2.example.com:

mysql -u root -p  
USE mysqlclustertest;  
SELECT * FROM testtable;  
quit;

Результат SELECT должен по-прежнему быть:

| mysql> SELECT * FROM testtable; +------+ | i | +------+ | 1 | | 2 | +------+ 2 rows in set (0.17 sec) |

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

Чтобы запустить sql1 снова:

sql1.example.com:

ndbd 

После перезапуска ещё раз проверьте show; в ndb_mgm, чтобы убедиться, что узел восстановил соединение.

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

  • Все узлы показываются в output команды show; и имеют статус @IP или not connected в соответствии с тестовыми действиями.
  • После вставки данных на одном mysqld-запросе те же данные доступны на другом.
  • При остановке одного ndbd второй узел продолжает отдавать данные.
  • После старта ndbd узел возвращается в кластер без потери данных.

Что может пойти не так — распространённые проблемы и их решения

  • Узлы не подключаются: проверьте сетевые правила (файрволы, NAT), правильные IP в config.ini и совпадение версии NDB.
  • Данные не реплицируются: убедитесь, что таблица создана с ENGINE=NDBCLUSTER; другие движки не хранятся в NDB.
  • ndbd аварийно завершается: проверьте логи ndbd и /var/lib/mysql-cluster/ndb_*.log на предмет ошибок памяти или конфликта портов.
  • Менеджер показывает not connected accepting connect: обычно означает, что узел пытается повторно подключиться — проверьте сетевую доступность.

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

  • Нагрузочное тестирование: запуск последовательных INSERT/SELECT/UPDATE с помощью sysbench или custom-скриптов.
  • Тестирование сетевых разделов: имитация packet loss или high latency с tc/netem.
  • Тестирование ошибок диска: подключение нестабильного хранилища на одном из узлов.

Чек-лист ролей

DBA:

  • Проверить конфигурацию cluster.conf и версии пакетов.
  • Создать тестовую базу и таблицу с ENGINE=NDBCLUSTER.
  • Проверить целостность данных после рестарта узлов.

Системный администратор:

  • Убедиться в открытых портах между узлами (1186 и порты ndbd).
  • Проверить настройки firewall и маршрутизации.
  • Следить за журналами и доступностью процессов ndbd/ndb_mgmd.

Тестировщик:

  • Вставить/удалить данные, проверяя отражение на всех mysqld.
  • Остановить/запустить ndbd и зафиксировать время восстановления.

Мини-методология тестирования (шаги)

  1. Проверить подключение узлов через ndb_mgm и show;.
  2. Создать тестовую базу и таблицу ENGINE=NDBCLUSTER на первом mysqld.
  3. Проверить данные на втором mysqld.
  4. Вставить данные на втором mysqld, убедиться в репликации на первом.
  5. Остановить один ndbd, проверить доступность данных на оставшихся узлах.
  6. Запустить ndbd и проверить повторное подключение узла.

Тест-кейсы и критерии приёмки

  • TC1: Подключение узлов — show; возвращает список всех узлов (PASS — все узлы подключены).
  • TC2: Репликация вставки — INSERT на sql1 появляется на sql2 (PASS — SELECT на sql2 показывает вставку).
  • TC3: Отказ узла — после killall ndbd один узел недоступен, данные на другом остаются (PASS — SELECT возвращает данные).
  • TC4: Восстановление узла — после ndbd узел подключается и синхронизируется (PASS — show; показывает узел активным).

Краткий словарь (1 строка)

  • ndbd: процесс хранения данных в NDB Cluster.
  • ndb_mgmd: менеджер конфигурации кластера.
  • mysqld (API): клиент MySQL, взаимодействующий с кластером.
  • ENGINE=NDBCLUSTER: движок таблицы, который обеспечивает хранение в NDB.

Итог

Тесты показали стандартный рабочий сценарий: создание таблицы с ENGINE=NDBCLUSTER, успешная репликация между mysqld-узлами, устойчивость к остановке одного ndbd и успешное восстановление после старта. Следуйте чек-листам и тест-кейсам для стабильной рабочей проверки кластера.

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

Поделиться: 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 быстро