Служебная структура в помещениях добавляет узел и корреляцию типа узла - PullRequest
0 голосов
/ 28 июня 2018

У меня есть локальный кластер Windows из 2 узлов со следующими определениями узлов в манифесте кластера

 "nodes": [
  {
    "nodeName": "node1",
    "iPAddress": "192.168.1.1",
    "nodeTypeRef": "node1",
    "faultDomain": "fd:/dc1/r1",
    "upgradeDomain": "UD1"
  },
  {
    "nodeName": "node2",
    "iPAddress": "192.168.1.2",
    "nodeTypeRef": "node2",
    "faultDomain": "fd:/dc2/r2",
    "upgradeDomain": "UD2"
  }

Я пытаюсь добавить новый узел с именем "node3", используя скрипт "AddNode.ps1":

 .\AddNode.ps1 -FabricRuntimePackagePath  "G:\Downloads\ServiceFabricRuntime\MicrosoftAzureServiceFabric.6.2.274.9494.cab" -NodeName node3 -NodeType "node3" -NodeIPAddressorFQDN 192.168.1.3 -ExistingClientConnectionEndpoint node0.gbl.net:19000 -UpgradeDomain UD3 -FaultDomain fd:/dc3/r3 -AcceptEULA

Я получаю ошибку "Неверный тип узла" в powershell. Согласно документации здесь , NodeType должен быть «существующим» типом узла в кластере. Мне интересно, почему это? Что означает «NodeTypeRef» в clustermanifest.json? Если я запускаю AddNode.ps1 с параметром типа узла «узел1» или «узел2» [которые являются существующими типами узла], это работает.

Ответы [ 3 ]

0 голосов
/ 29 июня 2018

Как вы, возможно, знаете из документов , каждый тип узла сопоставляется с VMSS (набором масштабов виртуальной машины). VMSS - это набор узлов с одинаковой конфигурацией, поэтому каждый узел в VMSS будет иметь одинаковый объем ОЗУ, ЦП, ОС и конфигураций (порты, программное обеспечение и т. Д.), Если вы не зададите отдельные конфигурации для каждого узла после развертывается.

NodeType должен быть «существующим» типом узла в кластере. Мне интересно, почему это? Что означает «NodeTypeRef» в clustermanifest.json?

В SF NodeType - это виртуальное представление пула узлов (ВМ) с равными конфигурациями, которые могут обрабатывать тот же тип и объем работы, что и другие в том же пуле.

Они являются виртуальными, поскольку они представляют собой пул машин, он не привязан строго к VMSS, поскольку у вас не будет VMSS при запуске кластера OnPremises или других облачных провайдеров, но вы все равно можете иметь пул виртуальные машины той же конфигурации, связанные с NodeType.

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

Другой пример: если у вас не было NodeType, и вам необходимо назначить службу для определенного узла, в случаях, когда узел переходит в автономный режим, вы не сможете запустить службу, так как узел недоступен. , Тогда вы думаете, что я мог бы привязаться к конкретным требованиям, используя метки в узлах (то есть: Ram = 8 ГБ), но в случае, если вы хотите обновить эти виртуальные машины до 16 ГБ, вам также придется обновить службы, которые теперь должны быть совместимы с 16GB.

Примером является такой кластер:

FrontEndNodetype : Вы будете устанавливать службы, необходимые для размещения вашего пользовательского интерфейса или API, вам не понадобятся огромные объемы диска, вам нужно настроить порты LoadBalancer, чтобы открыть доступ, например, к порту 80 (http)

BackEndNodeType : Будут размещены рабочие сервисы, которые будут обрабатывать большую нагрузку, потребуется больше ресурсов процессора и памяти.

DBNodeType : Будут размещать ваши базы данных, потребуется память и дисковое хранилище

Предполагая, что вы ограничите выполнение своих API-интерфейсов для FrontEndNodetype, если вы добавите туда новый узел, чтобы уменьшить нагрузку на другие узлы, SF будет знать, что он будет соответствовать требованиям сервиса и сможет без проблем запускать ваш API, потому что вы уже сказали во время развертывания, что FrontEndNodetype содержит все зависимости, в которых нуждается служба.

Другим примером может быть работа на основе графического процессора, поэтому для работы ваших служб потребуется очень специфическое оборудование.

.

На основании вашего примера:

Если вы создадите по одному типу узла для каждого добавляемого вами узла, вы потеряете преимущество наличия типов узлов и у вас не будет такой гибкости, как описано выше.

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

0 голосов
/ 16 февраля 2019

Я потратил некоторое время на эту последнюю ночь и получил ошибку типа узла. Сейчас я смотрю на другую ошибку, но это другая история. Как указано выше, вам нужно добавить тип узла в существующий кластер, а затем добавить новый узел. Другая проблема, с которой мы столкнулись при установке onPremise, заключается в том, что вам нужно внести изменения в AddNode.ps1. Вот 3 шага:

  1. Запуск ServiceFabricClusterConfigurationUpgrade
    cd D:\TMHPSupport\Installs\Microsoft.Azure.ServiceFabric.WindowsServer.x.x.x
    Connect-ServiceFabricCluster -ConnectionEndpoint "mycluster.mydomain.com:19000" -WindowsCredential
    Start-ServiceFabricClusterConfigurationUpgrade -ClusterConfigPath NewNodeType.ClusterConfig.Windows.MultiMachine.json
  1. Обновите addnode.ps1 для передачи учетных данных Windows - по некоторым причинам вам необходимо настроить addnode.ps1 для передачи учетных данных Windows, если вы защищаете кластер с помощью учетных данных Windows, когда он подключается к кластеру. Так по линии 203
    if($X509Credential)
    {    Connect-ServiceFabricCluster -ConnectionEndpoint $ExistingClientConnectionEndpoint -X509Credential -ServerCertThumbprint $ServerCertThumbprint -StoreLocation $StoreLocation -StoreName $StoreName -FindValue $FindValueThumbprint -FindType FindByThumbprint
    }
    else
    {
        Connect-ServiceFabricCluster $ExistingClientConnectionEndpoint **-WindowsCredential**
    }
  1. Call AddNode.ps1
.\AddNode.ps1 -NodeName dmz1 -NodeType newNodeType -NodeIPAddressorFQDN newnodeservername.domain.org -ExistingClientConnectionEndpoint existingnodeservername.domain.org:19000 -UpgradeDomain UD3 -FaultDomain fd:/dc1/r1 -AcceptEULA
0 голосов
/ 29 июня 2018

В целом вы можете думать о NodeType как о каком-то абстрактном определении аппаратного обеспечения среды выполнения, в которой будут выполняться ваши службы.

Рассмотрим пример:

Представьте, что у вас есть две службы A и B. Служба A выполняет много операций, связанных с дисковым вводом / выводом, тогда как службе B требуется много памяти для работы.

Согласно этой информации вы можете определить два NodeType's затем: FastSDD и HugeMemory . При добавлении узлов в кластер вы указываете соответствующий NodeType на основе аппаратного обеспечения (например, машины с твердотельным накопителем как FastSSD и машины с огромной оперативной памятью как HugeMemory ).

Теперь вы можете определить следующие ограничения размещения для ваших услуг:

  • Сервис A: NodeType == FastSSD
  • Служба B: NodeType == HugeMemory

При использовании этой конфигурации ClusterManager организует ваши службы таким образом, чтобы гарантировать, что реплики Сервиса A размещены на узлах типа FastSSD и Сервис B размещен только на Узлы типа HugeMemory .

...