DENALI ALWAYSON 可用性组介绍
【介绍】
SQL Server针对高可用性,有好几种解决方案,包括: 日志传输,复制,镜像,群集。在下一个版本的SQL Server (代码名为DENALI) 引入了新的解决方案叫ALWAYSON。
ALWAYSON兼容了镜像和群集的优点。例如,数据库镜像只支持一个数据库。如果某个应用需要同时引用两个数据库,那么当其中一个数据库在主服务器,而另外一个数据库在镜像服务器上,应用就不能正常工作。ALWAYSON可以把多个数据库绑定为一个可用性组。以确保一个可用性组内的所有数据库,都在同一台服务器上。
另外,对镜像来说,我们只能有一个镜像。如果主服务器和镜像服务器都不能正常工作,那么整个应用就无法工作。而ALWAYSON可以配置超过两个的副本。以提高稳定性。镜像没有虚拟服务器名的概念,我们需要在客户端的连接字符串里,对镜像做特殊的配置。而ALWAYSON则提供了虚拟服务器名,对连接设定更加方便。
对于群集,我们第二个结点passive node一直处于等待状态。这可能对资源来讲,是一种浪费。ALWAYSON充分利用第二个结点,可以做只读操作,如报表浏览。数据备份等等。另外群集需要共享存储。ALWAYSON则不用。
【ALWAYSON场景】
如下图所示,我们的可用性组有两个数据库,当DB1出现问题后,系统会自动把另外一台服务器当做PRIMARY,同时,另外一台SECONDARY数据库依旧保持可读功能。
【ALWAYSON安装】
1. 我们用HyperV搭建了一个虚拟环境。以演示ALWAYSON功能。总共有三台虚拟机:
机器名 |
作用 |
网络 |
ClusterDC |
域控制器 |
公共网络地址:10.10.10.1 |
Denali1 |
结点1 |
心跳网络地址: 169.254.1.38 公共网络地址:10.10.10.38 |
Denali2 |
结点2 |
心跳网络地址: 169.254.1.35 公共网络地址:10.10.10.35 |
2. 在Denali1和Denali2这两台机器上,分别安装Denali CTP3。我们在安装的时候,要注意,选择stand-alone安装。实例使用缺省实例。
3. 安装完成后,我们到DENALI1和DENALI这两台服务器上,开启TCP/IP和Named Pipe侦听。(需要重启)
4. 然后到DENALI1和DENALI2这两台机器上的SQL Server Configuration Manager上,选择我们的Instance, 右键点击,选择属性。我们就会看到ALWAYSON设置如下图。我们选择 “Enable AlwaysOn Availability Groups”,然后选择Apply。再次重启服务器。
5. 我们用Management Studio 连接到Denali1这台服务器上,创建两个数据库DB1和DB2。并对它们做一次全备份。
6. 然后创建一个新的Availability Group, 如下图,右键点击Availability Groups, 创建一个名为 MYGROUP的Availability Group。并选择DB1和DB2属于该Group。
7. 在Specify Replicas 选项中,我们选择 Add Replica,把DENALI2加上。
8. 期间,我们会被提示,为MYGROUP创建一个listener,也就是Virtual Server Name。MYGROUP创建完成后,我们会在群集环境下,看到MYGROUP创建成功,并且为MYGROUP提供了一个Virtual Server Name: MYGROUP_Listener。
【ALWAYSON体验】
1. 我们在DENALI1服务器DB1上,建立一个表:
在DENALI2服务器上,使用DB1去查询该表,这时我们碰到错误:
根据错误提示信息,我们尝试去修改MYGROUP属性中的Connection Mode in Secondary Role, 使得能够read-only, 但是因为我们还在CTP3,所以在SECONDARY结点上的只读功能目前是关闭的。
2. 使用Virtual Server Name去连接,因为我们已经为Availability Group创建了一个虚拟的服务器名,所以我们可以用该服务器名去做连接。这样,我们无需象镜像一样,在客户端的连接字符串做特殊的设置。
3. 我们在DENALI1这台服务器上,我们手工停止SQL Server服务,来模拟DENALI1宕机或DB1出问题的情况。这时,我们会发现MYGROUP会自动转移到DENALI2这台服务器,在DENALI2服务器上执行相应的查询,我们能得到表T的结果。
4. 另外,我们从群集管理器也可以看到,MYGROUP并没有用到共享磁盘。SQL Server所使用到的磁盘,都是本地的。这跟普通的SQL Server群集是不一样的。
【小结】
DENALI的ALWAYSON可用性组,融合了群集和镜像的优点,能更大层度提供系统的高可用性,同时,我们在SECONDARY结点上,我们还可以对数据库做只读操作。(如报表,备份)等等,充分利用系统的资源。ALWAYSON还有其他的一些优点,在这里先不一一介绍了。
Comments
- Anonymous
December 22, 2011
非常想知道如果在primary库上建有发布,那么在failover后,发布订阅是自动接上,还是需要在指定代理参数PublisherFailoverPartner呢? - Anonymous
May 26, 2015
可以failover,但failover以后复制就不在了 只能sp_redirect_publisher 的方式,让复制支持AG的failover