Глава 4. Ядерные блоки NDB

Эта глава предоставляет информацию о главных программных модулях, составляющих ядро NDB. Файлы, содержащие внедрения этих блоков, могут быть найдены в нескольких каталогах в storage/ndb/src/kernel/blocks/ дерева исходных текстов NDB Cluster.

Как описано в другом месте, ядро NDB использует много различных потоков, чтобы выполнить различные задачи. Ядерные блоки связаны с этими потоками как показано в следующей таблице:

Таблица 4.1. Ядерные блоки NDB и потоки ядра NDB

Поток (ThreadConfig) Ядерные блоки
Main (main) CMVMI (первичный), DBINFO, DBDICT, DBDIH, NDBCNTR, QMGR, DBUTIL
LDM (ldm) DBTUP, DBACC, DBLQH (primary), DBTUX, BACKUP, TSMAN, LGMAN, PGMAN, RESTORE
TC (tc) DBTC (первичный), TRIX
Replication (rep) SUMA (первичный), DBSPJ
Receiver (recv) CMVMI
Sender (send) CMVMI
I/O (io) NDBFS
Query (query) DBQTUP, DBQACC, DBQLQH, DBQTUX, QBACKUP QRESTORE
Recovery (recover) DBQTUP, DBQACC, DBQLQH, DBQTUX, QBACKUP QRESTORE

NDB 8.0.22 и позже предусматривает следующие комбинации:

query и recover были добавлены в NDB 8.0.23.

Можно получить больше информации об этих потоках из документации для параметра конфигурации ThreadConfig узла данных.

4.1. Блок BACKUP

Этот блок ответственен за обработку резервных копий онлайн и контрольных точек. Это находится в storage/ndb/src/kernel/blocks/backup/ и содержит следующие файлы:

QBACKUP это подтип этого блока, используемый для запроса и потока восстановления, добавленных в NDB 8.0.23.

4.2. Блок CMVMI

Этот блок ответственен за управление конфигурацией взаимодействия между ядерными блоками и виртуальной машиной NDB, а также работы группы que и транспортеров группы. Это расположено в storage/ndb/src/kernel/blocks/cmvmi и содержит эти файлы:

Во время запуска этот блок ассигнует большую часть памяти, необходимой для буферов, используемых ядром NDB, таких как определенные IndexMemory, DataMemory и DiskPageBufferMemory. В это время CMVMI также получает стартовый порядок узлов и выполняет много функций, посредством чего программные модули могут затронуть среду выполнения.

4.3. Блок DBACC

Также называемый ACC, это модуль управления блокировкой и доступом. Это также ответственно за хранение первичного ключа и индексы хэша уникального ключа. Этот блок расположен в storage/ndb/src/kernel/blocks/dbacc, который содержит следующие файлы:

Блок ACC обрабатывает структуры индекса базы данных, которые сохранены на 8K страницах. Блокировки базы данных также обработаны в блоке ACC.

Когда новый кортеж вставляется, блок TUP хранит кортеж в подходящем пространстве и возвращает индекс (ссылку на адрес кортежа в памяти). ACC хранит первичный ключ и этот индекс кортежа в хэш-таблице.

Как блок TUP, блок ACC реализует часть протокола контрольной точки. Это также используется для регистрации отмен. Это осуществляется классом Dbacc, определенным в storage/ndb/src/kernel/blocks/dbacc/DbaccMain.hpp.

DBQACC это подтип этого блока, используемый для запросов и восстановления, добавленных в NDB 8.0.23.

См. также раздел 4.10.

4.4. Блок DBDICT

Этот блок, блок словаря данных, находится в storage/ndb/src/kernel/blocks/dbdict. Информация о словаре данных копируется всем блокам DICT кластера. Это единственный блок кроме DBTC, к которому приложения могут отправить прямые запросы.

DBDICT ответственнен за руководящие метаданные (использующие узел основных данных) включая определения для таблиц, колонок, индексов, табличных пространств, файлов журнала, групп файла журнала и других объектов данных.

Этот блок осуществляется в следующих файлах:

4.5. Блок DBDIH

Этот блок предоставляет услуги управления распределением данных для получения информации о распределении в каждой таблице, разделении таблицы и точной копии фрагмента каждого разделения. Это также ответственно за обработку местных и глобальных контрольных точек. DBDIH также реализует системные перезапуски и управление узлом. Этот блок осуществляется в следующих файлах, все они в каталоге storage/ndb/src/kernel/blocks/dbdih:

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

Этот блок осуществляется как класс Dbdih, определение которого может быть найдено в файле storage/ndb/src/kernel/blocks/dbdih/Dbdih.hpp.

4.6. Блок DBINFO

Блок DBINFO оказывает поддержку для информационной базы данных ndbinfo, применяемой для получения информации о внутренностях узла данных.

Узел API общается с этим блоком, чтобы получить данные ndbinfo, используя сигналы DBINFO_SCANREQ и DBINFO_SCANCONF. Узел API общается с DBINFO на узле основных данных, который общается с DBINFO на остающихся узлах данных. Блок DBINFO на каждом узле данных приносит информацию от других ядерных блоков на узле, включая DBACC, DBTUP, BACKUP, DBTC, SUMA, DBUTIL, TRIX, DBTUX, DBDICT, CMVMI, DBLQH, LGMAN, PGMAN, DBSPJ, THRMAN, TRPMAN и QMGR. Локальный DBINFO передает информацию обратно в DBINFO на главном узле, который в свою очередь транслирует ее назад к узлу API.

Этот блок осуществляется в файле storage/ndb/src/kernel/blocks/dbinfo/Dbinfo.hpp как класс Dbinfo. Файл Dbinfo.cpp в том же самом каталоге определяет методы этого класса (главным образом, сигналы обработчикам). Также в каталоге dbinfo есть текстовый файл DbinfoScan.txt, который предоставляет информацию о передаче сообщений DBINFO.

4.7. Блок DBLQH

Это местный блок запроса низкого уровня, который управляет данными и транзакциями, местными к узлам данных группы, и действует как координатор двухфазных фиксаций. Это ответственно (когда вызвано операционным координатором) за выполнение операций на кортежах, выполняя эту задачу с помощью блока DBACC (который управляет структурами индекса) и DBTUP (который управляет кортежами). Это составлено из следующих файлов в storage/ndb/src/kernel/blocks/dblqh:

Этот блок также обрабатывает журналов отката и помогает наблюдать блоки DBACC, DBTUP, LGMAN, TSMAN, PGMAN и BACKUP. Это осуществляется как класс Dblqh, определенный в файле storage/ndb/src/kernel/blocks/dblqh/Dblqh.hpp.

DBQLQH это подтип этого блока, используемого для запросов и восстановления, добавленных в NDB 8.0.23.

4.8. Блок DBSPJ

Этот блок осуществляет многократные курсоры в ядре NDB, обеспечивая обращения для соединений, сниженных от узлов SQL. Это содержит следующие файлы, которые могут быть найдены в storage/ndb/src/kernel/blocks/dbspj:

4.9. Блок DBTC

Это операционный координатор, который обращается с распределенными транзакциями и другими операциями по данным на глобальном уровне (в противоположность DBLQH, который занимается такими проблемами на отдельных узлах данных). В исходном коде это расположено в каталоге storage/ndb/src/kernel/blocks/dbtc, который содержит эти файлы:

Любой узел данных может действовать как операционный координатор.

Блок DBTC осуществляется как класс Dbtc.

Операционный координатор это ядерный интерфейс, к которому приложение отправляют свои запросы. Это устанавливает связи с различными блоками в системе, чтобы выполнить транзакцию и решает, какой узел будет обращаться с каждой транзакцией, посылая сигнал подтверждения на результате приложению так, чтобы приложение могло проверить, что результат, полученный от блока TUP, правилен.

Этот блок также обращается с уникальными индексами, которые должны быть скоординированы через все узлы данных одновременно.

4.10. Блок DBTUP

Это менеджер кортежей, который справляется с физическим хранением данных о группе. Это состоит из следующих файлов в каталоге storage/ndb/src/kernel/blocks/dbtup:

Этот блок также наблюдает изменения в кортежах.

DBQTUP это подтип этого блока, используемого для запросов и потоков восстановления, добавленных в NDB 8.0.23.

4.11. Блок DBTUX

Этот ядерный блок предоставляет сервисы местному управлению упорядоченными индексами. Это состоит из следующих файлов в каталоге storage/ndb/src/kernel/blocks/dbtux:

DBQTUX это подтип этого блока, используемого для запросов и потоков восстановления, добавленных в NDB 8.0.23.

4.12. Блок DBUTIL

Этот блок предоставляет внутренние интерфейсы транзакции и операциям по данным, выполняя существенные операции на сигналах, переданных между узлами. Этот блок осуществляет транзакционные услуги, которые могут использоваться другими блоками. Это также используется в создании индексов онлайн и находится в каталоге storage/ndb/src/kernel/blocks/dbutil, который включает эти файлы:

Среди обязанностей, выполненных этим блоком, обслуживание последовательностей для резервных ID и других распределенных идентификаторов.

4.13. Блок LGMAN

Этот блок, менеджер группы регистрации, ответственен за обработку регистраций для дисковых таблиц данных. Это осуществляется в этих файлах в каталоге storage/ndb/src/kernel/blocks:

4.14. Блок NDBCNTR

Это блок управления группой, который обращается с инициализацией блока и конфигурацией. Во время процесса запуска узла данных это запускается из блока QMGR и продолжает процесс. Это также помогает с запланированными закрытиями узлов данных. Этот блок осуществляется в storage/ndb/src/kernel/blocks/ndbcntr, который содержит эти файлы:

4.15. Блок NDBFS

Этот блок обеспечивает NDB уровень абстракции файловой системы и расположен в каталоге storage/ndb/src/kernel/blocks/ndbfs, который содержит следующие файлы:

4.16. Блок PGMAN

Этот блок обеспечивает страницу и услуги по организации буферизации данных для дисковых таблиц данных. Включает эти файлы:

4.17. Блок QMGR

Это блок управления логическим кластером, обращается с членством узла в группе, используя механизм синхронизации. QMGR ответственно за опрос узлов данных, когда неудача узла данных происходит и решая, что узел на самом деле потерпел неудачу и должен быть исключен из группы. Этот блок содержит следующие файлы из каталога storage/ndb/src/kernel/blocks/qmgr:

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

Блок QMGR осуществляется классом Qmgr, определение которого находится в файле storage/ndb/src/kernel/blocks/qmgr/Qmgr.hpp.

4.18. Блок RESTORE

Этот блок осуществляется в файлах restore.hpp, restore.cpp, RestoreProxy.hpp и RestoreProxy.cpp в каталоге storage/ndb/src/kernel/blocks. Это обращается с восстановлением группы из резервных копий онлайн. Это также используется, чтобы восстановить местные контрольные точки как часть процесса старта узла данных.

QRESTORE это подтип этого блока, используемого для запроса и потоков восстановления, добавленных в NDB 8.0.23.

4.19. Блок SUMA

Менеджер подписки группы, который обращается с регистрацией событий и сообщающими функциями. Это также заметно фигурирует в NDB Cluster Replication. SUMA состоит из следующих файлов в каталоге storage/ndb/src/kernel/blocks/suma/:

4.20. Блок THRMAN

Это блок управления потоком, выполняется в каждом потоке ядра NDB. Этот блок также используется для оценки использования CPU и для записи разной информации в таблицы threadblocks и threadstat информационной базы данных ndbinfo.

Блок THRMAN осуществляется как класс Thrman в файле storage/ndb/src/kernel/blocks/thrman.hpp. thrman.cpp в том же каталоге определяет метод measure_cpu_usage() этого класса для измерения использования CPU данным потоком. Это также определяет метод execDBINFO_SCANREQ(), который пишет это и другую информацию, такую как идентификационный номер потока и номер блока в таблицы threadblocks и threadstat.

4.21. Блок TRPMAN

Это блок управления транспортировкой сигнала ядра NDB, осуществленное в storage/ndb/src/kernel/blocks/trpman.hpp как класс Trpman, методы которого определяются в trpman.cpp, тоже в каталоге blocks.

TRPMAN также ответственнен за написание строк в таблицу ndbinfo.transporters.

4.22. Блок TSMAN

Это менеджер табличномго пространства для данных дисковых таблиц, осуществленный в следующих файлах в storage/ndb/src/kernel/blocks:

4.23. Блок TRIX

Этот ядерный блок ответственен за обработку внутренних триггеров и уникальных индексов. TRIX, подобно DBUTIL, является сервисным блоком, содержащим много вспомогательных функций для создания индексов и обработки сигналов между узлами. Это осуществляется в следующих файлах в storage/ndb/src/kernel/blocks/trix: