none
基于故障转移群集的SQL Server 高可用性解决方案 RRS feed

  • 常规讨论

  • 一、SQL Server 故障转移群集介绍
          SQL Server 故障转移群集构建于 Windows Server 故障转移群集之上。Windows服务器故障转移集群旨在提供高可用性服务或应用程序集群内运行故障转移。它包含一组独立运行的服务器来提高应用程序和服务的可用性。故障转移集群可以防止硬件和软件故障, 将故障资源从一个服务器 (或集群节点) 转移到另一个的节点。故障转移是一个过程, 以一个集群服务或应用程序在一个节点上离线,并将它重新联机在另一个节点。整个过程对用户是透明的。
    SQL Server 故障转移群集又称为故障转移群集实例,它包括:
    • 一个或多个 Windows Server 故障转移群集节点
    • SQL Server 故障转移群集专用群集资源组,其中包含:
      Ø 用来访问 SQL Server 故障转移群集的网络名称
      Ø IP 地址
      Ø 用于 SQL Server 数据库和日志存储的共享磁盘
      Ø 在所有故障转移群集节点中自动保持同步的检查点注册表项
    SQL Server 故障转移群集在网络上显示为一台计算机上的单个 SQL Server 实例。在群集内部,一次只有一个节点拥有群集资源组,满足针对该故障转移群集实例的所有客户端请求。在出现故障(硬件故障、操作系统故障、应用程序或服务故障)或进行计划升级时,组所有权就转移至故障转移群集内的其他节点。此过程称为故障转移。通过利用 Windows Server 故障转移群集功能,SQL Server 故障转移群集通过冗余在实例级别提供了高可用性。

    1.1 常见的SQL server 故障转移的部署
    在实际的部署中,根据客户需要可以实现多样的SQL Server Failover Cluster 的构建方式。本节主要描述最常见的故障转移群集配置:

    二、部署SQL Server 故障转移群集
          在实际环境中部署,必须按照具体的安装步骤进行操作,才能成功实现故障转移群集的真正效能。同时,也需要考虑到Windows、SQL Server各版本所支持的功能以及硬件的性能。比如说,故障转移群集中的所有节点都必须属于同一平台(可以是 32 位或 64 位平台),并且必须运行相同版本的操作系统。而且,64 位 SQL Server 版本必须安装在运行 64 位版本的 Windows 操作系统的 64 位硬件上。在SQL Server2008 R2版本中不对故障转移群集提供 WOW64 支持。下面列举了从安装SQL Server故障转移群集前的准备工作到安装SQL 群集节点的具体注意事项及步骤。

    2.1 安装故障转移群集前的准备工作
    2.1.1 SQL Server 2008 R2版本的差异
    对于不同版本的故障转移群集架构,首要的区别主要体现在最大硬件支持度和支持的最大故障转移群集节点数:


    Windows Server 2008 and R2 支持最多16个节点,也就是说SQL Server Datacenter\Enterprise 支持最多16节点的故障转移群集。SQL Server Business Intelligence 和 SQL Server Standard支持两个节点的故障转移群集。
    更多详细信息关于SQL Server 2008 R2 不同版本所支持的功能,请参阅SQL Server 2008 R2各个版本支持的功能。2.1.2 确定硬件解决方案
    • 如果群集解决方案中包含地理位置分散的群集节点,则还必须验证网络延迟和共享磁盘支持之类的附加项。 有关 Windows Server 2008 和 Windows Server 2008 R2 的详细信息,Validating Hardware for a failover cluster(为故障转移群集验证硬件)和 Support Policy for Windows Failover Clusters(针对 Windows 故障转移群集的支持策略)。
    • Windows Server 2008 R2 的 Advanced Server 和 Datacenter Server 版还支持 SAN 配置。 Windows 目录和硬件兼容性列表中的“群集/多群集设备”类别中列出了一组支持 SAN 的存储设备,这些设备已经过测试,可作为 SAN 存储单元并且附加多个 WSFC 群集。 在找到经过验证的组件后请运行群集验证。
    • 如果您在 iSCSI 技术组件上部署 SQL Server 故障转移群集,建议您多加注意。
    2.1.3 配置Windows Server故障转移群集
    • 至少需要在一个服务器群集的节点上配置Microsoft群集服务(WSFC)。您还必须将SQL Server与WSFC一起运行。
    • SQL Server 服务的资源 DLL 导出两个函数,MSCS 群集管理器使用它们来检查 SQL Server 资源的可用性。
    • 配置域名服务 (DNS) 或 Windows Internet 名称服务 (WINS)。 必须在要安装 SQL Server 故障转移群集的环境中运行 DNS 服务器或 WINS 服务器。 SQL Server 安装程序要求 SQL Server IP 接口虚拟引用注册动态域名服务。DNS 服务器配置应该允许群集节点动态注册映射到网络名称的联机 IP 地址。


    Aiden Cao

    TechNet Community Support

    2012年9月28日 2:09
    版主

全部回复

  • 2.2 安装SQL Server2008 R2故障转移群集
    若要安装或升级 SQL Server 故障转移群集,必须在故障转移群集的每个节点上运行安装程序。 若要向现有的 SQL Server 故障转移群集添加节点,则必须在要添加至 SQL Server 故障转移群集实例的节点上运行 SQL Server 安装程序。 不要在活动节点上运行安装程序以管理其他节点。
    2.2.1 创建一个故障转移群集实例
    若要安装 SQL Server 故障转移群集,您必须通过运行 SQL Server 安装程序来创建并配置一个故障转移群集实例。
    故障转移群集实例可以在参与故障转移群集节点的一个或多个计算机上运行。故障转移群集实例包括:
    • Microsoft 群集服务 (MSCS) 群集组(也称为“资源组”)中的一个或多个磁盘的组合。各资源组最多可包含一个 SQL Server 实例。
    • 故障转移群集实例的网络名称。
    • 分配给故障转移群集实例的一个或多个 IP 地址。
    首先创建一个新的SQL Server故障转移群集,并指定群集的资源,包括群集名称、群集磁盘和群集IP地址等。下面我们通过图例来完成一个SQL Server故障群集的安装。
    1. 在满足安装的准备条件后,通过安装向导完成一个新的故障转移群集的安装


    2. 在Feature Selection 页面,选择需要安装的组件
    3. 在Cluster Resource Group 页面,指定群集资源组的名称。有两种方式来指定资源组的名称:
    • 使用下拉框制定一个现有的名称
    • 直接创建一个新的组



    Aiden Cao

    TechNet Community Support

    2012年9月28日 2:56
    版主
  • 4. 在Cluster Disk Selection 页面,选择用来实现故障转移的共享群集磁盘

    SQL Server的数据将会存储在群集磁盘中。一个资源组中,我们可以指定多个共享群集磁盘。可用的共享磁盘将会显示在可用磁盘列表中。
    注意:第一个盘符将默认磁盘存储所有数据,但是可以再Database Engine 或者Analysis Services配置界面进行更改。

    5. 在Cluster Network Configuration界面,为故障转移群集设置网络资源配置。其中包括指定IP类型,以及为为群集实例指定群集IP地址


    6. 接下来是为群集指定安全策略
    在Window Server 2008及以后的版本中,Service SIDs(server security IDs) 是推荐和默认的设置。虽然指定Domain Group依然存在,但是并不推荐。更多详细信息关于SIDs功能描述,请参阅Configure Windows Service Accounts and Permissions

    以上是在SQL Server故障转移群集安装过程中需要配置和注意的主要步骤。除此之外,还需要根据安装的组件完成后面的配置任务,在此就不一一举例说明了。

    2.2.2 添加节点到SQL Server故障转移群集
    在创建并配置单节点SQL Server故障转移群集实例后,群集并没有实现高可用性,因为只包含只一个节点。所以我们需要向故障转移群集中添加节点,实现高可用性。
    在故障转移群集实例的节点上运行 SQL Server 安装程序,根据方式不同提供以下选项:
    选项一:带“添加节点”功能的集成安装
    在要添加到 SQL Server 故障转移群集中的每个节点上,运行带“添加节点”功能的安装程序以添加该节点。
    选项二:高级/企业安装
    不同于首先创建一个完整的故障转移群集实例,SQL Server 高级/企业故障转移群集安装包括以下步骤:
    1. 在有可能成为您要新建的 SQL Server 故障转移群集的每个节点上,按照准备部分列出的“准备故障转移群集”安装步骤执行操作。您在一个节点上运行“准备故障转移群集”之后,安装程序就会创建 Configuration.ini 文件,该文件列出您指定的所有设置。在要准备的其他节点上,您可以将第一个节点自动生成的 Configuration.ini 文件作为安装程序命令行的输入,而不需要重复执行这些安装步骤。此步骤准备可以加入群集的节点,但完成此步骤以后还不会有可供使用的 SQL Server 实例。
    2. 准备好加入群集的节点之后,在一个准备好的节点上运行安装程序,该节点最好拥有具备“完成故障转移群集”功能的共享磁盘。此步骤将配置并完成故障转移群集实例。完成此步骤以后,您将有一个可供使用的 SQL Server 故障转移群集实例,以前为该实例准备的所有结点将作为新建的 SQL Server 故障转移群集的可能所有者。


    Aiden Cao

    TechNet Community Support

    2012年9月28日 3:01
    版主
  • 三、SQL Server故障转移群集案例分析
          故障转移群集通常包含一个或多个SQL Server实例运行在两个或多个群集节点上。在SQL Server 2008中,可在一个节点只安装单SQL Server实例,也能够实现同一节点上安装多个SQL Server故障转移实例。这也就是我们分别称之为的Active-Passive和Active-Active群集模式。下面我们通过图例来详细了解不同的模式。

    单实例Active-Passive模式:

    正常情况下,实例只运行在Active节点下。当主要的Active节点遭遇故障,SQL Server 故障转移群集会通过共享磁盘自动将实例转移到原先的Passive节点上,使之成为Active节点。在故障转移过程中,相应的Services也会自动打开。

    多实例Active-Active模式:

    在此种模式下,多数据库实例可以同时运行在多台服务器,可以更有效的提高硬件的利用率。但是对于一个实例来说,始终只能够拥有一个owner运行在一个节点下。

    四、SQL Server故障转移群集故障排错
          SQL Server的一个实例可能遭遇各种原因一非计划的形式进行故障转移或重新启动。大多数的原因并是不由于群集出现问题。在这种情况下,我们需要遵循标准的SQL Server故障排错步骤来确定问题的本质。
    如果服务器群集所驻留的节点存在问题,则这些问题可能将自身列为故障转移群集实例的问题。若要调查并解决这些问题,请按以下顺序对 SQL Server 故障转移群集进行故障排除:
    • 硬件:查看 Microsoft Windows 系统事件日志。
    • 操作系统:查看 Windows 系统和应用程序事件日志。
    • 网络:查看 Windows 系统和应用程序事件日志。
    • 安全性:查看 Windows 应用程序和安全性事件日志。
    • MSCS:查看 Windows 系统和应用程序事件日志以及群集日志。
    • SQL Server:验证硬件、操作系统、网络、安全性和 MSCS 基础均没有问题后,像平常一样进行故障排除

    五、常见问题及解决方案
          在迁移到另一个节点之后,SQL Server 无法登录到网络
    问题1: SQL Server 服务账号无法与DC取得联系
    解决方法1: 检查事件日志以确定是否存在网络连接问题,例如适配器故障或 DNS 问题。验证是否能成功对DC运行 ping 命令,以及相应端口。
    问题2: 所有群集节点上的SQL Server服务账号密码并非全一致,或者节点没有重新启动从故障节点迁移过来的SQL Server服务。
    解决方法2: 使用 SQL Server 配置管理器更改 SQL Server 服务帐户密码。如果不这样做,并且更改了其中一个节点上的 SQL Server 服务帐户密码,也必须更改所有其他节点上的密码。SQL Server 配置管理器会自动执行此操作。
    SQL Server无法访问群集磁盘
    问题1: 并未在所有节点上都更新可固件或驱动程序。
    解决方法1: 确保所有节点都使用正确的固件版本和相同的驱动程序版本
    问题2: 如果故障的节点位于具有不同驱动盘符号的共享群集磁盘上,则其他节点无法恢复从该节点迁移过来的群集磁盘。
    解决方法2: 两台服务器上的群集磁盘的驱动盘符号必须相同。


    Aiden Cao

    TechNet Community Support

    2012年9月28日 3:04
    版主
  • 好文章,一定要收藏

    给我写信: QQ我:点击这里给我发消息

    2012年10月19日 13:16
  • 非常感谢您的回复,如果有任何建议和意见,请告诉我们,我们的工程师会随时跟进的!

    Regards,

    James


    请访问:多产品结合与应用场景论坛

    2012年10月21日 13:48
  • 故障转移集群确实是一个很不多的功能,但也有几个很令人头疼的缺点:

    1)对域环境和DNS依赖太大;

    2)单一实例无法做到负载均衡;

    特别是后者,希望微软能尽快提供更好的替代方案呀。


    chenl

    2012年12月6日 15:05
  • 感谢您的评论i6first.

    域环境和DNS是搭建故障转移群集的前提:
    DNS:群集中的服务器必须使用域名系统 (DNS) 来进行名称解析。可以使用 DNS 动态更新协议。
    域角色:群集中的所有服务器必须处于相同的 Active Directory 域中。最好的做法是,所有的群集服务器应具有相同的域角色(成员服务器或域控制器)。建议的角色为成员服务器。

    故障转移群集必须满足一定的硬件、软件和基础架构的环境,才可以部署实施。
    详细的要求可以参与下面的文章:

    了解故障转移群集的要求
    http://technet.microsoft.com/zh-cn/library/cc771404.aspx

    很遗憾,SQL Server 2008 R2 并不支持负载均衡。目前群集对于SQL Server 支持HA (High availability) 模式。充分实现对硬件的利用,可以构建Active-Active模型。本质上还是一个实例运行在一台服务器下,并没有实现一定程度上分流用户访问。

    Best Regards,

    Aiden


    Aiden Cao
    TechNet Community Support

    2012年12月7日 5:40
    版主