最近帮客户实施的基于SQL Server AlwaysOn跨机房切换项目
最近帮客户实施的基于SQL Server AlwaysOn跨机房切换项目
最近一个来自重庆的客户找到走起君,客户的业务是做移动互联网支付,是微信支付收单渠道合作伙伴,数据库里存储的是支付流水和交易流水。
由于客户那边没有DBA,所以找到走起君商量一个数据库服务器搬迁项目。
项目背景
客户需要把在10楼的服务器全部搬到15楼,而且需要在有限的停机时间之内,客户使用的数据库是SQL Server2008R2,Windows2008R2

客户的两个重要要求
1、总停机时间少于10分钟
2、数据不能有任何丢失
出方案
针对这两个要求,SQL Server有哪些可以选择的方案呢?
方案一 复制
使用复制,当前客户环境已经有一套数据库复制在跑,10楼的发布库不动,在15楼增加一个订阅库,数据复制到15楼,但是复制有一个致命点:不保证数据一致性,因为复制是异步的
复制只能满足要求一,不能满足要求二,只能抛弃这个方案
方案二 日志备份
在15楼增加一台数据库服务器,10楼的发布库做完整备份还原到15楼的数据库,然后在搬迁的时候追加一个日志备份,并还原到15楼的数据库服务器
日志备份保存的数据是完整备份到日志备份这个时间段的数据,由于每天写入的变更数据量比较大,导致ldf文件也比较大,达到40G+,在测试过程中
发现,kill掉数据库所有连接-》设置数据库为只读模式-》备份-》移动日志备份文件-》还原日志备份文件-》设置数据库为读写模式 ,整个过程花费时间超过15分钟
只能满足要求二,不能满足要求一,并且一旦迁移过程出错,回滚时间+迁移时间>要求的停机时间
回滚:一旦15楼的数据库有数据写入,要回滚需要完整备份数据库或分离数据库然后还原到10楼或附加到10楼的数据库,回滚时间无法满足小于10分钟的要求
方案三 AlwaysOn
跟客户商量沟通之后,最终选定SQL Server的AlwaysOn

从示意图可以看出,目前的架构需要做如何升级
增加一个成都机房
所有数据库升级到SQL Server2014 SP2
所有操作系统升级到Windows2012R2
回滚:一旦15楼的数据库有数据写入,要回滚可以先kill掉数据库所有连接,禁用数据库帐号不让连接数据库,等成都从库同步完数据之后,重新手动故障转移回去成都机房
整个回滚过程10分钟之内可以搞定
然后哔哩吧啦哔哩吧啦过了一个月,客户说软件和硬件环境都已经准备好了,当中数据库升级过程走起君也有参与在内
升级完毕之后的环境
操作系统:Windows2012R2
数据库:SQL Server2014 SP2
两边机房带宽:各10M 没有拉专线
VPN:使用华为防火墙内置的VPN功能
数据库大小:100G+
AlwaysOn节点数:5个 重庆机房3个 成都机房2个
升级之后的示意图

到目前为止,大家可能已经猜到走起君做了这个架构之后要怎麽做了
由于是点对点VPN,所以切换过程涉及拆除VPN和重建VPN的过程
切换过程
(1)主库切换到成都机房

(2)拆除10楼到成都机房的VPN
(3)10楼所有服务器关机搬到15楼
(4)15楼所有服务器开机

(5)重建15楼到成都的VPN,建好VPN之后,成都机房的主库和域控会自动与重庆机房的域控和从库通信,主库会把差异数据发回重庆,无须人工介入
(6)成都机房主库切换回去重庆机房15楼

这里有一个比较严重的问题
客户没有使用专线,两边机房只有10M带宽!
客户没有使用专线,两边机房只有10M带宽!
客户没有使用专线,两边机房只有10M带宽!
重要的问题说三遍!
这样一个低成本的架构,没有专线,带宽不高,只用硬件防火墙的VPN搭建起来的内网,SQL Server可以做得到吗???
答案是:没问题,SQL Server完全做得到!!!
这里软件环境需要满足下面要求
1、操作系统必须是Windows2012R2或以上版本
2、数据库必须是SQL Server2012或以上版本
再次用文字描述一下切换过程
第一步:在重庆机房节点kill掉所有数据库连接并设置程序用数据库帐号设置为禁用,禁止连接数据库
第二步:打开AlwaysOn的AG的属性界面,将成都异地节点改为同步提交模式
第三步:使用脚本查看当前数据库中各个表的记录数,脚本地址:http://www.cnblogs.com/lyhabc/p/3828496.html
第四步:打开AlwaysOn的显示面板,查看成都机房节点数据同步情况,如果已经追上主库的日志那么实施故障转移
第五步:手动进行故障转移
第六步:在成都机房节点查看AlwaysOn的转移情况
第七步:在成都机房节点使用脚本验证当前数据库中各个表的记录数是否与手动故障转移之前的记录数相同,脚本地址:http://www.cnblogs.com/lyhabc/p/3828496.html
第八步:在成都机房节点打开AlwaysOn的AG的属性界面,将所有的辅助副本都改为异步提交模式
第九步:拆除10楼到成都的VPN
第十步:重庆机房所有数据库服务器关闭SQL服务然后关机
第十一步:所有服务器搬到15楼并开机
第十二步:重建15楼到成都的VPN
第十三步:在成都机房节点kill掉所有数据库连接并设置程序用数据库帐号设置为禁用,禁止连接数据库
第十四步:在成都机房节点打开AlwaysOn的AG的属性界面,将原来重庆机房的主副本节点改为同步提交模式
第十五步:使用脚本查看当前数据库中各个表的记录数,脚本地址:http://www.cnblogs.com/lyhabc/p/3828496.html
第十六步:打开AlwaysOn的显示面板,查看重庆机房节点数据同步情况,如果已经追上主库的日志那么实施故障转移
第十七步:手动进行故障转移
第十八步:在重庆机房节点查看AlwaysOn的转移情况
第十九步:在重庆机房节点使用脚本验证当前数据库中各个表的记录数是否与手动故障转移之前的记录数相同,脚本地址:http://www.cnblogs.com/lyhabc/p/3828496.html
第二十步:在重庆机房节点打开AlwaysOn的AG的属性界面,将成都节点副本改为异步提交模式
整个过程非常顺利,没有数据丢失,停机时间控制在10分钟之内
原理
相信不少人都用过SQL Server的AlwaysOn集群,AlwaysOn集群真的是非常方便,随意切换
数据做了加密和压缩 ,数据库块级别的传输
数据自动补偿
切换和回切不需要重建集群
操作傻瓜化
数据0丢失
重庆机房关机时间段数据自动补偿,避免数据丢失

两个停机时间点,每个时间点大约5分钟

时间点1

时间点2
最后一个,之所以要使用Windows2012R2操作系统,是因为Windows2012R2引入了动态仲裁机制,也就是说当前WSFC集群只有一个节点的情况下
整个WSFC集群也会不会挂掉

利用这个机制,当重庆机房所有服务器关机的情况下,成都机房的数据库节点依然能working,这个相比Windows2008R2是一个相当大的进步
这里有一个注意点
在Windows2008R2时代,因为没有动态仲裁机制,所以需要将异地节点的投票权去掉,这里有几个原因
1、当异地节点挂掉之后,整个WSFC集群节点凑不够基数,导致整个WSFC集群失去仲裁挂掉
2、主库无故切换到异地节点(设置为手动故障转移防止这种情况发生)
3、SQL2012异地节点无故变为正在解析状态(重启异地节点数据库服务器的SQL Server服务解决这个问题,现在SQL2014 SP2没出现过这个问题)
而到了Windows2012R2时代,有些老司机依然会继续使用这种做法,把异地节点的投票权去掉,这样做的话,当前整个WSFC集群没有一个节点拥有投票的情况下整个WSFC集群就会挂掉,成都机房的AG就会显示“正在解析”,这是因为当前整个WSFC集群里面没有一个节点拥有投票权,即使成都这个节点在开机状态,所以提醒一下大家,如果操作系统是Windows2012R2,不需要把异地节点投票权去掉,因为到目前为止,在上面的三种情况下,第二和第三种情况通过方法可以解决,第一种情况因为Windows2012R2引入了动态仲裁机制也不会发生

如上图,在只有成都节点的情况下,整个WSFC也不会挂掉
总结
到目前为止,走起君发现身边使用SQL Server的朋友大多只在本地机房部署AlwaysOn,而没有部署AlwaysOn异地节点
只在本地机房部署AlwaysOn是不利于应对风险的,做AlwaysOn异地容灾其实还有很多好处
使用场景
机房断网断电:之前有一个新闻《脉脉失联的15个小时》,联通净网行动把机房断网了,如果做了AlwaysOn异地节点那么可以把主库先切换到别的机房,应用也一并切换过去
那么就可以规避这种风险了
http://mt.sohu.com/20160730/n461773714.shtml
BI:BI抽取大量数据会影响线上的网络稳定性,部署AlwaysOn异地节点,BI从异地节点抽取业务数据,可以减少对业务的影响
数据库备份集中保存:因为线上服务器的磁盘容量一般都很有限,一般只保留几天或者一个星期的数据库备份,部署AlwaysOn异地,对异地节点数据库做完整备份
然后拷贝到备份服务器或磁带库,这样就可以保存比较长时间的数据库备份,即使开发要找回半年甚至一年之前的那个数据也是可以的
最后这次项目的整个切换过程还有很多细节,就不写在文章里了,有兴趣的朋友可以发站短跟我交流^_^
参考文章
http://www.tech-coffee.net/understand-failover-cluster-quorum/
http://windowsitpro.com/windows-server-2012/dynamic-quorum-windows-server-2012
附上AlwaysOn搭建教程
第一篇
http://www.cnblogs.com/lyhabc/p/4678330.html
第二篇
http://www.cnblogs.com/lyhabc/p/4682028.html
第三篇
http://www.cnblogs.com/lyhabc/p/4682986.html
第四篇
http://www.cnblogs.com/lyhabc/p/6136227.html
如有不对的地方,欢迎大家拍砖o(∩_∩)o
本文版权归作者所有,未经作者同意不得转载。
最近帮客户实施的基于SQL Server AlwaysOn跨机房切换项目的更多相关文章
- 基于Sql Server 2008的分布式数据库的实践(终结)
学习.操作心得 以前在做网站程序的时候一直用的是MYSQL,但是网上搜到MYSQL不支持分布式操作,然后便开始查询MSSQL的分布式数据库的设计与操作,后来在网上找到了<基于SQL SERVER ...
- 基于SQL Server 2008 Service Broker构建企业级消息系统
注:这篇文章是为InfoQ 中文站而写,文章的地址是:http://www.infoq.com/cn/articles/enterprisemessage-sqlserver-servicebroke ...
- 基于Sql Server 2008的分布式数据库的实践(五)
原文 基于Sql Server 2008的分布式数据库的实践(五) 程序设计 ------------------------------------------------------------- ...
- 基于Sql Server 2008的分布式数据库的实践(四)
原文 基于Sql Server 2008的分布式数据库的实践(四) 数据库设计 1.E-R图 2.数据库创建 Win 7 1 create database V3 Win 2003 1 create ...
- 基于Sql Server 2008的分布式数据库的实践(三)
原文 基于Sql Server 2008的分布式数据库的实践(三) 配置PHP 1.打开PHP配置文件,找到extension=php_mssql.dll,将前面的注释符号去掉 2.找到mssql.s ...
- 基于Sql Server 2008的分布式数据库的实践(二)
原文 基于Sql Server 2008的分布式数据库的实践(二) 从Win7连接Win2003的Sql Server 2008 1.新建链接服务器链接到Win2003的Sql Server 2008 ...
- 基于Sql Server 2008的分布式数据库的实践(一)
原文 基于Sql Server 2008的分布式数据库的实践(一) 配置Sql Server 2008(Win7) 1.打开SQL server2012,使用windows身份登录 2.登录后,右键选 ...
- SQL Server AlwaysOn中的几个误区
原文:SQL Server AlwaysOn中的几个误区 AlwaysOn自SQL Server2012之后已经发布很久了,最近我在给一些客户做咨询的时候经常被问起是不是应该使用AlwaysOn,从客 ...
- 从0开始搭建SQL Server AlwaysOn 第三篇(配置AlwaysOn)
从0开始搭建SQL Server AlwaysOn 第三篇(配置AlwaysOn) 第一篇http://www.cnblogs.com/lyhabc/p/4678330.html第二篇http://w ...
随机推荐
- 发布:.NET开发人员必备的可视化调试工具(你值的拥有)
1:如何使用 1:点击下载:.NET可视化调试工具 (更新于2016-12-29 19:11:00) (终于彻底兼容了部分VS环境下无法使用的问题) 2:解压RAR后执行:CYQ.VisualierS ...
- 简单粗暴地理解js原型链--js面向对象编程
原型链理解起来有点绕了,网上资料也是很多,每次晚上睡不着的时候总喜欢在网上找点原型链和闭包的文章看,效果极好. 不要纠结于那一堆术语了,那除了让你脑筋拧成麻花,真的不能帮你什么.简单粗暴点看原型链吧, ...
- Ubuntu 16.10 安装KolourPaint 4画图工具
KolourPaint 4画图工具简单实用,可以绘画.视频处理和图标编辑: • 绘画:绘制图表和“手绘” • 视频处理:编辑截图和照片;应用特效 • 图标编辑:绘画剪贴和标识透明化 1.在Ubuntu ...
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(66)-MVC WebApi 用户验证 (2)
系列目录 前言: 回顾上一节,我们利用webapi简单的登录并进行了同域访问与跨域访问来获得Token,您可以跳转到上一节下载代码来一起动手. 继续上一篇的文章,我们接下来演示利用拿到的Token来访 ...
- iOS开发之App间账号共享与SDK封装
上篇博客<iOS逆向工程之KeyChain与Snoop-it>中已经提到了,App间的数据共享可以使用KeyChian来实现.本篇博客就实战一下呢.开门见山,本篇博客会封装一个登录用的SD ...
- UML图中经常用到几种的关系图例
学习这个东西挺奇怪的,时间一长就容易忘记,或者记不清楚.今天看到一些UML图的关系,发现有些出入了,索性就写下来,以后再忘记的时候过来看看. 在UML的类图中,常见的有以下几种关系: 继承(Gener ...
- 【干货分享】流程DEMO-采购预算编制
流程名: 采购预算编制 业务描述: 在月初由计财部进行预算编辑,提交审批后预算生效 流程相关文件: 流程包.xml WebService业务服务.xml WebService.asmx WebSe ...
- BPM助力企业数字化转型
自九十年代末,流程管理开始引入国内,至今已经有20多年的历史了,由最初的部门级应用向企业级应用转变,大家的认知也经历了一系列的发展变化.不同阶段的信息化水平对企业的流程以及BPM平台也提出了不同的需求 ...
- linux常用命令(2)pwd命令
pwd 命令1 命令格式:pwd [选项]2 命令功能查看当前工作目录的完整路径3 常用参数一般不带任何参数如果目录是链接时:pwd -P 显示实际路径,而非使用链接路径4 常用实例:4.1 用pwd ...
- 【番外篇】ASP.NET MVC快速入门之免费jQuery控件库(MVC5+EF6)
目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策 ...