如何迁移Alwayson AG
Windows cluster要求同一个cluster中的所有windows版本都是相同的,这样就出现一个问题,当我们要将对windows进行升级时,(例如从windows 2008 R2升级到windows 2012)不得不搭建一套新的windows cluster。你可以选择使用新的硬件搭建,或者将现有windows cluster中的节点一台一台的evict掉,重装/升级系统后加入到新的windows cluster中。具体的cluster升级方案我就不在这里讨论。马上进入主题:
SQL Server AlwaysOn Availability Group (后文简称为AG) 的一个要求是:所有的replica都要求隶属于同一个windows cluster。
所以当我们对windows cluster进行升级时,无法在新的windows cluster和现有的windows cluster之间建立AG。那么在迁移过程中会有一段时间内AG无法对外提供服务。
从数据库的角度上说,我们需要做下面的事情
- 接下来停止应用并删除cluster1中的Listener,确保没有外界来接使用SQL SERVER.
- Backup database
- Backup tail log
- 将备份文件copy到新的服务器
- Restore 到各个服务器
- 然后重新建立AG
- 创建Listener
- 重启应用
我们需要将数据库备份并还原到新的primary replica和secondary replica。 相应的downtime时间就是1+2+3+4+5+6+7+8想要的时间。 或许你想到了在新旧cluster之间创建一个mirroring,但遗憾的是,创建了AG的数据库是不再允许创建mirroring的.
那应当如何进行迁移呢?从SQL Server 2012 SP1 开始,允许在两套不同的windows cluster之间创建AG。下面用一个例子说明一下
有一个三个节点的windows cluster, windows版本为Windows 2008 R2
Domain:liweiyin3.lab
Cluster name: cluster1
Server002
Server003
Server004
Listener name: Listener1
三个节点上装有SQL Server 2012 SP1的standalone实例。均为默认实例。
之间建立了AG.拓扑图如下:

现在创建一套两个节点的windows 2012的windows cluster
Domain:liweiyin3.lab
Cluster name: cluster2
Server005
Server006
|
Datacenter 1 |
|
|
Server005 |
Server006 |
|
Win 2012 |
Win2012 |
|
Cluster2 |
|
两个cluster中间创建AG:
- 对cluster1上的AG数据库进行备份,包含full database backup和log backup
- 将第一步得到的文件在cluster2的节点上进行还原,指定为with norecovery.
- 接下来在cluster2的三个数据库上执行下面的语句
ALTER SERVER CONFIGURATION SET HADR CLUSTER CONTEXT='cluster1.liweiyin3.lab'
这条语句执行完毕后,这台数据库的cluster context就会切换为cluster1了。这个结果可以从下面的DMV中检查到
select cluster_name from sys.dm_hadr_cluster

4.接下就可以在cluster1和cluster2之间建立AG。我们可以使用UI或者T-SQL语句。需要注意的是,请将cluster2中的至少一个SQL Server的同步模式设置为Synchronous commit,以保证迁移是没有数据损失的。

这样,我们就建立了一套既包含win 2008R2,也包含win 2012的AG环境了。并且也可以正常地向外界提供服务,整个过程不需要downtime.

但需要注意的是,这种情况下是不允许在两个cluster之间进行failover的。相应的提示信息如下
An attempt to fail over or create an availability group failed. This operation is not supported when AlwaysOn Availability Groups is running under a remote Windows Server Failover Clustering (WSFC) cluster context. Under a remote cluster context, failing over or creating availability groups are not supported.

5.接下来停止应用并删除cluster1中的Listener,确保没有外界来接使用SQL SERVE
6.在Cluster1将AG进行offline操作
ALTER AVAILABILITY GROUP agName offline
7.将cluster2中所有sql server的CLUSTER CONTEXT切换回来
ALTER SERVER CONFIGURATION SET HADR CLUSTER CONTEXT=local
8.在cluster2中重新创建AG
9.在cluster2中创建新的listener
10.重启应用
这样所涉及的downtime就是5+6+7+8+9+10
和之前的解决方案相比,省去了backup,文件copy和restore的时间。其余的操作都是句操作,很大程度地减少了downtime。
更多信息
===
迁移之前,Cluster2中的sql server不允许创建任何AG。
迁移之前需要授予cluster2中的sql server启动账号访问cluster1注册表的权限
在第六步“在Cluster1中将AG进行offline操作”之前在各个AG 数据库中执行checkpoint,以前少cluster2中数据库的recovery时间。
对于multiply subnet场景,则需要在各自的子网内创建新的cluster,然后搭建AG。
Change the HADR Cluster Context of Server Instance (SQL Server) http://msdn.microsoft.com/en-us/library/jj573601.aspx
如何迁移Alwayson AG的更多相关文章
- SQLServer2016 AlwaysOn AG基于工作组的搭建笔记
最近搭建了一套SQLServer2016 AlwaysOn AG. (后记:经实际测试,使用SQLServer2012 也同样可以在Winserver2016上搭建基于工作组的AlwaysOn AG, ...
- 一次失败的生产系统中AlwaysOn AG切换经历
14:25分左右,某数据库主副本服务器崩溃报错,在数据库无法接收SQL语句进行调整的情况下重启了主副本服务器. 由于服务器重启时间会比较长,为了保证主副本服务器重启期间数据库能正常进行写入,强制将主库 ...
- 配置Always On AG
1.准备测试环境的服务器 在 Always On AG 中如果需要自动 Failover 至少需要集群中有 3 台服务器,但是我只是测试功能,因此只使用了两台服务器.并且本文不涉及任何 Pacemak ...
- 非常全面的SQL Server巡检脚本来自sqlskills团队的Glenn Berry 大牛
非常全面的SQL Server巡检脚本来自sqlskills团队的Glenn Berry 大牛 Glenn Berry 大牛会对这个脚本持续更新 -- SQL Server 2012 Diagnost ...
- SQL Server 诊断查询-(2)
Query #13 SQL Server Error Log(FC) -- Shows you where the SQL Server failover cluster diagnostic log ...
- 非常全面的SQL Server巡检脚本来自sqlskills团队的Glenn Berry
非常全面的SQL Server巡检脚本来自sqlskills团队的Glenn Berry Glenn Berry 曾承诺对这个脚本持续更新 -- SQL Server 2012 Diagnostic ...
- Sqlserver on linux 高可用集群搭建
一.环境准备 1 部署环境: 服务器数量:3台 Ip地址:192.168.1.191(主) 192.168.1.192(从) 192.168.1.193(从) 操作系统:CentOS Linux re ...
- SQL Server高可用实现方案
名词解释: WSFC:Windows Server Failover Cluster,在Windows Server操作系统上,由WSFC提供高可用性.故障检测和SQL Server AlwaysOn ...
- 配置Internal Load balancer中VM的外网访问
当在Azure中部署SQL VM时,处于安全考虑,不会配置VM的Public IP,会禁止外网的进出站访问,只允许从内部VNET,或者特定的内部IP访问.特别是当使用Azure Internal Lo ...
随机推荐
- Mac OS 解压缩软件:StuffIt Expander
由于今天下载一份文档,是在rar压缩包里,mac os系统默认是不支持RAR格式文件的解压的.在app store里找了下,找到一个免费的解压软件,名字叫:StuffIt Expander. 该软件由 ...
- (视频)《快速创建网站》 3.3 国际化高大上 - WordPress多语言支持
本文是<快速创建网站>系列的第7篇,如果你还没有看过之前的内容,建议你点击以下目录中的章节先阅读其他内容再回到本文. 访问本系列目录,请点击:http://devopshub.cn/tag ...
- Asp.Net Web Form 前后台传值
1,后台往前台传值----单个变量直接传递到页面元素 前台代码 <b><%=strCompanyName%>费用明细</b> 后台代码 public partial ...
- nodejs学习笔记(1)--express安装问题:express不是内部也或者外部的命令解决方案
"Express 是一个简洁而灵活的 node.js Web应用框架, 提供了一系列强大特性帮助你创建各种 Web 应用,和丰富的 HTTP 工具.使用 Express 可以快速地搭建一个完 ...
- BIEE 目录迁移(文件夹)方式
文件夹迁移方式一(归档--取消归档): 归档:analytics中选择目录,定位至指定文件夹,更多中选择归档,保存为 .catalog文档: 释放归档: 进入目录管理器,离线方式登陆, ...
- Javascript之旅——终点站:困惑的settimeout
有时候结局不是很美好,但起码这也算是一种结局,这个系列的最后一篇settimeout,这是一个让人困惑的函数,也是我一直在吐槽JS的 原因,我们看不到JS的源代码,setimeout同样也是,从始到终 ...
- MYSQL的JOB
要让JOB顺利运行,必须要打开MYSQL的定时器. -- 查看是否开启定时器 SHOW VARIABLES LIKE '%sche%'; -- 开启定时器 0:off 1:on -- 这个需要最高权限 ...
- mongoDB怎样拷贝一个collection从一个数据库到另一个在同一个主机上
new_database是目的数据库 db.<collection_name>.find().forEach(function(d){ db.getSiblingDB('<new_d ...
- 数据分页处理系列之一:Oracle表数据分页检索SQL
关于Oracle数据分页检索SQL语法,网络上比比皆是,花样繁多,本篇也是笔者本人在网络上搜寻的比较有代表性的语法,绝非本人原创,贴在这里,纯粹是为了让"数据分页专题系列"看起 ...
- IE下innerText与FoxFire下textContent属性的不同
<div> 我是中国 人 我<br/>爱 自己 的<div>祖国</div>. <div> IE下输出 我是中国 人 我 爱 自己 的 祖国 ...
