21.2.2 Узлы кластера NDB, группы узлов, фрагментные реплики и разделы
В этом разделе рассматривается, как кластер NDB делит и дублирует данные для хранения.
В следующих абзацах обсуждаются ряд концепций, важных для понимания этой темы.
Узел данных. Процесс ndbd или ndbmtd, который хранит одну или несколько фрагментных реплик — то есть копий разделов (обсуждаемых далее в этом разделе), назначенных группе узлов, членом которой является узел.
Каждый узел данных должен располагаться на отдельном компьютере. Хотя можно разместить несколько процессов узлов данных на одном компьютере, такая конфигурация обычно не рекомендуется.
Применительно к процессу ndbd или ndbmtd часто используются термины “узел” и “узел данных” взаимозаменяемо; в этом обсуждении узлы управления (ndb_mgmd процессы) и узлы SQL (mysqld процессы) указываются как таковые.
Группа узлов. Группа узлов состоит из одного или нескольких узлов и хранит разделы или наборы фрагментных реплик (см. следующий пункт).
Количество групп узлов в кластере NDB не настраивается напрямую; оно является функцией количества узлов данных и количества фрагментных реплик (NoOfReplicas параметр конфигурации), как показано здесь:
[# of node groups] = [# of data nodes] / NoOfReplicas
Таким образом, кластер NDB с 4 узлами данных имеет 4 группы узлов, если NoOfReplicas в файле config.ini установлен в 1, 2 группы узлов, если NoOfReplicas установлен в 2, и 1 группу узлов, если NoOfReplicas установлен в 4. Фрагментные реплики обсуждаются позже в этом разделе; для получения дополнительной информации об NoOfReplicas см. Раздел 21.4.3.6 «Определение узлов данных кластера NDB».
Все группы узлов в кластере NDB должны иметь одинаковое количество узлов данных.
Вы можете добавлять новые группы узлов (и, следовательно, новые узлы данных) онлайн в работающий кластер NDB; см. Раздел 21.6.7 «Добавление узлов данных кластера NDB онлайн» для получения дополнительной информации.
Раздел. Это часть данных, хранящихся в кластере. Каждый узел отвечает за хранение по крайней мере одной копии любого раздела, назначенного ему (то есть по крайней мере одной фрагментной реплики), доступной для кластера.
Количество разделов, используемых по умолчанию кластером NDB, зависит от количества узлов данных и количества потоков LDM, используемых узлами данных, как показано здесь:
[# of partitions] = [# of data nodes] * [# of LDM threads]
При использовании узлов данных, работающих под управлением ndbmtd, количество потоков LDM контролируется значением параметра MaxNoOfExecutionThreads. При использовании ndbd имеется один поток LDM, что означает, что количество разделов кластера равно количеству узлов, участвующих в кластере. Это также относится к случаю использования ndbmtd при значении MaxNoOfExecutionThreads 3 или меньше. (Следует учитывать, что количество потоков LDM увеличивается со значением этого параметра, но не строго линейно, и существуют дополнительные ограничения на его настройку; см. описание MaxNoOfExecutionThreads для получения дополнительной информации.)
NDB и пользовательское разбиение. Кластер NDB обычно автоматически разделяет таблицы NDBCLUSTER. Однако также возможно использовать пользовательское разбиение с таблицами NDBCLUSTER. Это ограничено следующими условиями:
Только схемы разбиения
KEYиLINEAR KEYподдерживаются в производстве с таблицамиNDB.-
Максимальное количество разделов, которые можно явно определить для любой таблицы
NDB, равно8 * [, а количество групп узлов в кластере NDB определяется, как обсуждалось ранее в этом разделе. При запуске ndbd для процессов узлов данных установка количества потоков LDM не оказывает влияния (так какnumber of LDM threads] * [number of node groups]ThreadConfigприменяется только к ndbmtd); в таких случаях это значение можно рассматривать как равное 1 для целей выполнения этого расчета.Дополнительную информацию см. в разделе 21.5.3 «ndbmtd — Узел данных кластера NDB (многопоточный)».
Дополнительную информацию о кластере NDB и пользовательском разбиении см. в разделе 21.2.7 «Известные ограничения кластера NDB» и разделе 22.6.2 «Ограничения разбиения, связанные с движками хранения».
Фрагментная реплика. Это копия раздела кластера. Каждый узел в группе узлов хранит фрагментную реплику. Иногда также называют репликой раздела.
Фрагментная реплика полностью принадлежит одному узлу; узел может (и обычно хранит) несколько фрагментных реплик.
На рисунке показан кластер NDB с четырьмя узлами данных, работающими под управлением ndbd, разделенными на две группы узлов по два узла; узлы 1 и 2 принадлежат группе узлов 0, а узлы 3 и 4 — группе узлов 1.
На рисунке показаны только узлы данных; для работы кластера NDB необходим процесс ndb_mgmd для управления кластером и по крайней мере один узел SQL для доступа к данным, хранящимся в кластере, но они не показаны на рисунке для большей наглядности.
Рисунок 21.2 Кластер NDB с двумя группами узлов
Данные, хранящиеся в кластере, разделены на четыре раздела с номерами 0, 1, 2 и 3. Каждый раздел хранится (в нескольких копиях) в одной и той же группе узлов. Разделы хранятся в альтернативных группах узлов следующим образом:
Раздел 0 хранится в группе узлов 0; первичная фрагментная реплика (первичная копия) хранится на узле 1, а резервная фрагментная реплика (резервная копия раздела) хранится на узле 2.
Раздел 1 хранится в другой группе узлов (группа узлов 1); первичная фрагментная реплика этого раздела находится на узле 3, а резервная фрагментная реплика — на узле 4.
Раздел 2 хранится в группе узлов 0. Однако размещение его двух фрагментных реплик противоположно разделу 0; для раздела 2 первичная фрагментная реплика хранится на узле 2, а резервная — на узле 1.
Раздел 3 хранится в группе узлов 1, а расположение его двух фрагментных реплик противоположно разделу 1. То есть его первичная фрагментная реплика расположена на узле 4, а резервная — на узле 3.
Это означает следующее для непрерывной работы кластера NDB: до тех пор, пока каждая группа узлов, участвующая в кластере, имеет хотя бы один работающий узел, кластер имеет полную копию всех данных и остается работоспособным. Это показано на следующей диаграмме.
Рисунок 21.3 Узлы, необходимые для кластера NDB 2x2
В этом примере кластер состоит из двух групп узлов, каждая из которых состоит из двух узлов данных. Каждый узел данных выполняет экземпляр ndbd. Любая комбинация, содержащая как минимум один узел из группы узлов 0 и как минимум один узел из группы узлов 1, достаточна для сохранения кластера “жизнеспособным”. Однако, если оба узла из одной группы узлов выйдут из строя, комбинация, состоящая из оставшихся двух узлов в другой группе узлов, будет недостаточной. В этой ситуации кластер потерял целую партицию и больше не может предоставить доступ к полному набору всех данных NDB Cluster.
В NDB 7.5.4 и более поздних версиях максимальное количество поддерживаемых групп узлов для одного экземпляра NDB Cluster составляет 48 (Ошибка #80845, Ошибка #22996305).
© 2025 Oracle
Licensed under the GPLv2 License.