21.5.1 ndbd — Демон узла данных кластера NDB
Бинарный файл ndbd предоставляет однопоточную версию процесса, который используется для обработки всех данных в таблицах, использующих движок хранения NDBCLUSTER. Этот процесс узла данных позволяет узлу данных выполнять обработку распределённых транзакций, восстановление узла, создание контрольных точек на диск, онлайн-бэкапы и связанные задачи. В NDB 7.6.31 и более поздних версиях при запуске ndbd регистрирует предупреждение, подобное показанному ниже:
2024-05-28 13:32:16 [ndbd] WARNING -- Running ndbd with a single thread of
signal execution. For multi-threaded signal execution run the ndbmtd binary.
ndbmtd — это многопоточная версия этого бинарного файла.
В кластере NDB набор процессов ndbd взаимодействует при обработке данных. Эти процессы могут выполняться на одном компьютере (хосте) или на разных компьютерах. Соответствие между узлами данных и хостами кластера полностью настраиваемо.
Опции, которые могут быть использованы с ndbd, показаны в следующей таблице. Дополнительные описания приведены после таблицы.
Таблица 21.22 Опции командной строки, используемые с программой ndbd
| Формат | Описание | Добавлен, устарел или удален |
|---|---|---|
| Локальный адрес привязки | (Поддерживается во всех выпусках NDB на основе MySQL 5.7) | |
| Директория, содержащая наборы символов | (Поддерживается во всех выпусках NDB на основе MySQL 5.7) | |
| Устаревший синоним для --connect-retry-delay, который следует использовать вместо этой опции | УДАЛЕНО: NDB 7.5.25, NDB 7.6.21 | |
| Устанавливает количество попыток повторного подключения перед отказом; 0 означает только 1 попытка (и без повторных попыток); -1 означает продолжать попытки неопределённое время | (Поддерживается во всех выпусках NDB на основе MySQL 5.7) | |
| Время ожидания между попытками связи с сервером управления в секундах; 0 означает не ждать между попытками | (Поддерживается во всех выпусках NDB на основе MySQL 5.7) | |
| То же, что и --ndb-connectstring | (Поддерживается во всех выпусках NDB на основе MySQL 5.7) | |
| Создать файл core при ошибке; используется при отладке | (Поддерживается во всех выпусках NDB на основе MySQL 5.7) | |
| Запустить ndbd как демон (по умолчанию); переопределить с помощью --nodaemon | (Поддерживается во всех выпусках NDB на основе MySQL 5.7) | |
| Прочитать заданный файл после чтения глобальных файлов | (Поддерживается во всех выпусках NDB на основе MySQL 5.7) | |
| Прочитать параметры по умолчанию только из указанного файла | (Поддерживается во всех выпусках NDB на основе MySQL 5.7) | |
| Также читать группы с concat(group, suffix) | (Поддерживается во всех выпусках NDB на основе MySQL 5.7) | |
| Запустить ndbd в фоновом режиме, для целей отладки (подразумевает --nodaemon) | (Поддерживается во всех выпусках NDB на основе MySQL 5.7) | |
| Отобразить текст справки и выйти | (Поддерживается во всех выпусках NDB на основе MySQL 5.7) | |
| Выполнить начальный запуск ndbd, включая очистку файловой системы; обратитесь к документации перед использованием этой опции | (Поддерживается во всех выпусках NDB на основе MySQL 5.7) | |
| Выполнить частичный начальный запуск (требуется --nowait-nodes) | (Поддерживается во всех выпусках NDB на основе MySQL 5.7) | |
| Используется для установки процесса узла данных в качестве службы Windows; не применяется на других платформах | (Поддерживается во всех выпусках NDB на основе MySQL 5.7) | |
| Управление размером буфера журнала; для использования при отладке с большим количеством генерируемых сообщений журнала; по умолчанию достаточно для обычных операций | ДОБАВЛЕНО: NDB 7.6.6 | |
| Прочитать указанный путь из файла входа | (Поддерживается во всех выпусках NDB на основе MySQL 5.7) | |
| Установить строку подключения для подключения к ndb_mgmd. Синтаксис: "[nodeid=id;][host=]hostname[:port]". Переопределяет записи в NDB_CONNECTSTRING и my.cnf | (Поддерживается во всех выпусках NDB на основе MySQL 5.7) | |
| То же, что и --ndb-connectstring | (Поддерживается во всех выпусках NDB на основе MySQL 5.7) | |
| Установить идентификатор узла для этого узла, переопределяя любой идентификатор, установленный с помощью --ndb-connectstring | (Поддерживается во всех выпусках NDB на основе MySQL 5.7) | |
| Не запускать ndbd как демон; для целей тестирования | (Поддерживается во всех выпусках NDB на основе MySQL 5.7) | |
| Не читать параметры по умолчанию из любого файла параметров, кроме файла входа | (Поддерживается во всех выпусках NDB на основе MySQL 5.7) | |
| Не запускать ndbd немедленно; ndbd ожидает команды запуска от ndb_mgm | (Поддерживается во всех выпусках NDB на основе MySQL 5.7) | |
| Не ждать запуска этих узлов данных (принимает список идентификаторов узлов через запятую); требуется --ndb-nodeid | (Поддерживается во всех выпусках NDB на основе MySQL 5.7) | |
| Включить оптимизации для выбора узлов для транзакций. Включено по умолчанию; используйте --skip-ndb-optimized-node-selection для отключения | (Поддерживается во всех выпусках NDB на основе MySQL 5.7) | |
| Вывести список аргументов программы и выйти | (Поддерживается во всех выпусках NDB на основе MySQL 5.7) | |
| Используется для удаления процесса узла данных, который ранее был установлен в качестве службы Windows; не применяется на других платформах | (Поддерживается во всех выпусках NDB на основе MySQL 5.7) | |
| Отобразить текст справки и выйти; то же, что и --help | (Поддерживается во всех выпусках NDB на основе MySQL 5.7) | |
| Записать дополнительную отладочную информацию в журнал узла | (Поддерживается во всех выпусках NDB на основе MySQL 5.7) | |
| Отобразить информацию о версии и выйти | (Поддерживается во всех выпусках NDB на основе MySQL 5.7) |
Все эти параметры также применяются к многопоточной версии этой программы (ndbmtd) и вы можете заменить "“ndbmtd” на "“ndbd” везде, где встречается последнее в этом разделе.
-
--bind-addressФормат командной строки --bind-address=nameТип String Значение по умолчанию Заставляет ndbd привязываться к определенному сетевому интерфейсу (имя хоста или IP-адрес). У этого параметра нет значения по умолчанию.
-
--character-sets-dirФормат командной строки --character-sets-dir=pathКаталог, содержащий кодировки символов.
-
--connect-delay=#Формат командной строки --connect-delay=#Устарело Да (удалено в 5.7.36-ndb-7.6.21) Тип Numeric Значение по умолчанию 5Минимальное значение 0Максимальное значение 3600Определяет время ожидания между попытками связаться с сервером управления при запуске (количество попыток контролируется параметром
--connect-retries). Значение по умолчанию — 5 секунд.Этот параметр устарел и может быть удален в будущей версии NDB Cluster. Используйте
--connect-retry-delayвместо него. -
--connect-retries=#Формат командной строки --connect-retries=#Тип Numeric Значение по умолчанию 12Минимальное значение (≥ 5.7.36-ndb-7.6.21) -1Минимальное значение (≥ 5.7.36-ndb-7.5.25) -1Минимальное значение (≤ 5.7.36-ndb-7.5.24) 0Минимальное значение (≤ 5.7.36-ndb-7.6.20) 0Минимальное значение 0Максимальное значение 65535Задает количество попыток повторного подключения перед отказом; 0 означает только 1 попытку (и без повторов). Значение по умолчанию — 12 попыток. Время ожидания между попытками контролируется параметром
--connect-retry-delay.Начиная с NDB 7.5.25 и NDB 7.6.21, вы можете установить этот параметр в -1, в этом случае процесс узла данных будет бесконечно пытаться установить соединение.
-
--connect-retry-delay=#Формат командной строки --connect-retry-delay=#Тип Numeric Значение по умолчанию 5Минимальное значение 0Максимальное значение 4294967295Определяет время ожидания между попытками связаться с сервером управления при запуске (время между попытками контролируется параметром
--connect-retries). Значение по умолчанию — 5 секунд.Этот параметр заменяет параметр
--connect-delay, который теперь устарел и может быть удален в будущей версии NDB Cluster.Сокращенная форма
-rдля этого параметра устарела, начиная с NDB 7.5.25 и NDB 7.6.21, и может быть удалена в будущей версии NDB Cluster. Используйте полную форму вместо неё. -
--connect-stringФормат командной строки --connect-string=connection_stringТип String Значение по умолчанию [none]То же, что и
--ndb-connectstring. -
--core-fileФормат командной строки --core-fileЗаписывает дамп памяти при ошибке; используется для отладки.
-
--daemon,-dФормат командной строки --daemonИнструктирует ndbd или ndbmtd выполнять работу в качестве демона. Это поведение по умолчанию.
--nodaemonможно использовать, чтобы предотвратить выполнение процесса в качестве демона.Этот параметр не оказывает никакого влияния при запуске ndbd или ndbmtd на платформах Windows.
-
--defaults-extra-fileФормат командной строки --defaults-extra-file=pathТип String Значение по умолчанию [none]Считывает заданный файл после считывания глобальных файлов.
-
--defaults-fileФормат командной строки --defaults-file=pathТип String Значение по умолчанию [none]Считывает параметры по умолчанию только из заданного файла.
-
--defaults-group-suffixФормат командной строки --defaults-group-suffix=stringТип String Значение по умолчанию [none]Также считывает группы с concat(group, suffix).
-
--foregroundФормат командной строки --foregroundЗаставляет ndbd или ndbmtd выполняться как фоновый процесс, в основном для целей отладки. Этот параметр подразумевает параметр
--nodaemon.Этот параметр не оказывает никакого влияния при запуске ndbd или ndbmtd на платформах Windows.
-
--helpФормат командной строки --helpОтображает справку и завершает работу.
-
--initialФормат командной строки --initialИнструктирует ndbd выполнить начальный запуск. Начальный запуск удаляет все файлы, созданные для восстановления предыдущими экземплярами ndbd, и пересоздаёт файлы журнала восстановления. На некоторых операционных системах этот процесс может занять значительное время.
Начальный запуск с параметром
--initialследует использовать только в особых случаях при запуске процесса ndbd, так как этот параметр приводит к удалению всех файлов из файловой системы NDB Cluster и пересозданию всех файлов журнала восстановления. Эти случаи перечислены ниже:При выполнении обновления программного обеспечения, изменившего содержимое каких-либо файлов.
При перезапуске узла с новой версией ndbd.
В качестве крайнего средства, если по какой-либо причине перезапуск узла или системы постоянно завершается ошибкой. В этом случае следует знать, что из-за удаления данных из файлов этот узел больше нельзя использовать для восстановления данных.
ПредупреждениеДля предотвращения возможной потери данных рекомендуется не использовать параметр
--initialвместе сStopOnError = 0. Вместо этого установитеStopOnErrorв 0 вconfig.iniтолько после запуска кластера, а затем перезапустите узлы данных в обычном режиме — то есть без параметра--initial. Подробное описание этой проблемы см. в описании параметраStopOnError. (Ошибка #24945638)Использование этого параметра предотвращает действие параметров конфигурации
StartPartialTimeoutиStartPartitionedTimeout.ВажноЭтот параметр не влияет на следующие типы файлов:
Файлы резервных копий, которые уже были созданы затронутым узлом
Файлы данных NDB Cluster Disk (см. Раздел 21.6.11, «Таблицы данных NDB Cluster Disk»).
Этот параметр также не влияет на восстановление данных узлом данных, который только что начал работу (или перезапускается) с уже работающих узлов данных. Это восстановление происходит автоматически и не требует вмешательства пользователя в нормально работающем NDB Cluster.
Разрешено использовать этот параметр при первом запуске кластера (то есть до создания каких-либо файлов узлов данных), однако это не обязательно.
-
--initial-startФормат командной строки --initial-startЭтот параметр используется при выполнении частичного начального запуска кластера. Каждый узел должен быть запущен с этим параметром, а также с параметром
--nowait-nodes.Предположим, у вас есть кластер из 4 узлов, узлы данных которых имеют ID 2, 3, 4 и 5, и вы хотите выполнить частичный начальный запуск, используя только узлы 2, 4 и 5, исключая узел 3:
$>
ndbd --ndb-nodeid=2 --nowait-nodes=3 --initial-start$>ndbd --ndb-nodeid=4 --nowait-nodes=3 --initial-start$>ndbd --ndb-nodeid=5 --nowait-nodes=3 --initial-startПри использовании этого параметра необходимо также указать идентификатор узла для запускаемого узла данных с помощью параметра
--ndb-nodeid.ВажноНе путайте этот параметр с параметром
--nowait-nodesдля ndb_mgmd, который можно использовать для запуска кластера, настроенного с несколькими серверами управления, без необходимости запуска всех серверов управления. -
--install[=name]Формат командной строки --install[=name]Специфичное для платформы Windows Тип Строка Значение по умолчанию ndbdПриводит к установке ndbd в качестве службы Windows. Дополнительно можно указать имя службы; если оно не задано, имя службы по умолчанию —
ndbd. Хотя предпочтительнее указывать другие параметры программы ndbd в файле конфигурацииmy.iniилиmy.cnf, возможно использовать его вместе с--install. Однако в таких случаях параметр--installдолжен быть указан первым, прежде чем будут заданы другие параметры, для успешной установки службы Windows.В общем случае не рекомендуется использовать этот параметр вместе с параметром
--initial, поскольку это приводит к очистке и пересозданию файловой системы узла данных каждый раз при остановке и запуске службы. Также следует соблюдать крайнюю осторожность, если вы планируете использовать другие параметры программы ndbd, влияющие на запуск узлов данных, включая--initial-start,--nostartи--nowait-nodes, вместе с--install, и вы должны быть абсолютно уверены, что вы полностью понимаете и учитываете все возможные последствия этого.Параметр
--installне имеет эффекта на платформах, отличных от Windows. -
--logbuffer-size=#Формат командной строки --logbuffer-size=#Введено 5.7.22-ndb-7.6.6 Тип Целое число Значение по умолчанию 32768Минимальное значение 2048Максимальное значение 4294967295Устанавливает размер буфера журнала узла данных. При отладке с большим количеством дополнительных записей журнала возможно, что буфер журнала заполнится, если сообщений журнала будет слишком много, в этом случае некоторые сообщения журнала могут быть потеряны. Это не должно происходить при нормальной работе.
-
--login-pathФормат командной строки --login-path=pathТип Строка Значение по умолчанию [none]Читает указанный путь из файла входа.
-
--ndb-connectstringФормат командной строки --ndb-connectstring=connection_stringТип Строка Значение по умолчанию [none]Устанавливает строку подключения для подключения к ndb_mgmd. Синтаксис: "[nodeid=id;][host=]hostname[:port]". Переопределяет записи в NDB_CONNECTSTRING и my.cnf.
-
--ndb-mgmd-hostФормат командной строки --ndb-mgmd-host=connection_stringТип Строка Значение по умолчанию [none]То же, что и
--ndb-connectstring.
-
--ndb-nodeidФормат командной строки --ndb-nodeid=#Тип Целое число Значение по умолчанию [none]Установка идентификатора узла для данного узла, перезаписывая любой идентификатор, установленный параметром
--ndb-connectstring. -
--ndb-optimized-node-selectionФормат командной строки --ndb-optimized-node-selectionВключение оптимизаций для выбора узлов для транзакций. Включено по умолчанию; используйте
--skip-ndb-optimized-node-selectionдля отключения. -
--nodaemonФормат командной строки --nodaemonПредотвращает выполнение ndbd или ndbmtd как демона. Этот параметр переопределяет параметр
--daemon. Это полезно для перенаправления вывода на экран при отладке двоичного файла.По умолчанию ndbd и ndbmtd на Windows выполняются в фоновом режиме, что делает этот параметр ненужным на платформах Windows, где он не имеет эффекта.
-
--no-defaultsФормат командной строки --no-defaultsНе читать параметры по умолчанию из файла параметров, кроме файла входа.
-
--nostart,-nФормат командной строки --nostartУказывает ndbd не запускаться автоматически. При использовании этого параметра, ndbd подключается к серверу управления, получает данные конфигурации из него и инициализирует объекты связи. Однако он не запускает движок исполнения до тех пор, пока сервер управления явно не запросит этого, выдав соответствующую команду
STARTв клиенте управления (см. Раздел 21.6.1, «Команды в клиенте управления кластером NDB»). -
--nowait-nodes=node_id_1[,node_id_2[, ...]]Формат командной строки --nowait-nodes=listТип Строка Значение по умолчанию Этот параметр принимает список узлов данных, для которых кластер не ожидает начала работы.
Это можно использовать для запуска кластера в разнесённом состоянии. Например, для запуска кластера только с половиной узлов данных (узлы 2, 3, 4 и 5) в 4-узловом кластере, вы можете запустить каждый процесс ndbd с помощью
--nowait-nodes=3,5. В этом случае кластер запускается как только узлы 2 и 4 подключатся и не будет ждатьStartPartitionedTimeoutмиллисекунд для подключения узлов 3 и 5, как это обычно происходит.Если вы хотите запустить тот же кластер, что и в предыдущем примере, но без одного ndbd (например, если машина хоста для узла 3 потерпела отказ оборудования), то запустите узлы 2, 4 и 5 с помощью
--nowait-nodes=3. Затем кластер запускается как только узлы 2, 4 и 5 подключатся и не будут ждать запуска узла 3. -
--print-defaultsФормат командной строки --print-defaultsВывод списка аргументов программы и выход.
-
Формат командной строки --remove[=name]Специфично для платформы Windows Тип Строка Значение по умолчанию ndbdПринуждает процесс ndbd, который ранее был установлен как служба Windows, быть удалённым. Дополнительно, вы можете указать имя службы для удаления; если не указано, имя службы по умолчанию равно
ndbd.Параметр
--removeне имеет эффекта на платформах, отличных от Windows. -
--usageФормат командной строки --usageОтображение текста справки и выход; то же самое, что и
--help. -
--verbose,-vПриводит к записи дополнительного отладочного вывода в журнал узла.
В NDB 7.6 вы также можете использовать
NODELOG DEBUG ONиNODELOG DEBUG OFFдля включения и выключения этого дополнительного логирования во время работы узла данных. -
--versionФормат командной строки --versionОтображение информации о версии и выход.
ndbd генерирует набор файлов журнала, которые размещаются в каталоге, указанном в файле конфигурации config.ini по параметру DataDir.
Эти файлы журналов перечислены ниже. node_id и представляет собой уникальный идентификатор узла. Например, ndb_2_error.log — это журнал ошибок, сгенерированный узлом данных, у которого идентификатор узла равен 2.
-
Файл
ndb_содержит записи обо всех сбоях, которые произошли в процессе ndbd. Каждая запись в этом файле содержит краткое сообщение об ошибке и ссылку на файл отладки для данного сбоя. Типичная запись в этом файле может выглядеть так:node_id_error.logDate/Time: Saturday 30 July 2004 - 00:20:01 Type of error: error Message: Internal program error (failed ndbrequire) Fault ID: 2341 Problem data: DbtupFixAlloc.cpp Object of reference: DBTUP (Line: 173) ProgramName: NDB Kernel ProcessID: 14909 TraceFile: ndb_2_trace.log.2 ***EOM***
Список возможных кодов выхода и сообщений ndbd, генерируемых при преждевременной остановке процесса узла данных, можно найти в Сообщения об ошибках узла данных.
ВажноПоследняя запись в файле журнала ошибок не обязательно является самой новой (и скорее всего, не является). Записи в журнале ошибок не упорядочены по времени; они соответствуют порядку файлов отладки, определяемому в файле
ndb_(см. ниже). Таким образом, записи журнала ошибок перезаписываются циклически, а не последовательно.node_id_trace.log.next -
Файл
ndb_— это файл отладки, описывающий события, предшествовавшие ошибке. Эта информация полезна для анализа командой разработчиков NDB Cluster.node_id_trace.log.trace_idМожно настроить количество создаваемых файлов отладки перед перезаписью старых файлов.
trace_id— это число, увеличиваемое для каждого последующего файла отладки. ndb_— это файл, который отслеживает следующий номер файла отладки для присвоения.node_id_trace.log.nextndb_— это файл, содержащий все данные, выведенные процессом ndbd. Этот файл создается только в том случае, если ndbd запускается как демон, что является стандартным поведением.node_id_out.logndb_— это файл, содержащий идентификатор процесса ndbd при запуске как демона. Он также выполняет функцию файла блокировки, чтобы предотвратить запуск узлов с одинаковым идентификатором.node_id.pidndb_используется только в отладочных версиях ndbd, где можно отслеживать все входящие, исходящие и внутренние сообщения с данными в процессе ndbd.node_id_signal.log
Рекомендуется не использовать каталог, смонтированный через NFS, так как в некоторых средах это может привести к проблеме, когда блокировка в файле .pid остается активной даже после завершения процесса.
Для запуска ndbd может потребоваться указать имя хоста сервера управления и порт, на котором он прослушивает. Также можно указать идентификатор узла, который должен использовать процесс.
$> ndbd --connect-string="nodeid=2;host=ndb_mgmd.mysql.com:1186"
Дополнительную информацию об этой проблеме см. в Раздел 21.4.3.3, «Строки подключения NDB Cluster». Более подробную информацию о параметрах конфигурации узла данных см. в Раздел 21.4.3.6, «Определение узлов данных NDB Cluster».
При запуске ndbd фактически запускаются два процесса. Первый называется «“процессом-ангелом”»; его единственная задача — определить момент завершения процесса и, если настроено, перезапустить процесс ndbd. Таким образом, если вы попытаетесь убить ndbd с помощью команды Unix kill, необходимо убить оба процесса, начиная с процесса-ангела. Предпочтительный метод завершения процесса ndbd — использовать клиент управления и остановить процесс оттуда.
Процесс выполнения использует один поток для чтения, записи и сканирования данных, а также для всех других операций. Этот поток реализован асинхронно, чтобы легко обрабатывать тысячи одновременных действий. Кроме того, поток-сторож контролирует поток выполнения, чтобы убедиться, что он не зависает в бесконечном цикле. Пул потоков обрабатывает ввод-вывод файлов, каждый поток может обрабатывать один открытый файл. Потоки также могут использоваться для подключений транспортеров транспортерами в процессе ndbd. В многопроцессорной системе, выполняющей большое количество операций (включая обновления), процесс ndbd может использовать до 2 процессоров, если ему это разрешено.
Для машины с большим количеством процессоров можно использовать несколько процессов ndbd, относящихся к различным группам узлов; однако такая конфигурация по-прежнему считается экспериментальной и не поддерживается для MySQL 5.7 в рабочей среде. См. Раздел 21.2.7, «Известные ограничения NDB Cluster».
© 2025 Oracle
Licensed under the GPLv2 License.