SQL Server 2016  AlwaysOn 安装及配置介绍

Always On 可用性组功能是一个提供替代数据库镜像的企业级方案的高可用性和灾难恢复解决方案。 SQL Server 2012 中引入了 Always On 可用性组功能,此功能可最大程度地提高一组用户数据库对企业的可用性。 “可用性组” 针对一组离散的用户数据库(称为“可用性数据库” ,它们共同实现故障转移)支持故障转移环境。 一个可用性组支持一组读写主数据库以及一至八组对应的辅助数据库。 (可选)可使辅助数据库能进行只读访问和/或某些备份操作。

可用性组在可用性副本级别进行故障转移。 可用性组 (availability group)一个容器,用于一组共同实现故障转移的数据库(“可用性数据库”)。可用性数据库 (availability database)属于可用性组的数据库。 对于每个可用性数据库,可用性组将保留一个读写副本(“主数据库”)和一个到八个只读副本(“辅助数据库”)。主数据库 (primary database)可用性数据库的读写副本。辅助数据库 (secondary database)可用性数据库的只读副本。可用性副本,可用性组的实例化,该可用性组由特定的 SQL Server 实例承载,并维护属于该可用性组的每个可用性数据库的本地副本。 存在两种类型的可用性副本:一个 主副本 和一至八个 辅助副本。主副本 (primary replica)使主数据库可用于来自客户端的读写连接并用于将每个主数据库的事务日志记录发送到每个辅助副本的可用性副本。辅助副本 (secondary replica)维护各可用性数据库的辅助副本的可用性副本,充当可用性组的潜在故障转移目标。 或者,辅助副本可以支持对辅助数据库进行只读访问,并支持对辅助数据库创建备份。可用性组侦听器 (availability group listener)一个服务器名称,客户端可连接到此服务器以访问 AlwaysOn 可用性组的主要副本或次要副本中的数据库。 可用性组侦听器将传入连接定向到主副本或只读辅助副本。

需要注意的是:每个可用性副本都必须驻留在单个 Windows Server 故障转移群集 (WSFC) 群集的不同节点中。

支持替代可用性模式,如下所示:

  • 异步提交模式。 此可用性模式是一种灾难恢复解决方案,适合于可用性副本的分布距离较远的情况。
  • 同步提交模式。 此可用性模式相对于性能而言更强调高可用性和数据保护,为此付出的代价是事务延迟时间增加。 一个给定的可用性组可支持最多三个同步提交可用性副本(包括当前主副本)。

支持几种形式的可用性组故障转移:自动故障转移、计划的手动故障转移(通常简称为“手动故障转移”)和强制的手动故障转移(通常简称为“强制故障转移”)

  • 使您能够将给定的可用性副本配置为支持以下一种或两种活动辅助功能:

通过使用活动辅助功能,可更好地利用辅助硬件资源,从而提高 IT 效率并降低成本。 此外,通过将读意向应用程序和备份作业转移到辅助副本,有助于提高针对主副本的性能。

  • 支持每个可用性组的可用性组侦听器。 “可用性组侦听程序”是一个服务器名称,客户端可连接到此服务器以访问 AlwaysOn 可用性组的主要副本或次要副本中的数据库。 可用性组侦听器将传入连接定向到主副本或只读辅助副本。 侦听器在可用性组故障转移后提供快速应用程序故障转移。 有关详细信息,请参阅可用性组侦听程序、客户端连接和应用程序故障转移 (SQL Server)
  • 支持灵活的故障转移策略以便更好地控制可用性组故障转移。
  • 支持用于避免页损坏的自动页修复。
  • 支持加密和压缩,这提供了安全且高性能的传输方式。

大概介绍完后,我们开始今天的安装及配置介绍,

环境介绍:

SQL Server AlwaysOn 手册 sql server always on配置_操作系统

我们再次跳过DC的环境部署,如果需要参考,请查看本地博客中关于DC的相关文章。

SQL Server AlwaysOn 手册 sql server always on配置_数据库_02

我们首先准备第一台SQLServer服务器,

SQL Server AlwaysOn 手册 sql server always on配置_操作系统_03

然后开始安装SQLServer2016

SQL Server AlwaysOn 手册 sql server always on配置_数据库_04

选择需要安装的SQL Server功能角色,其实我们一般只安装数据库引擎即可。再次我们基本都安装了。

SQL Server AlwaysOn 手册 sql server always on配置_辅助副本_05

创建默认实例

SQL Server AlwaysOn 手册 sql server always on配置_SQL_06

服务器配置,我们选择混合模式

SQL Server AlwaysOn 手册 sql server always on配置_SQL_07

安装完成

SQL Server AlwaysOn 手册 sql server always on配置_辅助副本_08

我们安装完之后,通过SSMS连接,需要注意的是SQL Server 2016开始需要单独安装SSMS工具,我们可以通过以下链接进行下载安装。

https://docs.microsoft.com/en-us/sql/ssms/sql-server-management-studio-ssms

https://docs.microsoft.com/en-us/sql/ssms/download-sql-server-management-studio-ssms 英文版本

SQL Server AlwaysOn 手册 sql server always on配置_辅助副本_09

接下来我们准备第二台SQL Server

SQL Server AlwaysOn 手册 sql server always on配置_数据库_10

确认信息后,开始安装

SQL Server AlwaysOn 手册 sql server always on配置_运维_11

安装完成

SQL Server AlwaysOn 手册 sql server always on配置_操作系统_12

因为我们需要创建AlwayOn高可用,所以需要将两台节点增加到故障转移群集中,所以我们需要安装故障转移群集角色,我们开始安装故障转移群集中,我们该服务和SQLServer安装在一台。

首先是第一台-SQL2016-01

SQL Server AlwaysOn 手册 sql server always on配置_操作系统_13

安装完成

SQL Server AlwaysOn 手册 sql server always on配置_操作系统_14

然后第二台也安装完成--SQL2016-02

SQL Server AlwaysOn 手册 sql server always on配置_SQL_15

打开群集管理器后,接下来我们就是配置集群了,在配置群集之前建议先验证集群,将两个SQL Server服务器增加到节点中

SQL Server AlwaysOn 手册 sql server always on配置_辅助副本_16

因为我们是测试环境,没有配置心跳线,所以网络会有警告

SQL Server AlwaysOn 手册 sql server always on配置_运维_17

验证没有问题后,我们开始创建集群,定义集群名称及网络地址

SQLCLU 192.168.5.17

SQL Server AlwaysOn 手册 sql server always on配置_SQL_18

确认信息,开始创建

SQL Server AlwaysOn 手册 sql server always on配置_数据库_19

因为我们没有添加仲裁,所以会提示一下信息,当然,我们也可以在后面单独配置仲裁

SQL Server AlwaysOn 手册 sql server always on配置_运维_20

群集创建完成。

SQL Server AlwaysOn 手册 sql server always on配置_SQL_21

我们查看节点信息

SQL Server AlwaysOn 手册 sql server always on配置_SQL_22

接下来我们需要配置仲裁---群集名称--右击---更多操作--配置仲裁设置

SQL Server AlwaysOn 手册 sql server always on配置_SQL_23

在此我们选择高级仲裁配置

SQL Server AlwaysOn 手册 sql server always on配置_操作系统_24

选择所有节点

SQL Server AlwaysOn 手册 sql server always on配置_SQL_25

我们再次配置文件共享见证,可以根据自己的环境进行选择配置

SQL Server AlwaysOn 手册 sql server always on配置_数据库_26

我们使用文件仲裁见证,服务器放在了DC上,所以提前需要在DC上创建一个共享文件夹

SQL Server AlwaysOn 手册 sql server always on配置_辅助副本_27

指定文件共享路劲到DC服务器上的共享文件夹

SQL Server AlwaysOn 手册 sql server always on配置_运维_28

确认信息

SQL Server AlwaysOn 手册 sql server always on配置_运维_29

创建完成

SQL Server AlwaysOn 手册 sql server always on配置_数据库_30

接下来就是我们创建一个数据库及表信息DB1

SQL Server AlwaysOn 手册 sql server always on配置_操作系统_31

插入一些数据

SQL Server AlwaysOn 手册 sql server always on配置_辅助副本_32

都安装后,我们开始创建高可用组

我们通过SSMS右击--AlwayOn High Avaliablity 会有一个提示,

意思是必须为服务器实例启用AlwaysOn功能,之后才能在此实例上创建可用性组,若要启用AlowaysOn,请打开SQL Server配置管理器,右键单击SQL Server实例名称,选择属性,然后使用SQL Server属性对话框的AlwaysOn高可用性选项卡,

SQL Server AlwaysOn 手册 sql server always on配置_数据库_33

https://msdn.microsoft.com/en-us/library/ff878259.aspx

我们使用SSMS连接到SQL Server后,在服务器属性对话框中,单击一般页面。 的HADR启用属性显示下列值之一:

  • 真正的如果启用了总是在可用性组织
  • 假,如果总是在可用性组是禁用的。

SQL Server AlwaysOn 手册 sql server always on配置_数据库_34

使用SQL Server Configuration Manager进行配置,我们打开SQL Server 配置管理器

SQL Server AlwaysOn 手册 sql server always on配置_运维_35

打开SQL SERVER配置管理器后,我们打开SQL Server服务

SQL Server AlwaysOn 手册 sql server always on配置_操作系统_36

我们将SQL Server服务的登录账户换成域账户

SQL Server AlwaysOn 手册 sql server always on配置_SQL_37

然后我们勾选启用AlwayOn可用性组---

SQL Server AlwaysOn 手册 sql server always on配置_数据库_38

保存后,我们需要重启数据库服务

SQL Server AlwaysOn 手册 sql server always on配置_操作系统_39

我们同样把第二台服务器的AlwaysOn打开

SQL Server AlwaysOn 手册 sql server always on配置_操作系统_40

SQL Server AlwaysOn 手册 sql server always on配置_数据库_41

我们在创建高可用组之前,先创建一个共享文件夹,然后赋予权限

我们文件夹是在DC上创建的,需要注意的是,该共享文件夹只是临时的,创建完高可用组后就不会用到的。所以共享路劲创建在哪都无所谓

SQL Server AlwaysOn 手册 sql server always on配置_辅助副本_42

接下来我们就可以配置可用性组了

SQL Server AlwaysOn 手册 sql server always on配置_运维_43

定义高可用组名称—DB-Always

SQL Server AlwaysOn 手册 sql server always on配置_SQL_44

创建高可用组前,我们需要对数据库进行完整备份。

SQL Server AlwaysOn 手册 sql server always on配置_数据库_45

我们先对数据库进行备份。

SQL Server AlwaysOn 手册 sql server always on配置_辅助副本_46

备份完成

SQL Server AlwaysOn 手册 sql server always on配置_辅助副本_47

接下来回到创建高可用性组的想到就可以满足条件了

SQL Server AlwaysOn 手册 sql server always on配置_操作系统_48

默认只有一个副本,因为我们有两台服务器,所以我们就可以添加副本

SQL Server AlwaysOn 手册 sql server always on配置_SQL_49

连接第二个节点

SQL Server AlwaysOn 手册 sql server always on配置_SQL_50

我们按照自己的生产环境进行配置,即可。

SQL Server AlwaysOn 手册 sql server always on配置_操作系统_51

SQL Server AlwaysOn 手册 sql server always on配置_运维_52

我们提前在DC上创建了一个共享目录

SQL Server AlwaysOn 手册 sql server always on配置_辅助副本_53

我们先不创建侦听器

SQL Server AlwaysOn 手册 sql server always on配置_操作系统_54

选择同步目录,需要注意的是,该同步目录只是在一开始创建高可用性组的时候才可以用到,所以路劲无所谓

SQL Server AlwaysOn 手册 sql server always on配置_辅助副本_55

确认信息

SQL Server AlwaysOn 手册 sql server always on配置_操作系统_56

创建完成

SQL Server AlwaysOn 手册 sql server always on配置_SQL_57

创建完成后,我们可以看见相关的配置信息

SQL Server AlwaysOn 手册 sql server always on配置_辅助副本_58

接下来就是创建侦听器侦听器

   AlwaysOn创建后,客户端就需要进行连接,为了让应用程序能够透明地连接到主副本而不受故障故障转移的影响,我们需要创建一个侦听器,侦听器就是一个虚拟的网络名称,可以通过这个虚拟网络名称访问可用性组,而不用关心连接的是哪一个节点,它会自动将请求转发到主节点,当主节点发生故障后,辅助节点会变为主节点,侦听器也会自动去侦听主节点。

一个侦听器包括虚拟IP地址、虚拟网络名称、端口号三个元素,一旦创建成功,虚拟网络名称会注册到DNS中,同时为可用性组资源添加IP地址资源和网络名称资源。用户就可以使用此名称来连接到可用性组中。与故障转移群集不同,除了使用虚拟网络名称之外,主副本的真实实例名还可以被用来连接。

   SQL Server2012早期版本的SQL Server只有在实例启动的时候地会尝试绑定IP和端口,但是SQL Server2012却允许在副本实例处于运行状况的时候随时绑定新的IP地址、网络名称和端口号。因此可以为随时为为可用性组添加侦听器,而且这个操作会立即生效。当添加了侦听器之后,在SQL Server的错误日志中可以看到类似:在虚拟网络名称上停止和启动侦听器的消息。

   要注意的是,SQLBrowser服务是不支持Listener的。这是因为应用程序在使用Listener的虚拟网络名连接SQLServer时,是以一个默认实例的形式进行访问的(只有主机名,没有实例名),因此客户端根本就不会去尝试使用SQLBrowser服务。

我们创建一个侦听器

SQL Server AlwaysOn 手册 sql server always on配置_数据库_59

为侦听器定义一个名称和IP地址

SQL Server AlwaysOn 手册 sql server always on配置_辅助副本_60

创建完成

SQL Server AlwaysOn 手册 sql server always on配置_数据库_61

我们可以看见集群角色会自动配置好角色----是监听器的地址

SQL Server AlwaysOn 手册 sql server always on配置_SQL_62

最近后我们通过集群地址

192.168.5.17

alwayon地址也可以登录

192.168.5.16

SQL Server AlwaysOn 手册 sql server always on配置_SQL_63

接下来我们切换一下

切换前我们需要注意一个问题

切换的时候不能在集群管理器里面切换,需要在高可用性组下切换,不然会有问题,就算切换成功了,有些数据也会出现问题

我们首先在集群管理器里面查看节点所有者

SQL Server AlwaysOn 手册 sql server always on配置_辅助副本_64

SQL Server AlwaysOn 手册 sql server always on配置_辅助副本_65

接下来我们切换--右击高可用性组----故障转移

SQL Server AlwaysOn 手册 sql server always on配置_辅助副本_66

通过想到切换

SQL Server AlwaysOn 手册 sql server always on配置_SQL_67

因为我们只有两个节点,所以会显示节点2

SQL Server AlwaysOn 手册 sql server always on配置_运维_68

我们需要手动连接节点2

SQL Server AlwaysOn 手册 sql server always on配置_运维_69

开始连接

SQL Server AlwaysOn 手册 sql server always on配置_辅助副本_70

连接完成

SQL Server AlwaysOn 手册 sql server always on配置_数据库_71

确认信息

SQL Server AlwaysOn 手册 sql server always on配置_操作系统_72

切换完成

SQL Server AlwaysOn 手册 sql server always on配置_运维_73

我们就可以看见SQL2016-02就是主节点了

SQL Server AlwaysOn 手册 sql server always on配置_操作系统_74

各副本间的数据同步

   AlwaysOn必须要维护各副本间的数据一致性,当主副本上的数据发生变化,会同步到辅助副本上。这里AlwaysOn通过三个步骤来完成:

步骤1:主副本记录发生变化的数据;

步骤2:将记录传输到各个辅助副本;

步骤3:把数据变化操作在辅助副本上执行一遍。

具体实现如下:

   在主副本和辅助副本上,SQL Server都会启动相应的线程来完成相应的任务。对于一般的SQL Server服务器,即没有配置高可用性,会运行Log Writer的线程,当发生数据修改事务时,此线程负责将本次操对应的日志信息记录到日志缓冲区中,然后再写入到物理日志文件。但如果配置了AlwaysOny主副本的数据库,SQL Server会为它建立一个叫Log Scanner的线程,不间断的工作,负责将日志从日志缓冲区或日志文件里读出,打包成日志块,发送到辅助副本。因此可以保证发生的数据变化,不断送给各辅助副本。

  辅助副本上存在固化和重做两个线程完成数据更新操作,固化线程会将主副本Log Scanner所发过来的日志块写入辅助副本磁盘上的日志文件里,因此称为固化,然后重做线程负责从磁盘上读取日志块,将日志记录对应的操作重演一遍,此时主副本和辅助副本上的数据就一致了。重做线程每隔固定的时间点,会跟主副本通信,告知自己的工作进度。主副本由此知道两边数据的差距。Log Scanner负责传送日志块,不需要等待Log Writer完成日志固化;辅助副本完成日志固化以后就会发送消息到主副本,告知数据传输完成,而不需要等待重做完成,这样各自独立的设计,是尽可能减少 AlwaysOn所带来的操作对数据库性能的影响。