规划和准备 Service Fabric 独立群集部署

在创建群集之前,请执行以下步骤。

规划群集基础结构

需要在“拥有的”计算机上创建 Service Fabric 群集,以便确定群集需应对的故障类型。 例如,是否需要为这些计算机单独提供电源线或 Internet 连接? 此外,还应考虑这些计算机的物理安全性。 计算机位于何处,谁需要访问它们? 在做出这些决定后,可以采用逻辑方式将计算机映射到多个容错域(请参阅下一步骤)。 相比于测试群集,生产群集的基础结构规划更复杂。

确定容错域和升级域的数目

“容错域 (FD)”是故障的物理单元,与数据中心的物理基础结构直接相关。 容错域由共享单一故障点的硬件组件(计算机、交换机、网络等)组成。 尽管容错域与机架之间没有 1:1 映射,但是大致上,可将每个机架视为一个容错域。

在 ClusterConfig.json 中指定 FD 时,可以选择每个 FD 的名称。 Service Fabric 支持分层的 FD,因此,可以在 FD 中反映基础结构拓扑。 例如,以下 FD 是有效的:

  • "faultDomain": "fd:/Room1/Rack1/Machine1"
  • "faultDomain": "fd:/FD1"
  • "faultDomain": "fd:/Room1/Rack1/PDU1/M1"

升级域 (UD) 是节点的逻辑单元。 在 Service Fabric 协调式升级(应用程序升级或群集升级)期间,将关闭 UD 中的所有节点以执行升级,而其他 UD 中的节点仍可用来为请求提供服务。 对计算机进行的固件升级不遵循 UD,因此每次必须在一台计算机上执行此操作。

领会这些概念的最简单方法是将 FD 视为非计划内故障的单元,将 UD 视为计划维护的单元。

在 ClusterConfig.json 中指定 UD 时,可以选择每个 UD 的名称。 例如,以下名称是有效的:

  • "upgradeDomain": "UD0"
  • "upgradeDomain": "UD1A"
  • "upgradeDomain": "DomainRed"
  • "upgradeDomain": "Blue"

有关 FD 和 UD 的更多详细信息,请参阅 Service Fabric 群集介绍

如果能够完全控制节点的维护和管理(即负责更新和更换计算机),则应该将生产环境中的群集至少跨越三个 FD,这样才能使它在生产环境中受支持。 对于在无法完全控制计算机的环境(例如 Amazon Web Services VM 实例)中运行的群集,至少应在群集中部署五个 FD。 每个 FD 可以有一个或多个节点。 这是为了防止计算机升级和更新造成问题,根据升级和更新的时间,这些问题可能会干扰群集中应用程序和服务的运行。

确定初始群集大小

通常,群集中的节点数是根据业务需求确定的,例如,要在群集上运行多少个服务和容器,以及需要多少个资源来维持工作负荷。 对于生产群集,我们建议在群集中至少跨 5 个 FD 部署 5 个节点。 不过,如上所述,如果你对节点具有完全控制权并且可以跨三个 FD,则三个节点应当也可以胜任该工作。

运行有状态工作负荷的测试用群集应当具有三个节点,而运行无状态工作负荷的测试用群集只需要一个节点。 还应当注意,若是用于开发,可以在一台指定的计算机上配备多个节点。 不过,在生产环境中,对于每台物理机或虚拟机,Service Fabric 只支持一个节点。

准备将充当节点的计算机

对于要添加到群集的每台计算机,下面提供了建议要满足的一些规格:

部署和配置群集的群集管理员必须拥有每台计算机的 管理员权限 。 不能在域控制器上安装 Service Fabric。

下载适用于 Windows Server 的 Service Fabric 独立包

下载链接 - Service Fabric 独立包 - Windows Server,并将包解压缩到群集外的一台部署计算机中或解压缩到群集内的其中一台计算机中。

修改群集配置

若要创建独立群集,必须创建独立群集配置 ClusterConfig.json 文件,其中描述群集的规范。 可以基于在以下链接中找到的模板创建配置文件。
独立群集配置

有关此文件中相关部分的详细信息,请参阅 Windows 独立群集的配置设置

从已下载的包中打开某个 ClusterConfig.json 文件,并修改以下设置:

配置设置 说明
NodeTypes 节点类型可让你将群集节点划分到不同的组中。 一个群集必须至少有一个节点类型。 组中的所有节点具有以下共同特征:
名称 - 即节点类型名称。
终结点端口 - 即与此节点类型关联的各种命名终结点(端口)。 可以使用任何端口号,只要它们不会与此清单中的其他部分发生冲突,并且未被计算机/VM 上运行的其他应用程序使用。
放置属性 - 即此节点类型的相应属性,可用作系统服务或你拥有的服务的放置约束。 这些属性是用户定义的键/值对,可为指定节点提供额外的元数据。 节点属性的示例包括节点是否有硬盘或图形卡、其硬盘的轴数、内核数和其他物理属性。
容量 - 节点容量,定义特定节点提供的特定资源的名称和数量。 例如,节点可以定义名为“MemoryInMb”的指标容量,而且默认有 2048 MB 的可用内存。 这些容量在运行时使用,以确保将需要特定资源量的服务放在具有所需数量的可用资源的节点上。
IsPrimary - 如果定义了多个 NodeType,请确保只有一个设置为主节点(值为 true),系统服务将在该主节点上运行。 应将所有其他节点类型设置为 false 值
Nodes 这些是群集内的每个节点的详细信息(节点类型、节点名称、IP 地址、节点的容错域和升级域)。 要在其上创建群集的计算机必须与其 IP 地址一起列在此处。
如果对所有节点使用相同的 IP 地址,则会创建一个可用于测试的单机群集。 不要将单机群集用于部署生产工作负荷。

群集配置将所有设置配置到环境后,可针对群集环境对其进行测试(步骤 7)。

环境设置

群集管理员配置 Service Fabric 独立群集时,需按照以下准则设置环境:

  1. 创建群集的用户应对群集配置文件中作为节点列出的所有计算机具有管理员级别的安全特权。
  2. 从中创建群集的计算机以及每个群集节点计算机必须:
  3. 已卸载 Service Fabric SDK
  4. 已卸载 Service Fabric 运行时
  5. 已启用 Windows 防火墙服务 (mpssvc)
  6. 已启用远程注册表服务(远程注册表)
  7. 已启用文件共享 (SMB)
  8. 已基于群集配置端口打开所需的端口
  9. 已为 Windows SMB 和远程注册表服务打开了必要的端口:135、137、138、139 和 445
  10. 已相互建立网络连接
  11. 群集节点计算机不应为域控制器。
  12. 如果要部署的群集是安全群集,请验证是否已具备必需的安全先决条件,以及是否已根据配置进行正确配置。
  13. 如果群集计算机无法访问 Internet,请在群集配置中设置以下项:
  14. 禁用遥测:在“属性”下,设置 "enableTelemetry": false
  15. 禁用自动下载 Fabric 版本和禁用通知当前群集版本支持即将终止:在“属性”下,设置 "fabricClusterAutoupgradeEnabled": false
  16. 或者,如果网络 Internet 访问仅限于允许列表中的域,则需要自动升级以下域:go.microsoft.com download.microsoft.com

  17. 设置适当的 Service Fabric 防病毒排除项:

防病毒排除目录
Program Files\Microsoft Service Fabric
FabricDataRoot(从群集配置中)
FabricLogRoot(从群集配置中)
防病毒排除进程
Fabric.exe
FabricHost.exe
FabricInstallerService.exe
FabricSetup.exe
FabricDeployer.exe
ImageBuilder.exe
FabricGateway.exe
FabricDCA.exe
FabricFAS.exe
FabricUOS.exe
FabricRM.exe
FileStoreService.exe

使用 TestConfiguration 脚本验证环境

可以在独立包中找到 TestConfiguration.ps1 脚本。 它作为最佳做法分析器,可验证上述某些条件,并应该用作健全性检查来验证是否可以在给定环境上部署群集。 如果出现任何故障,请参阅环境设置下的列表进行故障排除。

可以在对群集配置文件中列为节点的所有计算机具有管理员访问权限的任何计算机上运行此脚本。 运行此脚本的计算机不必要是群集的一部分。

PS C:\temp\Microsoft.Azure.ServiceFabric.WindowsServer> .\TestConfiguration.ps1 -ClusterConfigFilePath .\ClusterConfig.Unsecure.DevCluster.json
Trace folder already exists. Traces will be written to existing trace folder: C:\temp\Microsoft.Azure.ServiceFabric.WindowsServer\DeploymentTraces
Running Best Practices Analyzer...
Best Practices Analyzer completed successfully.

LocalAdminPrivilege        : True
IsJsonValid                : True
IsCabValid                 : True
RequiredPortsOpen          : True
RemoteRegistryAvailable    : True
FirewallAvailable          : True
RpcCheckPassed             : True
NoConflictingInstallations : True
FabricInstallable          : True
Passed                     : True

目前,此配置测试模块不会验证安全配置,因此必须单独执行验证。

Note

我们正在不断改进,旨在使此模块更加可靠,因此如果遇到了可能由 TestConfiguration 导致的故障或丢失情况,请通过我们的支持通道告知我们。

后续步骤