内部服务结构添加节点和节点类型相关性

问题描述 投票:0回答:3

我有一个2节点本地Windows群集,在群集清单中具有以下节点定义

 "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"
  }

我正在尝试使用“AddNode.ps1”脚本添加一个名为“node3”的新节点:

 .\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中收到错误“无效的节点类型”。根据文档here,NodeType必须是集群中的“现有”节点类型。我想知道为什么会这样? “NodeTypeRef”在clustermanifest.json中表示什么?如果我运行带有nodetype param的AddNode.ps1作为“node1”或“node2”[它们是现有的nodetypes],它就可以工作。

azure-service-fabric service-fabric-on-premises
3个回答
0
投票

通常,您可以将NodeType视为将要执行服务的执行环境的硬件的一些抽象定义。

考虑一个例子:

想象一下,您有两个服务A和B.服务A执行大量磁盘I / O绑定操作,而服务B需要大量内存才能工作。

根据这些信息,您可以定义两个NodeType:FastSDD和HugeMemory。将节点添加到群集时,您可以根据硬件(即具有SSD作为FastSSD的计算机和具有巨大RAM的计算机作为HugeMemory)指定适当的NodeType。

现在,您可以为您的服务定义以下placement constraints

  • 服务A:NodeType == FastSSD
  • 服务B:NodeType == HugeMemory

使用此配置,ClusterManager将以一种方式组织您的服务,以确保将服务A的副本放置在类型为FastSSD的节点上,而服务B仅放置在类型为HugeMemory的节点上。


0
投票

正如您可能从docs所知,每个节点类型都映射到VMSS(虚拟机规模集)。 VMSS是具有相同配置的节点集合,因此VMSS中的每个节点将具有相同数量的RAM,CPU,OS和配置(端口,软件等),除非您在之后为每个节点设置单独的配置部署。

NodeType必须是群集中的“现有”节点类型。我想知道为什么会这样? “NodeTypeRef”在clustermanifest.json中表示什么?

在SF上,NodeType是具有相同配置的节点池(VM)的虚拟表示,其可以处理与同一池中的其他池相同类型和数量的工作。

它们是虚拟的,因为它们代表了一个机器池,它并不严格依赖于VMSS,因为当您运行集群OnPremises或其他云提供商时,您将没有VMSS,但您仍然可以拥有一个虚拟机池链接到NodeType的相同配置。

您的集群将很快或将来必须扩展(上下)节点数量,拥有NodeType将更容易在新节点上放置服务,因为您知道特定的NodeType具有预定义的要求并且添加了任何新节点池将是兼容的,因此您不需要在服务配置上进行复杂配置来限制在不受支持的节点上运行的服务。

另一个例子是,如果您没有NodeType,并且需要将服务分配给特定节点,则在节点脱机的情况下,您将无法运行服务,因为节点不可用。然后您认为,我可以使用节点中的标签(即:Ram = 8Gb)来满足特定要求,但是如果您想要将这些VM升级到16GB,您还必须更新服务,现在应该与之兼容16 GB。

一个例子是这样的集群:

FrontEndNodetype:您将安装托管您的UI或API所需的服务,不需要大量磁盘,您必须配置LoadBalancer端口以打开访问权限,例如端口80(http)

BackEndNodeType:将托管处理重负载的工作服务,需要更多的CPU和内存。

DBNodeType:将托管您的数据库,需要内存和磁盘存储

假设您要限制您的API在FrontEndNodetype上运行,如果您在那里添加新节点以减少其他节点上的负载,SF将知道它将参与服务要求并可以在那里运行您的API而没有任何问题,因为您已经在部署期间说FrontEndNodetype包含服务所需的所有依赖项。

另一个例子可能是基于GPU的工作,因此您的服务需要运行非常特定的硬件。

.

根据你的例子:

如果为添加的每个节点创建一个节点类型,则会失去拥有节点类型的好处,并且您将不具有上述相同的灵活性。

另一个问题是当您将具有不同配置的多个节点添加到同一节点类型时,对服务结构不会出现问题,但很快或之后您的服务将在特定节点上开始失败,可能是因为配置错误或缺少某些依赖性,将难以调试并找到问题,因为每个节点将具有不同的配置,您将花费一些时间来确定问题仅发生在该节点中


0
投票

我昨晚花了一些时间来解决节点类型错误。我现在正在看一个不同的错误,但这是一个不同的故事。如上所述,您需要将节点类型添加到现有集群,然后添加新节点。我们为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凭据 - 出于某种原因,如果在连接到群集时使用Windows凭据保护群集,则需要调整addnode.ps1以传递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. 调用AddNode.ps1
.\AddNode.ps1 -NodeName dmz1 -NodeType newNodeType -NodeIPAddressorFQDN newnodeservername.domain.org -ExistingClientConnectionEndpoint existingnodeservername.domain.org:19000 -UpgradeDomain UD3 -FaultDomain fd:/dc1/r1 -AcceptEULA
© www.soinside.com 2019 - 2024. All rights reserved.