代码之家  ›  专栏  ›  技术社区  ›  teeboy

服务结构本地添加节点和节点类型关联

  •  0
  • teeboy  · 技术社区  · 6 年前

    我有一个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"
      }
    

    我正在尝试使用“add node.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必须是 “现有” 群集中的nodeType。我想知道这是为什么?“nodetyperef”在clustermanifest.json中表示什么?如果我运行addnode.ps1,nodeType参数为“node1”或“node2”[这是现有的nodeType],它就会工作。

    3 回复  |  直到 6 年前
        1
  •  0
  •   Oleg Karasik    6 年前

    总的来说你可以想到 节点类型 作为执行服务的执行环境的硬件的一些抽象定义。

    举个例子:

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

    根据这些信息,您可以定义两个 点头 然后: 快速系统开发部 雨果梦 是的。将节点添加到群集时,可以根据硬件(即具有ssd作为 快速固态硬盘 以及带有巨大内存的机器 雨果梦 )中。

    现在您可以定义以下内容 placement constraints 为您服务:

    • 服务A:nodeType==fastsdsd
    • 服务B:nodeType==hugeMemory

    使用此配置 俱乐部经理 将以某种方式组织您的服务,以确保 服务A放置在Fastssd类型的节点上 服务B仅放置在HugeMemory类型的节点上 是的。

        2
  •  0
  •   Diego Mendes    6 年前

    你可能知道 docs ,每个节点类型都映射到一个vms(虚拟机规模集)。vms是具有相同配置的节点的集合,因此vms中的每个节点将具有相同数量的ram、cpu、os和配置(端口、软件等),除非在部署后为每个节点设置单独的配置。

    nodeType必须是群集中的“现有”nodeType。我想知道这是为什么?“nodetyperef”在clustermanifest.json中表示什么?

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

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

    不久或以后,您的集群将不得不扩展(上下)节点的数量,拥有nodeType将使在新节点上放置服务变得更容易,因为您知道特定的nodeType具有预定义的要求,并且添加到池中的任何新节点都是兼容的,所以您的服务配置不需要复杂的配置以限制在不受支持的节点上运行的服务。

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

    一个例子是这样的集群:

    前端节点类型 以下内容: 您将安装托管ui或api所需的服务,不需要大量磁盘,您必须配置loadbalancer端口以打开对端口80(http)的访问。

    后端节点类型 以下内容: 将托管将处理重负载、需要更多CPU和内存的工作机服务。

    数据库类型 以下内容: 将托管您的数据库,需要内存和磁盘存储

    假设您要限制您的api在frontendnodetype上运行,如果您在其中添加一个新节点以减少其他节点上的负载,sf将知道它将满足服务需求,并且可以在那里运行api而不会出现任何问题,因为您已经在部署期间说过,frontendnodetype包含服务所需的所有依赖项。

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

    是的。

    根据你的例子:

    如果为添加的每个节点创建一个nodetype,就失去了拥有节点类型的好处,而且您将没有上述那样的灵活性。

    另一个问题是,当您将具有不同配置的多个节点添加到同一个节点类型时,对服务结构来说不是问题,但很快或稍后,您的服务将在特定节点上开始失败,可能是因为配置错误或缺少某些依赖项,将很难调试和发现问题,因为每个节点都有不同的配置,您将需要一段时间来确定问题只发生在该节点上

        3
  •  0
  •   gperrego    6 年前

    我昨晚花了一些时间在这上面,克服了节点类型错误。我现在看到的是另一个错误,但那是另一个故事。如上所述,您需要将节点类型添加到现有集群,然后添加新节点。我们在onpremise安装中遇到的另一个问题是,您需要更改addnode.ps1。以下是三个步骤:

    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
    
    推荐文章