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

📅 2026/7/2 2:52:14
最近帮客户实施的基于SQL Server AlwaysOn跨机房切换项目
最近一个来自重庆的客户找到走起君客户的业务是做移动互联网支付是微信支付收单渠道合作伙伴数据库里存储的是支付流水和交易流水。由于客户那边没有DBA所以找到走起君商量一个数据库服务器搬迁项目。项目背景客户需要把在10楼的服务器全部搬到15楼而且需要在有限的停机时间之内客户使用的数据库是SQL Server2008R2Windows2008R2客户的两个重要要求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功能数据库大小100GAlwaysOn节点数5个 重庆机房3个 成都机房2个升级之后的示意图到目前为止大家可能已经猜到走起君做了这个架构之后要怎麽做了由于是点对点VPN所以切换过程涉及拆除VPN和重建VPN的过程切换过程1主库切换到成都机房2拆除10楼到成都机房的VPN310楼所有服务器关机搬到15楼415楼所有服务器开机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的属性界面将成都节点副本改为异步提交模式