如何在服务器故障转移群集中为 IIS Windows FTP

本文介绍如何为 Internet Information Services (服务器故障转移群集) IIS Windows 8.0 或更高版本配置 FTP。 本文中的过程仅适用于 FTP 服务。

备注

若要详细了解如何在故障转移群集中配置 Web 服务,请单击以下文章编号以查看 Microsoft 知识库中的文章:

970759在 Windows 服务器故障转移群集中配置 IIS World Wide Web 发布服务

适用于:  WindowsServer 2019、Windows Server 2016、Windows Server 2012 R2
原始 KB 编号:   974603

使用故障转移群集为 IIS FTP 服务器配置高可用性

  1. 在所有群集节点上安装 Web 服务器角色。 如果要在客户端安装Windows Server 2012,请勿包含"FTP 服务器"角色。 如果要在 R2 或更高版本Windows Server 2012安装,请包含框中的"FTP 服务器"角色。 有关 IIS 8 部署指南的信息,请访问以下网站:打开 IIS 管理器 (IIS 8)

  2. 在所有群集节点上安装故障转移群集功能并创建群集。 有关详细信息,请访问以下网站: 故障转移群集部署指南

  3. 设置将用于 IIS 共享配置的文件共享。

  4. 在所有群集节点上配置 IIS 共享配置。

  5. 在所有群集节点上为 IIS 共享配置配置脱机文件。

  6. 配置 FTP 站点并指定其内容在一个群集节点上的位置。

  7. 在故障转移群集中创建通用脚本,为 FTP 站点配置高可用性。

设置将用于 IIS 共享配置的文件共享

  1. 创建将访问将用于 IIS 共享配置的共享的用户。

  2. 创建文件共享。 此共享将用于存储将在 IIS 之间共享的所有群集节点上的 IIS 共享配置。 有多个选项:

  3. 设置在步骤 2 中创建的共享的权限。 授予你在步骤 1 中创建的用户对文件共享和 NTFS 权限的完全控制权限。

  4. 确认所有群集节点都可以浏览到文件共享。 文件共享的路径为 \\<fileservername>\<sharename>

在所有群集节点上配置 IIS 共享配置

在群集节点之一上,将共享配置导出到文件共享:

  1. 导航到 "管理工具", 然后选择 "Internet Information Services (IIS) 管理器"。
  2. 在左窗格中,选择服务器名称节点。
  3. 双击"共享 配置" 图标。
  4. 在"共享配置"页上,在右 (窗格中选择"导出) 将配置文件从本地计算机导出到另一个位置。
  5. "导出配置 "对话框中,在"物理 () \\<fileservername>\<sharename> 中键入文件共享的路径
  6. 选择 连接为",然后键入有权访问存储共享配置的共享的用户帐户的用户名和密码,然后选择"确定 "。 此帐户将用于访问共享。 您应该使用非域管理员的受限 Active Directory 帐户。
  7. 在"导出配置"对话框中,键入将用于保护加密密钥的密码,然后选择"确定 "。
  8. 在" 共享配置" 页上,选中" 启用共享配置" 复选框。
  9. 键入之前输入的物理路径、用户帐户和密码,然后在 "操作" 窗格中选择" 应用 "。
  10. "加密密钥密码"对话框中,键入您之前设置的加密密钥密码,然后选择"确定 "。
  11. 在"共享配置"对话框中,选择"确定 "。
  12. 选择“确定”。

在其他每个群集节点上,使用你刚刚导出到文件共享的共享配置:

  1. 导航到 "管理工具", 然后选择 "Internet Information Services (IIS) 管理器"。
  2. 选择服务器名称节点。
  3. 双击"共享 配置" 图标。
  4. 在" 共享配置" 页上,选中" 启用共享配置" 复选框。
  5. 键入文件共享的物理路径 () 、用户帐户以及之前输入的密码,然后在"操作"窗格中选择" \\<fileservername>\<sharename> 应用"。
  6. "加密密钥密码"对话框中,键入您之前设置的加密密钥密码,然后选择"确定 "。
  7. 在"共享配置"对话框中,选择"确定 "。
  8. 选择“确定”。

备注

若要详细了解如何在 IIS 中设置共享配置,请访问以下 Microsoft 网站: 共享配置

在所有群集节点上为 IIS 共享配置配置脱机文件

在每个群集节点上,启用脱机文件:

  1. 安装桌面体验功能。 为此,请按照下列步骤操作:

    1. 导航到 "管理工具", 然后选择"服务器管理器"。
    2. 在左窗格中,选择"功能 "。
    3. 选择 右侧窗格中 的"添加功能"。
    4. 请根据你的版本执行下列操作Windows之一:
      • 有关Windows Server 2016,请转到 Microsoft Docs 网站上安装带桌面体验的服务器主题。
      • For Windows Server 2102 and 2012 R2, choose Desktop Experience under User Interfaces and Infrastructures in the features list
  2. 请执行以下操作:
    For Windows Server 2012, 2012 R2 and 2016, select Sync Center in Control Panel, and then select Manage offline files.

  3. 选择 "启用脱机文件"。 此时不要重新启动计算机。

  4. 确保缓存设置为只读。 为此,在提升的 cmd 提示符下运行以下命令:

    REG ADD "HKLM\System\CurrentControlSet\Services\CSC\Parameters" /v ReadOnlyCache /t REG_DWORD /d 1 /f
    
  5. 重启计算机。

  6. 从计算机浏览到文件服务器。 右键单击包含 IIS 共享配置的共享,然后选择"始终脱机可用"。

    备注

    如果将文件共享设置为在托管 IIS 节点的同一故障转移群集上高度可用,则当您右键单击共享时,如果您位于的群集节点托管高度可用的文件服务器,则"始终可用的脱机"选项将不会显示。 您必须将高可用文件服务器应用程序移动到另一个节点。

  7. 在"控制面板"中,打开 "脱机文件"。 选择 "打开同步中心", 然后选择"计划 "。

  8. 每天或根据你的要求安排脱机文件同步。 还可以将脱机同步配置为每隔几分钟运行一次。 即使您没有设置计划程序,当您更改 Applicationhost.config 文件中的内容时,更改将反映在 Web 服务器上。

备注

若要详细了解如何在 IIS 中为共享配置配置脱机文件,请访问以下 Microsoft 网站:用于共享配置的脱机 文件

配置 FTP 站点并指定其内容在一个群集节点上的位置

查找拥有 FTP 站点内容文件将驻留的群集磁盘资源的群集节点:

  1. 导航到 管理工具,然后选择故障转移 群集管理器
  2. 连接群集。 如果你位于其中一个群集节点上,群集将自动显示在列表中。
  3. 在"存储空间"下,查找 FTP 网站内容将驻留的磁盘资源。 为此,请展开磁盘资源的存储树。 确保存储未由群集上任何其他高可用性应用程序使用。 你将在"可用存储"下找到存储空间"。
  4. 注意此资源位于其上联机的群集节点。 你将在群集节点上配置 IIS。
  5. 记下群集磁盘资源名称。 您将对内容文件使用此功能。

在资源联机的群集节点上,将 FTP 服务器配置为对 FTP 网站内容使用共享磁盘:

  1. 导航到 "管理工具", 然后选择 "Internet Information Services (IIS) 管理器"。
  2. 在左窗格中,展开服务器名称节点。
  3. 展开 "站点",右键单击"站点",然后选择"添加 FTP 站点"。
  4. 在" 添加 FTP 站点 "对话框中,键入站点名称。 对于内容目录,键入 FTP 网站内容文件所在的位置。 这是你在上一过程的步骤 5 中指出的群集磁盘资源的位置。
  5. 配置其余 FTP 网站设置。
  6. 选择 “完成”

在故障转移群集管理器中创建通用脚本,为 FTP 站点配置高可用性

对于为 FTP 站点配置高可用性的最后一步,请设置将用于监视 FTP 服务的常规脚本资源:

  1. 在每个群集节点上,将本文末尾的脚本复制到 Windows\System32\inetsrv\Clusftp7.vbs
  2. 导航到 管理工具,然后选择故障转移 群集管理器
  3. 连接群集。 如果你位于其中一个群集节点上,群集将自动显示在列表中。
  4. 请执行以下操作:
    For Windows Server 2012, 2012 R2 and 2016, right-click Roles and then select Configure Role to create it.
  5. 单击 "通用脚本"。
  6. 从以下路径中选择脚本文件:
    %systemroot%\System32\Inetsrv\Clusftp7.vbs
  7. 将客户端访问点 (CAP) 名称设置为客户端用于连接到高可用性 FTP 站点的 FTP 站点名称。 指定要用于 FTP 站点 CAP 的静态 IP。 如果使用动态主机配置协议 (DHCP) ,将不会显示此选项。
  8. 在"选择存储空间 步骤中,选择 FTP 网站内容文件所在的群集共享磁盘。 群集上任何其他高可用性应用程序都应不使用存储。 如果用于 IIS 共享配置的文件共享承载在同一群集上,则此处应该使用不同的磁盘资源。
  9. 确认设置后,向导将创建群集组、群集资源和资源之间的依赖项,然后将资源联机。

备注

若要在同一故障转移群集上承载多个高可用性 FTP 站点,请按照前面提到的相同步骤操作。 如果不自定义脚本,可以指向群集上所有 FTP 网站的同一脚本文件。 但是,如果对单个 FTP 站点进行更改,请针对每个 FTP 站点使用不同的脚本文件和不同的群集共享存储。 例如,对于 %systemroot%\System32\Inetsrv, useClusftp7.vbs 第一个 FTP 站点,Clftp7-2.vbs为第二个,Clftp7-3.vbs为第三个,以此类举。 每个脚本文件监视不同的 FTP 站点。

重要

以下脚本仅供示例使用,不受 Microsoft 明确支持。 在 IIS 8.0 FTP 群集环境中使用此脚本的风险由你自己承担。


'<begin script sample>

'This script provides high availability for IIS FTP websites
'The script is applicable to:
'   - Windows Server 2012: Microsoft FTP Service 7.5 for IIS 8.0 (available for download from microsoft.com)
'   - Windows Server 2012 R2 or a later version: FTP Service in the box

'More thorough and application-specific health monitoring logic can be added to the script if needed


Option Explicit



'Helper script functions


'Start the FTP service on this node
Function StartFTPSVC()

    Dim objWmiProvider
    Dim objService
    Dim strServiceState
    Dim response

    'Check to see if the service is running
    set objWmiProvider = GetObject("winmgmts:/root/cimv2")
    set objService = objWmiProvider.get("win32_service='ftpsvc'")
    strServiceState = objService.state

    If ucase(strServiceState) = "RUNNING" Then
        StartFTPSVC = True
    Else
        'If the service is not running, try to start it
        response = objService.StartService()

        'response = 0  or 10 indicates that the request to start was accepted
        If ( response <> 0 ) and ( response <> 10 ) Then
            StartFTPSVC = False
        Else
            StartFTPSVC = True
        End If
    End If

End Function

'Cluster resource entry points. More details here:
'http://msdn.microsoft.com/en-us/library/aa372846(VS.85).aspx

'Cluster resource Online entry point
'Make sure the FTP service is started
Function Online( )

    Dim bOnline
    'Make sure FTP service is started
    bOnline = StartFTPSVC()

    If bOnline <> True Then
        Resource.LogInformation "The resource failed to come online because ftpsvc could not be started."
        Online = False
        Exit Function
    End If

    Online = true

End Function

'Cluster resource offline entry point
'On offline, do nothing.
Function Offline( )

    Offline = true

End Function


'Cluster resource LooksAlive entry point
'Check for the state of the FTP service
Function LooksAlive( )

    Dim objWmiProvider
    Dim objService
    Dim strServiceState

    set objWmiProvider = GetObject("winmgmts:/root/cimv2")
    set objService = objWmiProvider.get("win32_service='ftpsvc'")
    strServiceState = objService.state

    if ucase(strServiceState) = "RUNNING" Then
LooksAlive = True
    Else
LooksAlive = False
    End If

End Function


'Cluster resource IsAlive entry point
'Do the same health checks as LooksAlive
'If a more thorough than what we do in LooksAlive is required, this should be performed here
Function IsAlive()

    IsAlive = LooksAlive

End Function


'Cluster resource Open entry point
Function Open()

    Open = true

End Function


'Cluster resource Close entry point
Function Close()

    Close = true

End Function


'Cluster resource Terminate entry point
Function Terminate()

    Terminate = true

End Function