如何在 Windows Server 故障转移群集中为 IIS 配置 FTP

posted in: 系统相关 | 0

本文内容

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

注意

有关如何在故障转移群集中配置 Web 服务的详细信息,请单击以下文章编号以查看 知识库中的文章:

在 故障转移群集中配置 IIS 万维 Web 发布服务

适用于: 2019、 2016、 2012 R2

原始 KB 编号:

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

在所有群集节点上安装 Web 角色。 如果要在 2012上安装,请不要包括“FTP 服务器”角色。 如果要在 2012 R2 或更高版本上安装,请包括内置的“FTP 服务器”角色。 有关 IIS 8 部署指南的详细信息,请访问以下网站: 打开 IIS 管理器 (IIS 8)

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

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

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

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

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

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

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

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

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

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

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

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

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

导航到 管理工具,然后选择 IIS) 管理器 ( 。在左窗格中,选择服务器名称节点。双击“ 共享配置” 图标。在“共享配置”页上,选择“操作”窗格中的“导出配置” (右窗格) 将配置文件从本地计算机导出到另一个位置。在“导出配置”对话框中,在“物理”路径框中键入文件共享的路径 () 。选择 “连接方式”,然后键入有权访问存储共享配置的共享的用户帐户的用户名和密码,然后选择 “确定”。 此帐户将用于访问共享。 应使用不是域管理员的受限 帐户。在“ 导出配置 ”对话框中,键入用于保护加密密钥的密码,然后选择 “确定”。在 “共享配置” 页上,选中 “启用共享配置 ”复选框。键入之前输入的物理路径、用户帐户和密码,然后在“操作”窗格中选择“应用”。在“ 加密密钥密码 ”对话框中,键入之前设置的加密密钥密码,然后选择 “确定”。在“共享配置”对话框中,选择 “确定”。选择“确定”。

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

导航到 管理工具,然后选择 IIS) 管理器 ( 。选择服务器名称节点。双击“ 共享配置” 图标。在 “共享配置” 页上,选中 “启用共享配置 ”复选框。键入文件共享的物理路径 () 、用户帐户和之前输入的密码,然后在“操作”窗格中选择“应用”。在“ 加密密钥密码 ”对话框中,键入之前设置的加密密钥密码,然后选择 “确定”。在“共享配置”对话框中,选择 “确定”。选择“确定”。

注意

有关如何在 IIS 中设置共享配置的详细信息,请访问以下 网站: 共享配置

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

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

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

导航到管理工具,然后选择服务器管理器。在左窗格中,选择 “功能”。在右窗格中选择 “添加功能 ”。根据你的 版本,执行以下操作之一:

请执行以下操作:

对于 2012、2012 R2 和 2016,请在控制面板中选择同步中心,然后选择“管理脱机文件”。

选择 “启用脱机文件”。 此时请勿重启计算机。

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

REG ADD "HKLMSystemCurrentControlSetServicesCSCParameters" /v ReadOnlyCache /t REG_DWORD /d 1 /f

重启计算机。

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

注意

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

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

计划每天或根据要求进行脱机文件同步。 还可以将脱机同步配置为每隔几分钟运行一次。 即使未设置计划程序,在.文件中更改内容时,更改也反映在 Web 服务器上。

注意

有关如何在 IIS 中为共享配置配置脱机文件的详细信息,请参阅 “共享配置的脱机文件”。

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

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

导航到 管理工具,然后选择 故障转移群集管理器。连接到群集。 如果位于某个群集节点上,则群集将自动显示在列表中。在“存储”下,找到 FTP 站点内容将驻留在其中的磁盘资源。 为此,请展开磁盘资源的存储树。 确保群集上任何其他高可用性应用程序不使用存储。 你会在“可用存储”下找到存储。请注意此资源联机的群集节点。 你将在该群集节点上配置 IIS。请注意群集磁盘资源名称。 你将使用此内容文件。

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

导航到 管理工具,然后选择 IIS) 管理器 ( 。在左窗格中,展开服务器名称节点。展开 网站,右键单击 “网站”,然后选择 “添加 FTP 网站”。在 “添加 FTP 网站 ”对话框中,键入网站名称。 对于内容目录,键入 FTP 网站内容文件所在的位置。 这是在上一过程的步骤 5 中记下的群集磁盘资源的位置。配置剩余的 FTP 站点设置。选择“完成”。通过在故障转移群集管理器中创建泛型脚本,为 FTP 站点配置高可用性

若要为 FTP 站点配置高可用性的最后一步,请设置用于监视 FTP 服务的泛型脚本资源:

在每个群集节点上,将本文末尾的脚本复制到 .vbs。导航到 管理工具,然后选择 故障转移群集管理器。连接到群集。 如果位于某个群集节点上,则群集将自动显示在列表中。请执行以下操作:

对于 2012、2012 R2 和 2016,右键单击“角色”,然后选择“配置角色”以创建它。单击 “泛型脚本”。从以下路径中选择脚本文件:

%%.vbs将客户端访问点 (CAP) 名称设置为客户端用于连接到高可用性 FTP 站点的 FTP 站点名称。 指定要用于 FTP 站点 CAP 的静态 IP。 如果使用动态主机配置协议 (DHCP) ,则不会显示此选项。在 “选择存储 ”步骤中,选择 FTP 站点内容文件所在的群集共享磁盘。 群集上任何其他高可用性应用程序都应不使用该存储。 如果用于 IIS 共享配置的文件共享托管在同一群集上,则应在此处使用不同的磁盘资源。确认设置后,向导将创建群集组、群集资源和资源之间的依赖关系,然后使资源联机。

注意

若要在同一故障转移群集上托管多个高可用性 FTP 站点,请执行前面提到的相同步骤。 如果未自定义脚本,则可以指向群集上所有 FTP 站点的同一脚本文件。 但是,如果进行特定于各个 FTP 站点的更改,请为每个 FTP 站点和不同的群集共享存储使用不同的脚本文件。 例如,在第一个 FTP 站点中 %%, .vbs ,-2.vbs for the ,-3. for the third,等等。 每个脚本文件监视不同的 FTP 站点。

重要

以下脚本仅用于示例目的,不受 的明确支持。 在 IIS 8.0 FTP 群集环境中使用此脚本会自行承担风险。


'
'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

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注