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