前言:


本文将更加深入地讲解WSFC所需的核心组件。由于AlwaysOn和FCI都需要基于WSFC之上,因此我们首先要了解在Windows群集发生了什么。不仅可以优化SQL Server的高可用设计和部署高,也可以为后续问题侦测过程提供支持。
本节将涉及以下内容:
  • Windows Server Active Directory Domain(Windows Server活动目录域)
  • DNS Server
  • DHCP Server
  • TCP/IP 网络
  • Windows Server 企业版(2008)或标准版(2012)的最小计算机节点数。
但是我们首先需要了解“什么是WSFC”及其工作机制。


WSFC简介及工作机制:

首先看看在一个没有任何应用的裸群集包含一些什么配置。在这里,我们使用5个节点、无共享存储,将在后续用于部署无FCI的AlwaysOn的群集。Windows Server Failover Cluster(下称WSFC)是一种特殊的Windows Server 功能,在使用之前必须先启用。可以在Windows中使用PowerShell或者【角色和功能】向导中启用。一旦功能被启用,那么Failover Cluster(故障转移群集)会使用一个在每台群集机器中的Windows 服务(Cluster service)作为伙伴节点中通讯之用。同时还可以作为节点同步和监控已集群的应用的健康状况。
当由于某些原因导致应用无法响应时,基于资源策略的一系列步骤就会被触发执行。故障从大类分为软件和硬件故障。如果是软件故障比如已集群的SQL Server服务被终止,那么会自动尝试在同一台机器上重启服务。但是如果是硬件故障,那么故障转移就会马上启动。
不管软硬件故障,如果Failover需要重启已集群的应用的服务,通常这个服务会在一个伙伴节点中重启。也就是说,服务上的所有连接(这里特指数据库引擎)会中断。然后在伙伴节点上,SQL Server数据库引擎会重启并恢复所有数据库,回滚、重做必要的日志。
前面提到过,集群服务同样监控操作系统及已集群应用的常规状态和健康情况。对于SQL Server引擎就是周期性检测服务是否“IsAlive”,对于操作系统,“isAlive”的周期为5秒一次。
IsAlive检测每60秒触发一次,然后在5秒内测量。如果在5秒内没有响应,意味着该节点的群集服务不可用。未能在指定事件作出响应将会启动对应用、资源的故障转移。详细资料可在官方文档中查阅:在故障转移群集在 Windows Server 中的新增功能
Windows Server 2012 R2群集节点健康侦测默认时间值

群集通用属性 非Hyper-V的群集角色默认值 Hyper-V群集角色默认值
相同子网阈值 5 秒 10 秒
跨子网阈值 5 秒 20 秒

那么,一个常规的配置会是怎样的?大家可以看下下面的这个图,可以看到一个基于WSFC的典型网络。其中有域控制器(Domain Controller,包含了DNS区域的功能)、TCP/IP网络及群集节点。





我们也不妨一起看看基础设施的依赖关系,这里建立了一个树状结构。依赖树的组件如下图:



蓝色虚线意味着是可选项,AlwaysOn和FCI是可以独立部署互不依赖的。


TCP/IP 网络:

我们从基础开始,首先需要一个固定的TCP\IP网络。通常由以太网交换机和网线(传统的铜线,1Gbps)组成。计算机对象通过patch\CAT5网线插入各种网络交换机。Windows Server 群集模型在持续改进,已经不再强制需要专用心跳适配器。在Windows Server 2003时代,这个为必须项,从2008开始发生了很大的改变。新的群集模型使用一个特定的虚拟适配器,这个适配器绑定到可用的物理网卡上用于内部节点之间心跳流量的传输。这个虚拟适配器类似下图:




注意:虽然不在强制需要专用的心跳网卡,但是还是必须有多个冗余的TCP/IP网络。
在第一个图中的5个节点通过public网络互联,这个网络是提供给SQL Server实例用于为客户端提供服务。同时这个网络也用于群集监控和SQL Server资源在启动故障转移时使用。并且这里也有一个冗余的TCP/IP网络用于快速恢复。虽然这个冗余网络并非强制要求,但是作为最佳实践,一个可用的、独立的冗余网络能提供最佳的可用性。并且这个冗余网络还可以用于SQL Server备份(特指网络备份)、镜像端点流量传输时使用。群集虚拟适配器使用一个在APIP(Automatic Private IP,自动专用IP)范围中的地址,以便在群集节点之间隔离通讯。


Domain Name System,DNS:

一个可靠的微软客户端网络还需要有一个Domain Name System(DNS,域名系统)服务器的存在。在微软客户端网络中,计算机对象(服务器和工作站)都有一个唯一的计算机名,并分配一个唯一的IP地址。这个计算机名和IP地址在计算机本地网卡中注册信息。但是当你在TCP/IP网络中需要通过计算机名引用另外一台计算机时,你就需要解决计算机名到IP地址之间的解析问题。这就是DNS出现的原因。
DNS服务器可以是一台网络中的计算机,也可以是Windows Server域控中启用了DNS角色的机器。DNS使用区域(zones)来解决计算机组名问题。一个区域可以是正向查找区域(强制的)或者一个反向查找区域(可选的),它们的操作如下:
  • 正向查找区域:解析机器名→IP地址
  • 反向查找区域:解析TCP/IP地址→计算机名

Dynamic Host Configuration Protocol,DHCP:


虽然在上面树状图中没有出现并且不是必要要求,但是我们还是要看看DHCP。如果希望自动管理服务器TCP/IP地址分配工作,那么就需要一个DHCP服务器。在常规部署中,通常会部署在NDS服务器上。DHCP是从DHCP管理员指定的保留池中在一台新电脑启动时分配IP地址的协议。典型的通过DHCP的网络配置绑定的网卡大概如下:






Active Directory Domain:活动目录域

在整套环境中,必须要有一台启用了Active Directory Domain服务角色的Windows Server 计算机。这个角色由DCPROMO.EXE这个cmd命令创建在Windows域中。按着向导一步一步继续下去之后,就可以为网络客户端提供Active Directory 身份验证和管理网络资源。常见的资源有:
  • Windows Server Failover Clusters
  • 文件共享
  • 打印机
  • 用户
注意在把一台Windows Server提升到域控制器(Domain Controller)时,如果没有DNS服务器绑定到本地网卡,会提示你安装DNS角色。同时也会提示你在AD目录中存储DNS区域。这个可以提高DNS区域复制的性能及安全性。
AD域提供了对用户、计算机、打印机等的中央管理功能。可以使得一个账号,用于运行Windows服务并访问网络资源同时又减少权限方面的管控开销。



Windows Server Failover Cluster:


在部署Windows Server Failover Cluster(WSFC)之前,需要满足以下最低要求:
  • 一个TCP/IP网络
  • 一个AD域
  • 一个DNS服务器
没有上面的资源,域和群集都无法工作。作为DBA,对这些有基本的了解是必要的。WSFC把一系列节点组合成到一个中央管理实体中。Windows 群集的第一个操作是创建一个客户端接入点(Client Access Point)。这个接入点要求一个唯一虚拟网络名和一个唯一虚拟IP地址。这里的“虚拟”意味着这个对象不绑定到任何物理计算机中。之所以要为虚拟是因为这个资源可能需要从一台计算机节点转移到另外一台计算机节点中。
当这些资源(名字和IP)在节点间故障转移时,首先需要在当前节点中解除注册,然后再到目标伙伴节点中重新注册。意味着从一个服务器的网卡中解绑然后在另外一个服务器的网卡中绑定。
在WSFC创建后,群集节点由一个单独的接入点管理。这个在群集安装过程中就会定义。假设对共享存储没有要求,那么群集现在就已经可用于应用程序的集群,如Exchange、SQL Server或文件服务器服务。

SQL Server Failover Cluster Instance:FCI

SQL Server FCI在发生软硬件故障时进行实例级别的故障转移,避免SQL Server实例永久脱机。在过去,FCI是在过去SQL Server高可用的主要技术,但是共享存储的硬性要求成为它的唯一缺点。共享存储的故障会直接导致FCI脱机并无法启动。
另外需要了解的是每个新实例的部署都需要有自己的唯一虚拟网络名和唯一虚拟IP地址。实例不可共享硬盘文件路径、虚拟IP地址或虚拟网络名,他们必须是“唯一”的。FCI完全取决于WSFC提供的资源管理。


SQL Server AlwaysOn Availability Group:

AlwaysOn 可用组是SQL 2012引入的新的高可用技术。它借助WSFC进行资源组的管控。AlwaysOn组通常包含一个主数据库集合。而数据库的副本被封装到可用组(Availability Groups)中,成为“副本”并传送到其他实例上提供只读功能。
SQL Server 可用组的其中一个新功能是创建侦听器服务。用于提供一个中央客户端接入点用于访问Availability Group中绑定到侦听器的数据库。配置完只读路由后,侦听器会把意向读的流量重定向到次要只读数据库,分摊主副本的流量。
这部分内容是本系列的主题,将在后续继续介绍。



小结:

本节对整个环境进行了概要介绍,下节开始会着重对这些内容/技术进行专门的详细讲解。首先将会是作为基础的WSFC。


SQL Server AlwaysON从入门到进阶(4)——分析和部署Windows Server Failover Cluster













SQL Server AlwaysON从入门到进阶(3)——基础架构的更多相关文章

  1. SQL Server AlwaysON从入门到进阶(2)——存储

    本文属于SQL Server AlwaysON从入门到进阶系列文章 前言: 本节讲解关于SQL Server 存储方面的内容,相对于其他小节而言这节比较短.本节会提供一些关于使用群集或者非群集系统过程 ...

  2. SQL Server AlwaysON从入门到进阶(1)——何为AlwaysON?

    本文属于SQL Server AlwaysON从入门到进阶系列文章 本文原文出自Stairway to AlwaysOn系列文章.根据工作需要在学习过程中顺带翻译以供参考.系列文章包含: SQL Se ...

  3. SQL Server AlwaysON从入门到进阶(6)——分析和部署AlwaysOn Availability Group

    前言:   本节是整个系列的重点文章,到现在,读者应该已经对整个高可用架构有一定的了解,知道独立的SQL Server实例和基于群集的SQL Server FCI的区别.上一节已经介绍了如何安装SQL ...

  4. 宣布正式发布 Windows Azure Notification Hub,新增 SQL Server AlwaysOn 可用性组侦听器支持

    今天,我们非常高兴地宣布,针对使用 Windows Azure 的移动和企业开发人员推出一些新功能.这些新功能可以减少构建移动应用程序的开发时间和成本,并能帮助企业开发人员实现高可用性和全球业务连续性 ...

  5. 最近帮客户实施的基于SQL Server AlwaysOn跨机房切换项目

    最近帮客户实施的基于SQL Server AlwaysOn跨机房切换项目 最近一个来自重庆的客户找到走起君,客户的业务是做移动互联网支付,是微信支付收单渠道合作伙伴,数据库里存储的是支付流水和交易流水 ...

  6. 从0开始搭建SQL Server AlwaysOn 第一篇(配置域控)

    从0开始搭建SQL Server AlwaysOn 第一篇(配置域控) 第一篇http://www.cnblogs.com/lyhabc/p/4678330.html第二篇http://www.cnb ...

  7. 从0开始搭建SQL Server AlwaysOn 第二篇(配置故障转移集群)

    从0开始搭建SQL Server AlwaysOn 第二篇(配置故障转移集群) 第一篇http://www.cnblogs.com/lyhabc/p/4678330.html第二篇http://www ...

  8. 从0开始搭建SQL Server AlwaysOn 第三篇(配置AlwaysOn)

    从0开始搭建SQL Server AlwaysOn 第三篇(配置AlwaysOn) 第一篇http://www.cnblogs.com/lyhabc/p/4678330.html第二篇http://w ...

  9. 从0开始搭建SQL Server AlwaysOn 第四篇(配置异地机房节点)

    从0开始搭建SQL Server AlwaysOn 第四篇(配置异地机房节点) 第一篇http://www.cnblogs.com/lyhabc/p/4678330.html第二篇http://www ...

随机推荐

  1. jacascript 立即执行函数(IIFE)与闭包

    前言:这是笔者学习之后自己的理解与整理.如果有错误或者疑问的地方,请大家指正,我会持续更新! 一直没搞清楚立即执行函数和闭包之间的关系,总结一下: 闭包有很多种理解:访问不到内部作用域,函数就是这样, ...

  2. 福利:100G Java全套学习视频免费送了

    嗯 是的 众所周知 java工会自开办以来 一直致力于分享一些 java技术总结 学习方法..等等等 所以 从我做这个公众号以来 我的手机就没有消停过一天 因为 每天都有很多粉丝问我 "您好 ...

  3. java集合详解

    1.java集合框架的层次结构 Collection接口: Set接口: HashSet具体类 LinkedHashSet具体类 TreeSet具体类 List接口:   ArrayList具体类 L ...

  4. Java内存回收机制.md

    1.java的内存 java的内存结构分为 堆 (是gc的主要区域) 线程共享,主要是用于分配实例对象和数组 栈 线程私有,它的生命周期和线程相同,又分成 虚拟机栈和本地方法栈,只有它会报 Stack ...

  5. [LeetCode] Encode and Decode TinyURL 编码和解码精简URL地址

    Note: This is a companion problem to the System Design problem: Design TinyURL. TinyURL is a URL sho ...

  6. MySQL · 引擎特性 · InnoDB 数据页解析

    前言 之前介绍的月报中,详细介绍了InnoDB Buffer Pool的实现细节,Buffer Pool主要就是用来存储数据页的,是数据页在内存中的动态存储方式,而本文介绍一下数据页在磁盘上的静态存储 ...

  7. 【实验吧】CTF_Web_简单的SQL注入之1

    题目链接:http://ctf5.shiyanbar.com/423/web/ 简单的SQL注入之1,比2,3都简单一些.利用2 的查询语句也可以实现:1'/**/union/**/select/** ...

  8. PHPCMS v9.6.0 任意文件上传漏洞分析

    引用源:http://paper.seebug.org/273/ 配置了php debug的环境,并且根据这篇文章把流程走了一遍,对phpstorm的debug熟练度+1(跟pycharm一样) 用户 ...

  9. swoole_event_add实现异步

    swoole提供了swoole_event_add函数,可以实现异步.此函数可以用在Server或Client模式下. 实现异步tcp客户端 示例: <?php $start_time = mi ...

  10. [SDOI 2016]征途

    Description 题库链接 将一个长度为 \(n\) 的正整数序列分为 \(m\) 段,问你这 \(m\) 段最小的方差 \(v\) 为多少.输出 \(v\times m^2\) . \(1\l ...