0

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

4

3 回答 3

1

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

考虑一个例子:

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

根据此信息,您可以定义两个NodeTypeFastSDDHugeMemory。将节点添加到集群时,您可以根据硬件指定适当的 NodeType(即,具有 SSD 的机器为FastSSD,具有巨大 RAM 的机器为HugeMemory)。

现在您可以为您的服务定义以下放置约束:

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

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

于 2018-06-29T06:48:50.450 回答
0

您可能从文档中了解到,每个节点类型都映射到一个 VMSS(虚拟机规模集)。VMSS 是具有相同配置的节点的集合,因此 VMSS 中的每个节点将具有相同数量的 RAM、CPU、操作系统和配置(端口、软件等),除非您在之后为每个节点设置单独的配置部署。

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

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

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

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

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

一个示例是这样的集群:

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

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

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

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

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

.

根据您的示例:

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

另一个问题是,当您将具有不同配置的多个节点添加到同一个节点类型时,这不会成为服务结构的问题,但迟早您的服务将在特定节点上开始失败,可能是因为配置错误或缺少一些依赖项, , 将难以调试和发现问题,因为每个节点将具有不同的配置,您需要一段时间才能确定问题仅发生在该节点中

于 2018-06-29T14:57:33.890 回答
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
于 2019-02-16T15:13:38.403 回答