25.5.1 ndbd — Демон узла данных кластера NDB
Бинарник ndbd предоставляет однопоточную версию процесса, используемого для обработки всех данных в таблицах, использующих NDBCLUSTER движок хранения. Этот процесс узла данных позволяет узлу данных выполнять обработку распределённых транзакций, восстановление узла, создание контрольных точек на диск, онлайн-резервное копирование и связанные задачи. В NDB 8.4.1 и более поздних версиях при запуске 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, показаны в следующей таблице. Дополнительные описания следуют за таблицей.
Все эти параметры также применяются к многопоточной версии этой программы (ndbmtd), и вы можете заменить “ndbmtd” на “ndbd” там, где это встречается в этом разделе.
-
Формат командной строки --bind-address=nameТип String Значение по умолчанию Заставляет ndbd привязываться к определенному сетевому интерфейсу (имя хоста или IP-адрес). Этот параметр не имеет значения по умолчанию.
-
Формат командной строки --character-sets-dir=pathКаталог, содержащий кодировки символов.
-
Формат командной строки --connect-delay=#Устарел Да Тип Numeric Значение по умолчанию 5Минимальное значение 0Максимальное значение 3600Определяет время ожидания между попытками связаться с сервером управления при запуске (количество попыток контролируется параметром
--connect-retries). Значение по умолчанию — 5 секунд.Этот параметр устарел и может быть удален в будущих версиях NDB Cluster. Используйте
--connect-retry-delayвместо него. -
Формат командной строки --connect-retries=#Тип Numeric Значение по умолчанию 12Минимальное значение -1Максимальное значение 65535Устанавливает количество попыток повторного подключения перед отказом; 0 означает только 1 попытку (и без повторных попыток). Значение по умолчанию — 12 попыток. Время ожидания между попытками контролируется параметром
--connect-retry-delay.Также можно установить этот параметр в -1, в этом случае процесс узла данных будет бесконечно пытаться установить соединение.
-
Формат командной строки --connect-retry-delay=#Тип Numeric Значение по умолчанию 5Минимальное значение 0Максимальное значение 4294967295Определяет время ожидания между попытками связаться с сервером управления при запуске (время между попытками контролируется параметром
--connect-retries). Значение по умолчанию — 5 секунд.Этот параметр заменяет параметр
--connect-delay, который теперь устарел и будет удален в будущих версиях NDB Cluster.Сокращенная форма
-rдля этого параметра также устарела и, следовательно, подлежит удалению. Используйте полную форму вместо нее. -
Формат командной строки --connect-string=connection_stringТип String Значение по умолчанию [none]То же самое, что и
--ndb-connectstring. -
Формат командной строки --core-fileЗаписывает дамп памяти при ошибке; используется для отладки.
-
--daemon,-dФормат командной строки --daemonИнструктирует ndbd или ndbmtd работать как демон. Это поведение по умолчанию.
--nodaemonможно использовать, чтобы предотвратить запуск процесса как демона.Этот параметр не оказывает влияния при запуске ndbd или ndbmtd на платформах Windows.
-
Формат командной строки --defaults-extra-file=pathТип String Значение по умолчанию [none]Читает указанный файл после чтения глобальных файлов.
-
Формат командной строки --defaults-file=pathТип String Значение по умолчанию [none]Читает параметры по умолчанию только из указанного файла.
-
Формат командной строки --defaults-group-suffix=stringТип String Значение по умолчанию [none]Также читает группы с concat(group, suffix).
-
Формат командной строки --filesystem-password=passwordПередает пароль шифрования и дешифрования файловой системы процессу узла данных с помощью
stdin,ttyили файлаmy.cnf.Требуется
EncryptedFileSystem = 1.Для получения дополнительной информации см. Раздел 25.6.14, «Шифрование файловой системы для NDB Cluster».
-
--filesystem-password-from-stdinФормат командной строки --filesystem-password-from-stdin={TRUE|FALSE}Передает пароль шифрования и дешифрования файловой системы процессу узла данных только из
stdin.Требуется
EncryptedFileSystem = 1.Для получения дополнительной информации см. Раздел 25.6.14, «Шифрование файловой системы для NDB Cluster».
-
Формат командной строки --foregroundПринуждает ndbd или ndbmtd работать в фоновом процессе, главным образом для целей отладки. Этот параметр подразумевает параметр
--nodaemon.Данный параметр не имеет эффекта при запуске ndbd или ndbmtd на платформах Windows.
-
Формат командной строки --helpОтображает текст справки и завершает работу.
-
Формат командной строки --initialУказывает ndbd на выполнение начального запуска. Начальный запуск стирает все файлы, созданные для восстановления предыдущими экземплярами ndbd, и пересоздает файлы журнала восстановления. На некоторых операционных системах этот процесс может занять значительное время.
Этот параметр также приводит к удалению всех файлов данных, связанных с табличными пространствами данных «Диск» и файлов журнала отмены, связанных с группами файлов журналов, существовавшими ранее на этом узле данных (см. Раздел 25.6.11, «Табличные пространства данных NDB Cluster на диске»).
Начальный запуск (
--initial) следует использовать только в особых случаях при запуске процесса ndbd, так как он приводит к удалению всех файлов из файловой системы NDB Cluster и пересозданию всех файлов журнала повторного применения. Эти обстоятельства перечислены здесь:При выполнении обновления программного обеспечения, изменившего содержимое любых файлов.
При перезапуске узла с новой версией ndbd.
В качестве крайнего средства, когда по какой-либо причине перезапуск узла или системы неоднократно терпит неудачу. В этом случае следует понимать, что этот узел больше нельзя использовать для восстановления данных из-за уничтожения файлов данных.
ПредупреждениеДля предотвращения потенциальной потери данных рекомендуется не использовать параметр
--initialвместе сStopOnError = 0. Вместо этого установите значениеStopOnErrorв 0 вconfig.iniтолько после запуска кластера, затем перезапустите узлы данных в обычном режиме — без параметра--initial. Смотрите описание параметраStopOnErrorдля подробного объяснения этой проблемы. (Ошибка #24945638)Использование этого параметра предотвращает действие параметров конфигурации
StartPartialTimeoutиStartPartitionedTimeout.ВажноДанный параметр не влияет на файлы резервных копий, которые уже были созданы соответствующим узлом.
Этот параметр также не влияет на восстановление данных узлом данных, который только что начал работать (или перезапускается) с узлов данных, которые уже работают (если они также были запущены с параметром
--initialв рамках начального перезапуска). Это восстановление данных происходит автоматически и не требует вмешательства пользователя в нормально функционирующем кластере NDB.Допустимо использовать этот параметр при первом запуске кластера (то есть до создания каких-либо файлов узла данных), но это не обязательно.
-
Формат командной строки --initial-startЭтот параметр используется при выполнении частичного начального запуска кластера. Каждый узел должен быть запущен с этим параметром, а также с параметром
--nowait-nodes.Предположим, у вас есть кластер из 4 узлов, узлы данных которых имеют идентификаторы 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]Платформа 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=#Тип Целое число Значение по умолчанию 32768Минимальное значение 2048Максимальное значение 4294967295Устанавливает размер буфера журнала узла данных. При отладке с большим количеством дополнительных сообщений в журнале возможно, что буфер журнала заполнится, если будет слишком много сообщений в журнале, в результате чего некоторые сообщения могут быть потеряны. Это не должно происходить в обычном режиме работы.
-
Формат командной строки --login-path=pathТип String Значение по умолчанию [none]Считывает заданный путь из файла входа.
-
Формат командной строки --no-login-pathsПропускает чтение параметров из файла пути входа.
-
Формат командной строки --ndb-connectstring=connection_stringТип String Значение по умолчанию [none]Устанавливает строку подключения для соединения с ndb_mgmd. Синтаксис:
[nodeid=. Перезаписывает записи вid;][host=]hostname[:port]NDB_CONNECTSTRINGиmy.cnf. -
Формат командной строки --ndb-mgmd-host=connection_stringТип String Значение по умолчанию [none]То же самое, что и
--ndb-connectstring. -
Формат командной строки --ndb-mgm-tls=levelТип Enumeration Значение по умолчанию relaxedДопустимые значения relaxedstrictУстанавливает уровень поддержки TLS, необходимый для подключения к серверу управления; один из
relaxedилиstrict.relaxed(по умолчанию) означает, что попытка установить соединение TLS будет предпринята, но успех не обязателен;strictозначает, что для подключения требуется TLS. -
Формат командной строки --ndb-nodeid=#Тип Integer Значение по умолчанию [none]Устанавливает идентификатор узла для этого узла, переопределяя любой идентификатор, установленный с помощью --ndb-connectstring.
-
--ndb-optimized-node-selectionФормат командной строки --ndb-optimized-node-selectionВключает оптимизацию выбора узлов для транзакций. Включено по умолчанию; используйте
--skip-ndb-optimized-node-selectionдля отключения. -
Формат командной строки --ndb-tls-search-path=listТип Путь Значение по умолчанию (Unix) $HOME/ndb-tlsЗначение по умолчанию (Windows) $HOMEDIR/ndb-tlsУказывает список каталогов для поиска файла CA. На платформах Unix имена каталогов разделяются двоеточиями (
:); в системах Windows в качестве разделителя используется символ точки с запятой (;). Ссылка на каталог может быть относительной или абсолютной; она может содержать одну или несколько переменных среды, каждая из которых обозначается предшествующим знаком доллара ($), и расширяется перед использованием.Поиск начинается с самого левого указанного каталога и продолжается слева направо, пока файл не будет найден. Пустая строка обозначает пустой путь поиска, что приводит к сбою всех поисков. Строка, состоящая из одной точки (
.), указывает, что путь поиска ограничен текущим рабочим каталогом.Если путь поиска не указан, используется встроенное значение по умолчанию. Это значение зависит от используемой платформы: в Windows это
\ndb-tls; на других платформах (включая Linux) это$HOME/ndb-tls. Это можно переопределить, скомпилировав NDB Cluster с использованием-DWITH_NDB_TLS_SEARCH_PATH. -
Формат командной строки --nodaemonПредотвращает выполнение ndbd или ndbmtd в качестве демона. Эта опция переопределяет опцию
--daemon. Это полезно для перенаправления вывода на экран при отладке двоичного файла.Поведение по умолчанию для ndbd и ndbmtd в Windows — это запуск на переднем плане, что делает эту опцию ненужной на платформах Windows, где она не оказывает никакого влияния.
-
Формат командной строки --no-defaultsНе считывать параметры по умолчанию из любого файла параметров, кроме файла входа.
-
--nostart,-nФормат командной строки --nostartИнструктирует ndbd не запускаться автоматически. Когда используется этот параметр, ndbd подключается к серверу управления, получает от него данные конфигурации и инициализирует объекты связи. Однако он фактически не запускает ядро выполнения, пока сервер управления не запросит его сделать это. Это можно сделать, отправив соответствующую команду
STARTв клиенте управления (см. Раздел 25.6.1, «Команды в клиенте управления кластером NDB»). -
--nowait-nodes=node_id_1[,node_id_2[, ...]]Формат командной строки --nowait-nodes=listТип String Значение по умолчанию Этот параметр принимает список узлов данных, для которых кластер не ожидает перед запуском.
Это можно использовать для запуска кластера в раздробленном состоянии. Например, чтобы запустить кластер только с половиной узлов данных (узлы 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Выводит список аргументов программы и завершает работу.
-
Формат командной строки --remove[=name]Специфично для платформы Windows Тип Строка Значение по умолчанию ndbdУдаляет процесс ndbd, ранее установленный как служба Windows. Дополнительно можно указать имя службы для удаления; если не задано, имя службы по умолчанию равно
ndbd.Опция
--removeне оказывает влияния на платформы, отличные от Windows. -
Формат командной строки --usageОтображает текст справки и завершает работу; то же, что и --help.
-
--verbose,-vВыводит дополнительную отладочную информацию в журнал узла.
Вы также можете использовать
NODELOG DEBUG ONиNODELOG DEBUG OFFдля включения и выключения этой дополнительной записи журнала во время работы узла данных. -
Формат командной строки --versionОтображает информацию о версии и завершает работу.
ndbd создаёт набор лог-файлов, размещаемых в директории, указанной в файле конфигурации DataDir в разделе config.ini.
Эти лог-файлы перечислены ниже. 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.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"
Дополнительную информацию об этом вопросе см. в разделе 25.4.3.3, «Строки подключения к кластеру NDB». Дополнительные сведения о параметрах конфигурации узлов данных см. в разделе 25.4.3.6, «Определение узлов данных кластера NDB».
При запуске ndbd фактически запускаются два процесса. Первый называется “процессом-ангелом”; его единственная задача — определить момент завершения процесса выполнения и перезапустить процесс ndbd, если это настроено. Таким образом, если вы пытаетесь убить ndbd с помощью команды Unix kill, необходимо убить оба процесса, начиная с процесса-ангела. Предпочтительный метод завершения процесса ndbd — использование клиента управления и остановки процесса оттуда.
Процесс выполнения использует один поток для чтения, записи и сканирования данных, а также для всех других действий. Этот поток реализован асинхронно, чтобы он мог легко обрабатывать тысячи одновременных операций. Кроме того, поток-сторож контролирует поток выполнения, чтобы убедиться, что он не застревает в бесконечном цикле. Пул потоков обрабатывает ввод-вывод файлов, каждый поток может обрабатывать один открытый файл. Потоки также могут использоваться для подключений транспортеров транспортерами в процессе ndbd. В системе с несколькими процессорами, выполняющей большое количество операций (включая обновления), процесс ndbd может потреблять до 2 ЦП, если ему это разрешено.
Для машины с множеством ЦП можно использовать несколько процессов ndbd, принадлежащих различным группам узлов; однако такая конфигурация всё ещё считается экспериментальной и не поддерживается для MySQL 8.4 в рабочей среде. См. раздел 25.2.7, «Известные ограничения кластера NDB».
© 2025 Oracle
Licensed under the GPLv2 License.