Тестирование 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
- На сервере управления запустите клиент управления кластером ndb_mgm:
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 @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 на узле.
Мини‑методология тестирования (шаги)
- Подключиться к ndb_mgm и выполнить show;.
- На узле A создать базу и таблицу с ENGINE=NDBCLUSTER.
- Вставить строки и проверить SELECT на узле A.
- На узле B создать базу (но не таблицу) и выполнить SELECT; убедиться в наличии строк.
- Остановить ndbd на узле A, проверить show; и повторить SELECT на узле B.
- Запустить 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. Выполнение описанных шагов даёт уверенность в корректной работе распределённого хранилища данных.
Примечание: перед изменениями в продакшн-окружении всегда делайте бэкап конфигураций и проверяйте поведение на тестовом окружении.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента