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

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

• 4 min read • Databases • Обновлено 29 Oct 2025
Тестирование MySQL-кластера
Тестирование MySQL-кластера

Краткое описание

Этот документ пошагово показывает, как протестировать настроенный MySQL NDB Cluster. Краткое определение: NDBCLUSTER — это движок хранения MySQL, который распределяет данные по узлам кластера и обеспечивает синхронную репликацию данных между узлами.

Что нужно иметь под рукой

  • Доступ к серверу управления кластера (mysql-mngt.example.com или loadb1.example.com).
  • Доступ к узлам данных (mysql-data1.example.com, mysql-data2.example.com).
  • Локальный root-доступ к MySQL на узлах данных.

Проверка подключения узлов через ndb_mgm

  1. На сервере управления запустите клиент управления кластером ndb_mgm:
ndb_mgm

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

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

  1. Введите команду show; чтобы увидеть конфигурацию кластера:
show;

Пример ожидаемого вывода:

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

Если видите подключённые узлы — переходите к созданию тестовой базы. Введите quit; чтобы выйти из клиента.

Важно: все таблицы, которые вы хотите распределить по NDB Cluster, должны быть созданы с ENGINE=NDBCLUSTER.

Создание тестовой базы и таблицы на mysql-data1.example.com

Подключитесь к MySQL на первом узле данных и выполните команды:

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) |

Проверка репликации данных на mysql-data2.example.com

На втором узле данных создайте только базу (CREATE DATABASE). Таблицы NDBCLUSTER не создаются локально вручную — их метаданные и данные управляются кластером. Выполните:

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

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

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

Это подтверждает, что данные, вставленные на mysql-data1.example.com, доступны на mysql-data2.example.com через кластер.

Добавим ещё одну строку на втором узле:

mysql-data2.example.com:
INSERT INTO testtable () VALUES (2);
quit;

Теперь вернитесь на mysql-data1.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) |

Вывод: оба узла кластера видят одни и те же данные.

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

На mysql-data1.example.com остановите ndbd-процессы:

killall ndbd

Проверьте, что процессы действительно остановлены:

ps aux | grep ndbd | grep -iv grep

Если процессы всё ещё видны, повторите killall ndbd до полного завершения.

Проверьте статус кластера из клиента управления:

ndb_mgm
show;

Ожидаемый вывод, где узел id=2 отмечен как не подключённый:

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

Проверьте данные на оставшемся активном узле (mysql-data2.example.com):

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

Результат должен оставаться прежним — данные доступны:

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

Таким образом, кластер продолжает обслуживать запросы при выходе одного узла.

Запуск узла снова

На mysql-data1.example.com запустите демона ndbd:

ndbd

После этого снова проверьте через ndb_mgm командой show;, чтобы убедиться, что узел подключился и синхронизировался.

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

  • Клиент ndb_mgm показывает все узлы как подключённые после запуска.
  • Таблица создана с ENGINE=NDBCLUSTER и доступна с любого узла.
  • Вставленные данные на одном узле видны на другом.
  • При остановке одного ndbd-узла остальные узлы продолжают обслуживать SELECT/INSERT операции (если конфигурация кластера допускает режим без потерянных данных).

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

  • Администратор кластера:
    • Убедиться, что ndb_mgmd работает на менеджере.
    • Проверить сеть между узлами (порты 1186 и порты NDB).
  • DBA:
    • Создать базу и таблицу с ENGINE=NDBCLUSTER.
    • Выполнить контрольные SELECT и INSERT.
  • DevOps:
    • Настроить мониторинг ndbd/ndb_mgmd и логов.
    • Автоматически перезапускать демон ndbd при падении (с осторожностью и с учётом политики восстановления).

Распространённые ошибки и способы решения

  • Таблица не видна на другом узле:
    • Проверьте, использован ли ENGINE=NDBCLUSTER.
    • Убедитесь, что менеджер кластера доступен и что узлы ndbd подключены (см. ndb_mgm show;).
  • ndbd не запускается:
    • Посмотрите логи ndbd (обычно /var/lib/mysql-cluster или /var/log).
    • Проверьте доступность менеджера кластера и корректность конфигурации my.cnf (ndb-connectstring).
  • Узел помечен как “not connected, accepting connect”:
    • Это означает, что менеджер ожидает повторного подключения узла — проверьте сеть и запустите ndbd на узле.

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

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

Тестовые случаи / критерии приёмки

  • TC1: show; показывает все узлы подключёнными — уровень успешности: PASS.
  • TC2: INSERT на узле A видно на узле B — PASS.
  • TC3: Остановка ndbd на узле A — кластер продолжает обслуживать SELECT на узле B — PASS.
  • TC4: Повторный запуск ndbd на узле A — узел автоматически синхронизируется и помечается как подключённый — PASS.

Краткое резюме

Проверка кластера включает проверку состояния через ndb_mgm, создание таблицы с ENGINE=NDBCLUSTER, валидацию репликации данных между узлами, тест остановки и перезапуска 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 быстро