基于aws平台构建SQL SERVER Always-On群集

基于aws平台构建SQL SERVER Always-On群集

SQL Server 2012/2014的Always On是针对sql高可用性新增的灾难恢复解决方案,是当前最推荐的sql故障群集架构。

基于AWS跨可用区(AZ)的物理容灾特性构建的sql always-on群集,更可消除由于物理设施方面的故障引起的整个群集不可用风险,保障了sql server可持续访问的高可用性。

传统的部署方式是在同一个物理位置(如同一层机房不同机柜)放置多服务器群集来实现高可用,这样的风险点是在于供电和制冷等物理设备的异常会导致群集不可用。而aws跨可用区的部署方式不仅避免了以上问题,更是可节约大量的线路成本和运维成本。

##本次验证的部署拓扑:

部署步骤概述:

  1. 第一部分:构建基础环境(AWS基础资源构建,AD、DNS、RDGW准备)
  2. 第二部分:构建WSFC故障转移群集
  3. 第三部分:构建SQL Server Always On群集

网络规划:

VPC 192.168.0.0/16
子网wsfc-az1-sub10 192.168.10.0/24
子网wsfc-az2-sub20 192.168.20.0/24
子网rdgw-az1-sub30 192.168.30.0/24

实例规划:

属性规划 规划值 描述
RDGW实例IP地址 192.168.30.123
AD实例类型 t2.medium
AD实例IP地址 192.168.10.100
AD的主机名 Dc
Wsfc节点1实例类型 c3.xlarge
Wsfc节点2实例类型 c3.xlarge
测试域名 wsfctest.com
Wsfc节点1主机名 SQL-Master
Wsfc节点2主机名 SQL-Slave
Wsfc1节点的IP地址 192.168.10.101 主IP,管理IP
192.168.10.102 Wsfc群集IP
192.168.10.103 SQL AG监听组IP
Wsfc2节点的IP地址 192.168.20.101 主IP,管理IP
192.168.20.102 Wsfc群集IP
192.168.20.103 SQL AG监听组IP
windows版本 Windows 2012 standard
Sql版本 Sql server enterprise 2014
Wsfc共享见证 \dc\wsfcshare
Sql server共享文件夹 \dc\sqlshare

第一部分:构建基础环境(AWS基础资源构建,AD、DNS、RDGW准备)

按照VPC的规划,

同一个VPC跨2个可用区创建3个子网

Sub10放置sql-master、DC节点

Sub20放置sql-slave节点

Sub30放置RDGW远程跳板机

  • 准备必须的安全组(测试环境开放所有流量)和密钥

  • 部署RDGW、DC的windows实例

RDGW作为跳板机和测试机,分配公网IP,并最先部署

注:以下的测试和操作都是通过该跳板机执行

  • 登陆DC的windows实例,开始安装域控制器(集成DNS)

    修改静态IP地址和域名解析指向

    进入管理控制台,根据向导安装新林中的域控制器,同时安装dns

    直至dc安装完毕,重启系统

    创建额外dc管理员:dc / 123.com(加入administrators和domain admins组)

  • 创建wsfc共享文件夹wsfcshare,授权域用户可读写

第二部分:构建wsfc故障转移群集

  • 创建两台windows sql server实例,分别属于不同的AZ

  • 每个节点按照规划分配好3个IP

  • 把两台sql实例加入到域中

    测试解析

  • 两台sql实例开始安装WSFC

Install-windowsFeature failover-clustering -includemanagementtools

  • 对WSFC进行配置

配置名为wsfctest.com的WSFC群集,资源IP使用192.168.x.102的附加IP

New-cluster -name wsfcluster -node sql-master,sql-slave -staticaddress 172.20.0.102,172.20.4.102

New-cluster -name wsfcluster -node sql-master,sql-slave -staticaddress 172.16.131.187,172.16.129.32

Set-clusterquorum -nodeadnfilesharemajority \adfs.light2cloud.com\wsfc

  • 打开wsfc群集管理控制台,查看群集状态

注:下图的网络状态是正确的,同一时间点只会有一个可用群集IP在线,如图

  • 登陆DNS,查看群集名称已经被正确解析,切与wsfc的联机网络对应(本例中为192.168.10.102)

  • 在RDGW测试连通性

  • Sql-master关机(模拟在线服务器故障),控制台可见192.168.10.102脱机,192.168.20.102联接,群集故障切换正常

  • 再次尝试解析群集名称,看wsfc是否生效

在dns服务器上,查看wsfccluster的解析变为192.168.20.102

  • 恢复故障服务器,群集状态恢复

至此,在aws中跨AZ的WSFC群集构建完毕,下一步基于WSFC实现sql server的always-on高可用

第三部分:基于wsfc实现sql server的Always On故障转移

  • 安装sql server企业版(只有企业版以上授权才支持Always On)

  • 配置sql service登录方式使用AD用户登录

  • 在sql server configuration manager中,对两个Sql Server节点开启Always On模式,重启sql服务

  • 创建testdb测试数据库,并完成一次全量备份

通过SQL Management Studio 连接数据库,右键单击testdb, 选择任务->备份

注意备份类型选择"完整"

  • 选择alwayson 高可用性向导

点击"添加副本",确认sql-master和sql-slave两个节点全部被添加。勾选"同步提交"和"自动故障转移"

选择"侦听器"标签,创建可用性组侦听器,侦听端口1433,添加192.168.x.103为侦听的两个网络IP

创建测试数据库 testdb

截图

对testdb进行全量备份

截图

配置高可用群集

修改AG可用性组的解析ttl时间为300s

在DNS上查看AG注册信息,会发现一个AG对应注册了两条A记录

在sql管理器中查看群集状态,群集工作正常

在wsfc管理器中的"节点"上查看AG群集状态

第四部分 ,开始测试:

用powershell写了一个插入循环,不断向测试表里插入数据。意在测试在故障切换的真实影响

其中测试sql地址使用AG的监听器的域名

当前查看解析到192.168.10.103,解析在sql-master上

故障模拟:

使sql-master宕机

数据实测插入有中断,测试过程4次插入失败,失败时间约为2s

AG的新dns已经解析到192.168.20.103,群集切换成功

在sql studio管理控制台的AG状态查看:可以看到sql-slave群集的角色状态已经变为"主要",故障的sql-master服务器降级为"辅助"

在wsfc群集管理器的"节点"中同样可以看到sql-master故障离线