查看: 65|回复: 0

最近帮客户实施的基于SQL Server AlwaysOn跨机房切换项目

[复制链接]

该用户从未签到

发表于 2019-11-3 14:49:57 | 显示全部楼层 |阅读模式
近来帮客户实施的基于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异地,对异地节点数据库做完整备份
然后拷贝到备份服务器或磁带库,这样就可以生存比力长时间的数据库备份,纵然开发要找回半年以致一年之前的那个数据也是可以的

SQL Review:代码审核,收集数据库性能数据,排查性能题目,尽可能减少对主库的影响


最后这次项目标整个切换过程还有很多细节,就不写在文章里了,有爱好的朋友可以发站短跟我交流^_^


参考文章
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
本文版权作者所有,未经作者同意不得转载。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?用户注册

x

相关技术服务需求,请联系管理员和客服QQ:2753533861或QQ:619920289
您需要登录后才可以回帖 登录 | 用户注册

本版积分规则

帖子推荐:
客服咨询

QQ:2753533861

服务时间 9:00-22:00

快速回复 返回顶部 返回列表