25.5.1 ndbd — Демон узла данных кластера NDB
Бинарный файл ndbd предоставляет однопоточную версию процесса, который используется для обработки всех данных в таблицах, использующих движок хранения NDBCLUSTER. Этот процесс узла данных позволяет узлу данных выполнять обработку распределённых транзакций, восстановление узла, создание контрольных точек на диске, онлайн-резервное копирование и связанные задачи. При запуске 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, показаны в следующей таблице. Дополнительные описания следуют за таблицей.
Все эти параметры также применяются к многопоточной версии этой программы (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 означает только одну попытку (и без повторов). Значение по умолчанию — 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Записывает core-файл при ошибке; используется для отладки.
-
--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 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"
Дополнительную информацию об этом вопросе см. в Раздел 25.4.3.3, «Строки подключения NDB Cluster». Дополнительную информацию о параметрах конфигурации узла данных см. в Раздел 25.4.3.6, «Определение узлов данных NDB Cluster».
При запуске ndbd фактически запускаются два процесса. Первый из них называется «процессом ангела»; его единственная задача — обнаружить завершение процесса выполнения и, если это настроено, перезапустить процесс ndbd. Таким образом, если вы попытаетесь убить ndbd с помощью команды Unix kill, необходимо убить оба процесса, начиная с процесса ангела. Предпочтительный способ завершения процесса ndbd — использовать клиент управления и остановить процесс оттуда.
Процесс выполнения использует один поток для чтения, записи и сканирования данных, а также для всех других операций. Этот поток реализован асинхронно, что позволяет легко обрабатывать тысячи одновременных действий. Кроме того, поток-сторож следит за потоком выполнения, чтобы убедиться, что он не завис в бесконечном цикле. Пул потоков обрабатывает ввод-вывод файлов, причем каждый поток может обрабатывать один открытый файл. Потоки также могут использоваться для подключений к транспортеру транспортерами в процессе ndbd. В многопроцессорной системе, выполняющей большое количество операций (включая обновления), процесс ndbd может использовать до 2 ЦП, если ему это разрешено.
Для машины с множеством ЦП можно использовать несколько процессов ndbd, принадлежащих различным группам узлов; однако такая конфигурация по-прежнему считается экспериментальной и не поддерживается для MySQL 9.2 в производственной среде. См. Раздел 25.2.7, «Известные ограничения NDB Cluster».
© 2025 Oracle
Licensed under the GPLv2 License.