APP下载

浅析Always On高可用性功能

2016-11-26

网络安全和信息化 2016年11期
关键词:高可用性群集副本

引言:对于数据库来说,保证其安全运行和数据安全是必须重视的问题。在之前的SQL Server版本中,提供了数据库镜像,故障转移群集等高可用技术,这些技术都存在这样或那样的不足,无法完全满足用户的要求。从SQL Server 2012开始,提供了Always On这种新型的高可用技术,顾名思义就是让数据库永远在线正常运行,Always On集成了上述各种HA技术的诸多优点于一身,提供了功能强大的高可用性技术,能够有效降低架构部署的难度以及维护的复杂度。

Always On功能简介

同之前的HA(高可用性)技术相比,Always On提供了快速转移,快速客户端重定向,多副本、活动副本以及虚拟服务器网络名等功能,并且拥有支持自动、手动和强制三种故障转移方式,辅助服务器可以独立执行备份和DBCC维护命令,客户端的只读请求可以被自动定向到辅助服务器,主服务器和辅助服务器之间的数据会被加密和压缩,以提高安全性和网络传输效率。还可以实现多站点的部署等特点。

对于多副本的功能来说,在SQL Server 2012中最多可以支持4个副本服务器。对于SQL Server 2014来说,则支持的数量更多。当主服务器发生故障时,可以切换到任意一个辅助服务器上。在副本服务器上的数据库作为报表的工作负载使用,可以用于只读的访问请求,具有实时更新的特点。

要部署Always On高可用性方案,必须首先部署一套Windows 2008 R2群集环境,Always On仅要求所有的SQL Server实例都运行在同一个Windows群集中,但是SQL Server实例本身不需要使用群集模式。在Always On可用性组中包含一个或者多个用户数据库,这些数据库被称为可用性数据库。在每个可用性副本上都存在这些可用性数据库的副本,这些数据库副本彼此之间互相同步。这样,在执行故障转移操作时,可用性组中的多个用户数据库可以同时实现转移。在多个可用性副本间,只有一个可用性副本运行的主数据库是处于可读写状态,这个可用性副本称为主副本,其余的副本都是辅助副本,辅助副本上的辅助数据库只能接受读取操作。

当组建了Always On高可用性群组后,不仅要创建可用性组而且需要创建监听器。所谓监听器,就是一个虚拟的网络名称,可以通过这个虚拟网络名称访问可用性组,而不用关心连接的是哪一节点,它会自动将请求转发到主节点,当主节点发生故障后,辅助节点会变为主节点,侦听器也会自动去侦听主节点。

一个侦听器包括虚拟IP地址、虚拟网络名称、端口号三个元素。一旦创建成功,虚拟网络名称会注册到DNS中,同时为可用性组资源添加IP地址资源和网络名称资源。使用侦听器,让应用程序可以透明地连接到主副本服务器而不受故障转移的影响,即在故障转移到副本服务器后,应用程序会使用虚拟网络名称重新连接到SQL Server数据库上。Always On的数据同步原理是把主副本上发生的数据变化记录下来,再将这些记录信息传输到各个副本服务器上,然后将这些数据变化在辅助副本上按照同样的方法完成一遍。如果要结合事务来整体考虑Always On的可用模式,则分为异步和同步提交模式。可用性模式是Always On中每个可用性副本的一个属性,它决定了主副本在提交事务之前是否需要等待某个辅助副本将事务日志记录固化到磁盘。如果需要等待,则该Always On的可用模式为同步提交模式,反之则是异步提交模式。

对于异步提交模式来说,当辅助副本处于该提交模式下或仅主副本在该提交模式时,主副本无须确认该辅助副本是否已经完成日志固化,就可以提交事务。因此,主数据库事务提交不会受到辅助数据库的影响而产生等待。但辅助数据库的更新可能会滞后于主数据库,如果发生故障转移,可能会导致某些数据丢失。所以,这种可用模式适合于可用性副本的分布距离较远的情况。对于同步提交模式来说,要求主副本和辅助副本必须设置成同步提交副本。主副本须确认辅助副本已经完成日志固化才可提交事务,这样就保证两边的数据始终是同步的。但这种保障的代价是主数据库上的事务提交会有滞后时间。可以说,同步提交模式相对于性能而言更强调高可用性。

创建虚拟共享存储

在本例中存在三台服务器,一台是域控制器DC1,其 IP为 192.168.1.9,在其上安装的都是Windows Server 2008 R2。另外两台是SQL Server节点服务器,其中的节点1的公网IP为192.168.1.11,私 有 网络 的IP为192.168.2.11。节 点2的 公 网IP为192.168.1.22,私有网络的IP 为192.168.2.22。 在 域控制器上配置了DNS服务,在其中为不同的服务器分别设置了合适的域名信息。

图1 Microsoft iSCSI Software Target程序窗口

这里使用Microsoft iSCSI Software Target,来模拟所需的共享存储。这里准备3块共享磁盘,分别是用户群集仲裁磁盘(Q盘),存储SQL Server数据库和日志文件的群集磁盘(S盘),以及为SQL Server群集实例配置分布式事务协调器(DTC)准备的磁盘(M盘)。

在DC2上安装好Microsoft iSCSI Software Target程序,在该程序主界面(如图1所示)左侧选 择“Microsoft iSCSI Software Target”-“SCSI TARGET”项,在其右键菜单上点击“Create iSCSI Target”项,在向导界面中点击Next按钮,在下一步窗口中输入iSCSI目标名称(例如“sql cluster”)和描述信息,再在下一步窗口中点击“Advanced”按钮,在弹出窗口中点击“add”按钮,在添加标识符窗口中的“Identifer Type”列 表中选择“IP Address”项,在“Value”栏中输入节点1的IP地址,点击OK按钮保存配置信息。继续点击“Add”按钮,按照同样方法添加节点2的IP地址。这样就允许节点1和节点2服务器访问在DC1上模拟的iSCSI存储设备。点击“Finish”按钮,返回主界面。

创建好iSCSI目标后,需创建iSCSI存储盘。在窗口左侧的“Devices”项的右键菜单上点击“Create Virtual Disk”项,在向导界面(如图2所示)点击Next按钮,在下一步窗口中的“File”栏中输入所需的虚拟存储文件路径信息。在下一步窗口中的“Size of virtual disk”栏中输入具体的容量,单位为MB,再在下一步窗口中输入其描述信息。接下来需要允许上述创建的iSCSI目标来访问该虚拟磁盘,在下一步的“Access”窗口中点击“Add”按钮,在添加目标窗口中选择上述iSCSI目标,点击OK按钮,完成所需的操作。点击“Finish”按钮返回主界面。按照同样的方法,分别创建仲裁磁盘和用于DTC的虚拟磁盘。

图2 添加虚拟磁盘向导界面

图3 连接虚拟磁盘

当虚拟磁盘准备完毕后,需允许节点1和节点2服务器访问这些磁盘。在节点1服务器上的管理工具菜单中运行iSCSI发起程序,在弹出窗口中点击“是”按钮,允许其自动启动。在“目标”面板中输入其名称,在“发现”面板中点击“发现门户”按钮,在弹出窗口(如图3所示)中输入DC1的IP,例如192.168.1.9,端口保持默认,点击确定按钮。之后在“目标门户”栏中点击刷新按钮,在“目标”面板中的“已发现的目标”列表中发现目标信息,点击“连接”按钮,在连接到目标窗口中点击确定按钮,其状态就变成了“已连接”。在节点2服务器上执行同样的操作,连接到iSCSI目标上。在节点1服务器上运行“diskmgmt.msc”程序,在磁盘管理窗口中可以看到上述三块虚拟磁盘,例如其名称为磁盘1,磁盘2,磁盘3等,其均处于未分配状态。例如选择磁盘1,在其名称项的右键菜单中点击“联机”项,使其处于联机状态。然后在上述菜单上点击“初始化磁盘”项,完成初始化操作。点击“创建简单卷”项,对其执行格式化分区操作,为其分配的盘符为S。对磁盘2和磁盘3分别执行同样的操作,分别为其分配M和Q盘符。

在节点2服务器上执行同样的操作,对共享存储盘进行必要的配置,所不同的是只需要对其进行联机操作,无需再对其进行分区格式化处理。在节点1和节点2服务器上可以看到上述虚拟共享存储已经处于系统管理之下。请注意,在两台服务器上述磁盘的盘符需要保持一致。

组建Windows故障转移群集

在节点1服务器中打开服务器管理器,在窗口左侧选择“功能”项,在右侧点击“添加功能”链接,在向导界面中的“选择功能”窗口中选择“故障转移群集”项,点击“安装”按钮,完成所需的组件。在节点2服务器上同样安装故障转移群集组件。在节点1服务器上的管理工具菜单中运行“故障转移群集管理器”项,在右侧窗口中的“管理”面板中点击“创建一个群集”链接,在向导界面的选择服务器窗口中输入节点1的名称,点击“添加”按钮,将其添加到选定的服务器列表中。同理,将节点2的名称(例 如 sqljd2.xxx.com)也添加进来。在下一步窗口中选择“是”项,点击“下一步”按钮,执行配置验证操作(如图4所示),选择“运行所有测试”项,开始验证测试。

当验证完毕后,点击“查看报告”按钮,可以查看详细的报告信息。对于发现的问题,需要及时进行处理。例如,当发现磁盘写入延迟存在问题的话,可以在磁盘管理器中对上述虚拟共享磁盘进行格式化处理。当通过测试后,点击完成按钮,返回创建群集向导界面,在用于管理群集的访问点窗口中输入群集的名称,在“地址”列中输入其IP。点击下一步按钮,完成群集创建操作。在故障转移群集管理器窗口左侧点击“存储”项,可以查看仲裁见证盘以及存储盘等。

图4 验证群集各项属性

图5 仲裁配置窗口

对于Windows Server 2008群集来说,作为群集运行的所有节点服务器都必须采用投票算法来确定该节点在指定时间是否有仲裁。如果需要需改仲裁磁盘参数,可以在窗口左侧选择群集名称,在右侧点击“更多操作”-“配置群集仲裁设置”项,在配置界面中点击下一步按钮,在选择仲裁配置窗口中选择“多数节点”项,表示适用于存在奇数个节点服务器的群集环境。选择“节点和磁盘多数”项,适用于含有偶数个节点服务器的群集。选择“多数节点和文件共享”项,针对的是由特殊配置的群集,其使用的见证文件共享而不是见证磁盘(如图5所示)。在故障转移群集管理器窗口左侧选择“节点”项,在右侧可以查看节点服务器信息。在左侧选择“网络”项。在右侧选择“群集网络2”项,在其属性窗口中的“子网”栏中显示为“192.168.1.0/24”,表示为公用网络。

选择“允许客户端通过该网络连接”项,表示其允许客户端进行访问,可以将其名称修改为“公用网络”。对于群集网络1来说,在其属性窗口中的“子网”栏中显示为“192.168.2.0/24”是不许客户端进行访问的,属于私有网络,只允许节点服务器之间的通讯。可将其名称改为“私有网络”。

配置和使用Always On高可用性功能

在节点2和节点2服务器上分别安装单机实例 的 SQL Server 2014,Always On高可用性功能的底层是Windows故障转移群集,准备好群集环境后,就可以在节点1和节点2中的SQL Server数据库引擎中开启Always On功能。例如,在节点1和节点2上分别中打开SQL Server Configuration Manager程序,在窗口左侧选择“SQL Server服务”项,在右侧双击“SQL Server(MSSQLSERVER)”项,在其属性窗口的“AlwaysOn高可用性”面板(如图6)中的“Windows故障转移群集名称”栏中显示上述创建的群集名称,选择“启用AlwaysOn可用性组”项,点击确定按钮,需要重启SQL Server实例。

图6 开启AlwaysOn功能

之后需要准备所需的数据库,例如在节点1服务器中打开MicroSoft SQL Server Management Studio窗口,在本例中在“数据库”节点下存在名为“shujuku1”和“shujuku2”的两个数据库,我们需要将其加入到Always On高可用性组中,首先需要执行初始化同步处理,即该数据库需要在其他节点服务器上恢复,原数据库和恢复后的数据库在磁盘上需要保存到相同的位置。例如,上述两个数据库文件保存在“D:data”目录下。对应的,在节点2服务器上需要创建与之相同的目录。

所谓同步处理,就是对节点1上的数据库进行备份操作,之后在节点2上恢复数据库,让两个节点的数据库保持同步。在节点1的MicroSoft SQL Server Management Studio窗口左侧选择“AlwaysOn”-“可用性组”项,在其右键菜单上点击“新建可用性组向导”项,在向导窗口中点击下一步按钮,在“可用性组”名称栏中输入其名称(例如“keyongzu”),在下一步窗口中选择上述两个数据库,在下一步的“指定副本”窗口点击“添加副本”按钮,可以添加可用的辅助副本,可以设置是否允许自动故障转移,同步提交以及是否可读辅助副本等参数,建议全部选择。

点击“添加Azure副本”按钮,可以将副本保存到微软的公有云上,实现异地容灾功能。即使本地的数据中心出现损坏故障,也可以从Azure云中恢复数据。例如添 加“sqljd1”和“sqljd2”,“sqljd1”和“sqljd2”为两个节点服务器的两个副本,前者为主副本,后者为辅助副本。“sqljd1”和“sqljd2”是两个节点服务器的名称。在“端点”面板中可以查看端点的URL地址,端口号以及端口名称信息,在默认情况下,使用的是TCP 5022端口。为此,需要在防火墙上打开1433和5022端口,保证通讯顺利进行。在“备份首选项”面板中选择“首选辅助副本”项,表示在辅助副本上执行此可用性组的自动备份操作。如果没有可用的辅助副本,则在主副本上执行备份。

点击下一步按钮,可以选择数据的同步方式,选择“完整”项,表示通过为每个所选数据库执行完整的数据库备份和日志备份,来启动数据同步操作。将这些数据库还原到每个复制副本并连接到可用性组。在“指定所有副本并可访问的共享网络位置”栏中点击浏览按钮,选择可访问的网络共享路径。如果已经做过了数据初始化操作,选择“仅连接”项,表示在已将数据库和日志文件还原到每个辅助服务器的地方启动数据同步,所选数据库连接到每个辅助副本上的可用性组。点击下一步按钮,对该可用性组进行验证操作。点击完成按钮,完成该AlwaysOn可用性组的创建操作。

在MicroSoft SQL Server Management Studio窗口左侧选择“AlwaysOn高可用性”-“可用性组”-“具体的组名(主要)”-“可用的侦听器”项,在其右键菜单上点击“添加侦听器”项,在弹出窗口的“侦听器DNS名称”栏中输入其名称(例如“ztq1”),在“端口”栏中输入1433,在“网络模式”列表中选择“静态IP”项。点击“添加”按钮,在添加IP地址窗口中的“子网”列表中选择“192.168.1.0/24”,在“IPv4地址”栏中为该侦听器设置静态IP,例如192.168.1.23。点击确定按钮,完成该侦听器的创建操作。在域控制器DC1上打开活动目录用户和计算机管理窗口左侧选择“域名”-“计算机”项,在右侧可以看到该侦听器的名称。为了验证Always On故障转移群集是否正常运作,可以对其进行简单的测试,例如在节点1上的MicroSoft SQL Server Management Studio窗口工具栏上点击“新建查询”按钮,在数据库列表中选择“shujuku1”,在查询窗口中输入“select emp_name from shujuku1.dbo.emplyee where emp_no=1”,点击“执行”按钮,完成查询操作。

在节点2上的MicroSoft SQL Server Management Studio窗口左侧的“AlwaysOn高可用性”项的右键菜单上点击“刷新”项,之后打开“AlwaysOn高可用性”-“可用性组”-“具体的组名(辅助)”项,在其下可以看到可用的副本,可用性数据库,可用性侦听组等类别,其组成和节点1服务器完全相同。在“数据库”节点菜单中点击“刷新”项,下可以看到“shujuku1”和“shujuku2”的状态从“正在还原”变成了“正在同步”。在新建查询窗口中执行上述语句,可以得到相同的查询结果。在节点1上执 行“update emplyee set emp_name='xiaoli' where emp_no=1”语句,对目标数据执行对应的修改操作。在节点2中先选择“shujuku2”数据库,执行“select emp_name from shujuku1.dbo.emplyee where emp_no=1”语句,可以看到修改后的数据。

由此可见,当在主节点1上执行对数据修改操作后,在辅助节点2上的数据库副本是可读的,而且是实时同步的。在节点1上选择“AlwaysOn高可用性”-“可用性组(主要)”-“可用性数据库”-“shujuku1”项,在其右键菜单上点击“挂起数据移动”项,在弹出窗口中点击确定按钮,执行挂起操作。执行“update emplyee set emp_name='tang'where emp_no=1”,之后在节点2上执行“select emp_name from shujuku1.dbo.emplyee where emp_no=1”语句,可以看到的是修改之前的数据。当在节点1上选择“AlwaysOn高可用性”-“可用性组(主要)”-“可用性数据库”-“shujuku1”项,在其右键菜单上点击“恢复数据移动”项,在弹出窗口中点击确定按钮,恢复其活力后,在节点2上执行同样的操作,就可以看到修改后的数据了。

除在图形界面中执行测试外,也可以在命令行进行测试。例如在节点1的CMD窗口切换到“C:userssqldba”目 录,执行“sqlcmd-S sqljd1 -E-d shujuku1”命令,连接到目标数据库上,之后可以执行各种SQL语句。例如执行“select @@servername”和“go”语句,可以查看当前SQL节点的名称是“sqljd1”。如果在节点1中选 择“AlwaysOn高 可 用性”-“可用性组(主要)”项,在其右键菜单上点击“故障转移”项,在向导界面中点击下一步按钮,在选择新主副本窗口中选择节点2服务器,将其变成主副本,那么节点1就变成了辅助副本。在下一步窗口中,执行连接节点2的操作。点击完成按钮,实现故障转移操作。在节点1和节点2上分别针对数据库和Always On高可用性节点执行刷新操作,可以看到变动的效果。在上述命令行中再次执行执行“select@@servername”语句,可以查看当前SQL节点的名称变 成了“sqljd2”。对于AlwaysOn群集来说,具有数据库读写分离的功能。因为节点2已成为了主副本。

所以在节点2上新建查询,输入并执行等语句,完成只读路由的配置操作。

值得注意的是,其中的的“xxx.com”为具体的域名,“keyongzu”为 Always可用性组的名称。这里使用的是默认的安装实例,所以其中的端口号为1433。

如果使用的命令实例,该端口可能发生变化。可以打开SQL服务器配置管理器窗口,在左侧选择“SQL Server网络配置”项,在TCO/IP属性窗口中的“TCP动态端口”中查看实际的端口号。然后在CMD窗口中执行“sqlcmd -S ztq1 -E d shujuku1”和“go”命令,可以看到主节点为“sqljd2”,在该节点上对数据库可执行读写操作。执行“sqlcmd -S ztq1 -E d shujuku1 K Readonly”和“go”命令,可以看到只读节点为“sqljd1”,在该节点上只能读取数据库内容。其中的“ztq1”为侦听器名称。

猜你喜欢

高可用性群集副本
Cecilia Chiang, pioneer of Chinese cuisine
使用卷影副本保护数据
面向流媒体基于蚁群的副本选择算法①
超长公路隧桥高可用性监控平台方案分析
配置vCenter Server
在vSphere群集中配置EVC
校园一卡通服务端高可用性改造实施方案
OpenStack云计算平台高可用性的研究
基于自组织结对行为的群集机器人分群控制方法
一种虚拟化集群心跳算法