导出 (0) 打印
全部展开

教程:AlwaysOn 可用性组的侦听器配置

更新时间: 2014年6月

本主题说明如何为 AlwaysOn 可用性组配置侦听器。你的可用性组可以仅包含本地副本或 Azure 副本,也可以跨越本地和 Azure 以实现混合配置。Azure 副本可以位于同一区域,也可以跨越使用多个虚拟网络 (VNet) 的多个区域。

下面的步骤假设你已配置了一个可用性组但是没有配置侦听器。请注意对 Azure 中的可用性组侦听器的以下限制:

  • Windows Server 2008 R2、Windows Server 2012 和 Windows Server 2012 R2 支持可用性组侦听器。

  • 客户端应用程序必须位于其他云服务中,不能位于包含可用性组 VM 的云服务中。Azure 不支持客户端和服务器位于同一个云服务中的直接服务器返回。

  • 每个云服务只支持一个可用性组侦听器,因为将该侦听器配置为使用云服务 IP 地址。

  • 如果你要为混合环境创建侦听器,则本地网络必须连接到公共 Internet,还通过 Azure 虚拟网络连接到站点到站点 VPN。位于 Azure 子网中时,只能通过相应云服务的公共 IP 地址来访问该可用性组侦听器。

Important重要提示
可以通过 SQL Server Management Studio (SSMS) 图形用户界面、Transact-SQL 和 PowerShell 配置本地可用性组侦听器。但是,Azure 门户当前没有提供相应的配置选项,让你能够在创建侦听器时启用直接服务器返回 (DSR)。本教程重点介绍如何使用 PowerShell 为包括 Azure 副本的可用性组创建侦听器。有关如何使用 SSMS 或 Transact-SQL 配置侦听器的详细信息,请参阅创建或配置可用性组侦听器

首先,你需要为承载 Azure 副本的每个 VM 创建负载平衡终结点。如果你的副本分布在多个区域,则该区域的每个副本必须位于同一 VNet 的同一云服务中。若要创建跨越多个 Azure 区域的可用性组副本,需要配置多个 VNet。有关配置跨界 VNet 连接的详细信息,请参阅配置 VNet 到 VNet 连接

  1. 在 Azure 门户中导航到承载副本的每个 VM,然后查看详细信息。

  2. 对于每个 VM,单击“终结点”选项卡。

  3. 验证所要使用侦听器终结点的“名称”“公共端口”未在使用中。

  4. 在本地客户端上,下载并安装 Azure PowerShell 2013 年 6 月或以后的版本

  5. 启动 Azure PowerShell。将打开一个新的 PowerShell 会话,其中加载了 Azure 管理模块。

  6. 运行 Get-AzurePublishSettingsFile。此 cmdlet 会将你的浏览器定向到发布设置文件,以将其下载到本地目录。期间可能会提示你输入 Azure 订阅的登录凭据。

  7. 使用所下载发布设置文件的路径,运行以下命令。

    Import-AzurePublishSettingsFile -PublishSettingsFile <PublishSettingsFilePath>
    

    导入发布设置文件后,便可在 PowerShell 会话中管理 Azure 订阅。

  8. 将以下 PowerShell 脚本复制到文本编辑器中,根据你的环境设置变量值。

    # Define variables
    $AGNodes = "<VM1>","<VM2>","<VM3>" # all availability group nodes should be included, separated by commas
    $ServiceName = "<MyCloudService>" # the name of the cloud service that contains the availability group nodes
    $EndpointName = "<MyEndpoint>" # name of the endpoint
    $EndpointPort = "<PortNumber>" # public port to use for the endpoint
    
    # Configure a load balanced endpoint for each node in $AGNodes, with direct server return enabled
    ForEach ($node in $AGNodes)
    {
        Get-AzureVM -ServiceName $ServiceName -Name $node | Add-AzureEndpoint -Name $EndpointName -Protocol "TCP" -PublicPort $EndpointPort -LocalPort $EndpointPort -LBSetName "$EndpointName-LB" -ProbePort 59999 -ProbeProtocol "TCP" -DirectServerReturn $true | Update-AzureVM
    }
    
  9. 设置变量后,将脚本从文本编辑器复制到 Azure PowerShell 会话中运行。如果提示符仍然显示 >>,再次按 Enter,确保脚本开始运行。

接着,你需要确保属于同一群集的每个本地服务器或 Azure VM 上都安装了修补程序 KB2854082。还应在属于该群集但不在可用性组中的任何服务器或 VM 上安装此修补程序。

在每个群集节点的远程桌面会话中,将 KB2854082 下载到本地目录。然后,按顺序在每个群集节点上安装此修补程序。如果群集节点上当前正在运行群集服务,修补程序安装结束后,服务器将重新启动。

Warning警告
停止群集服务或重新启动服务器将影响群集和可用性组的仲裁状态,可能会导致群集离线。若要在安装期间维持群集的高可用性,请确保:

  • 群集处于最佳仲裁状态;

  • 在任何节点上安装修补程序之前,所有群集节点都在线;并且

  • 允许修补程序安装在一个节点上运行至结束,包括完全重新启动服务器,然后再在群集中的任何其他节点上安装此修补程序。

在此步骤中,你创建一个防火墙规则来打开负载平衡的终结点(以前指定为 59999)的探测端口,创建另一规则来打开可用性组侦听器端口。因为在包含可用性组副本的 Azure VM 上创建了负载平衡的终结点,所以需要在相应 Azure VM 上打开探测端口和侦听器端口。

  1. 在承载副本的 VM 上,启动 “高级安全 Windows 防火墙”

  2. 右键单击“入站规则”,然后单击“新建规则”

  3. “规则类型”页上,选择“端口”,然后单击“下一步”

  4. “协议和端口”页中,选择“TCP”,然后在“特定本地端口”框中键入“59999”。然后,单击“下一步”

  5. “操作”页上,将“允许连接”保持选中状态,然后单击“下一步”

  6. “配置文件”页上,接受默认设置,然后单击“下一步”

  7. “名称”页中,指定规则名称,例如在“名称”文本框中输入 AlwaysOn Listener Probe Port,然后单击“完成”

  8. 对于可用性组侦听器端口(以前在 $EndpointPort 参数中指定)重复上述步骤,指定合适的规则名称,如 AlwaysOn Listener Port

在此步骤中,在故障转移群集管理器和 SQL Server Management Studio (SSMS) 中手动创建可用性组侦听器。

  1. 在承载主副本的节点上,打开故障转移群集管理器。

  2. 展开群集名称,然后单击“角色”

  3. “角色”窗格中,右键单击可用性组名称,然后选择“添加资源 > 客户端访问点”

  4. “名称”框中,键入所需侦听器名称,单击“下一步”两次,然后单击“完成”

  5. 单击“资源”选项卡,然后展开你刚才创建的客户端访问点。你将看到群集中的每个群集网络的 IP 地址资源。

  6. 如果你要配置混合解决方案,请继续执行以下步骤。如果你要配置仅包含 Azure 的解决方案,请跳到下一个步骤。

    1. 右键单击与你的本地子网对应的 IP 地址资源,然后选择“属性”。记下 IP 地址名称和网络名称。

    2. 选择“静态 IP 地址”,分配未使用的 IP 地址,然后单击“确定”



  7. 右键单击与你的 Azure 子网对应的 IP 资源,然后选择“属性”。记下 IP 地址名称和网络名称。如果你的解决方案跨越多个 Azure VNet,请为每个 IP 资源重复此步骤。

  8. 登录到 Azure 门户。导航到包含你的可用性组 VM 的云服务。打开“仪表板”视图。记下“公用虚拟 IP (VIP)地址”下显示的地址。为包含承载此解决方案中的可用性副本的 VM 的每个云服务重复此步骤。

  9. 在每个 Azure VM 上,将以下 PowerShell 脚本复制到文本编辑器中,将变量设置为之前记下的值。请务必输入你使用的 VM 的子网的特定值。

    # Define variables
    $ClusterNetworkName = "<ClusterNetworkName>" # the cluster network name
    $IPResourceName = "<IPResourceName>" # the IP Address resource name 
    $CloudServiceIP = "X.X.X.X" # IP address of your cloud service
    Import-Module FailoverClusters
    Get-ClusterResource $IPResourceName | Set-ClusterParameter -Multiple @{"Address"="$CloudServiceIP";"ProbePort"="59999";SubnetMask="255.255.255.255";"Network"="$ClusterNetworkName";"OverrideAddressMatch"=1;"EnableDhcp"=0}
    
    
  10. 设置变量之后,打开提升的 Windows PowerShell 窗口,然后从文本编辑器复制脚本,并将其粘贴到 Azure PowerShell 会话中运行。如果提示符仍然显示 >>,再次按 Enter,确保脚本开始运行。在每个 VM 上重复此操作。

    此脚本使用云服务的 IP 地址来配置 IP 地址资源,同时设置探测端口等其他参数。在 IP 地址资源上线后,它可以响应我们在本教程前面部分创建的负载平衡终结点在探测端口上的轮询。

  11. 导航回到故障转移群集管理器。展开“角色”,然后突出显示你的可用性组。在“资源”选项卡上,右键单击侦听器名称,然后单击“属性”

  12. 单击“依赖关系”选项卡,确认 IP 地址具有的依赖关系为 OR,而不是 AND。单击“确定”。

  13. 右键单击侦听器名称并单击“联机”

  14. 侦听器联机之后,在“资源”选项卡中右键单击可用性组,并单击“属性”

  15. 创建对侦听器名称资源的依赖关系。

  16. 启动 SQL Server Management Studio 并连接到主副本。

  17. 导航到“AlwaysOn 高可用性 > 可用性组” > <AvailabilityGroupName> > 可用性组侦听器”。现在,应能看到在“故障转移群集管理器”中创建的侦听器名称。右键单击侦听器名称,然后单击“属性”

  18. “端口”框中,通过使用以前使用的 $EndpointPort,为可用性组侦听器指定端口号,然后单击“确定”

创建可用性组侦听器之后,可能必须调节侦听器资源的 RegisterAllProvidersIP 和 HostRecordTTL 群集参数。这些参数可以减少故障转移之后的重新连接时间,防止连接超时。有关这些参数和示例代码的详细信息,请参阅创建或配置可用性组侦听器

在此步骤中,我们使用客户端应用程序,测试可用性组侦听器。完成这种测试的一种简单方法是将 SSMS 连接到可用性组侦听器。另一种简单方法是运行 SQLCMD.exe,如下所示:

sqlcmd –S "<ListenerName>,<EndpointPort>" -d "<DatabaseName>" -Q "select @@servername, db_name()" -l 15

测试侦听器时,务必故障转移可用性组,以确保客户端可以跨故障转移连接到侦听器。

显示:
© 2014 Microsoft