开发者社区> 杰克.陈> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

SQLSERVER 2012之AlwaysOn -- 一次硬件升级引发的问题

简介: 原文:SQLSERVER 2012之AlwaysOn -- 一次硬件升级引发的问题 这是上周遇到的一个案例:对已有的硬件进行升级而引发的问题,期间还触发了一个比较严重的BUG,可谓多灾多难;不过值得庆幸的是,在一连串连锁问题出现的时候,并没有出现人工操作失误(这往往是在处理故障中风险最高、影响最...
+关注继续查看
原文:SQLSERVER 2012之AlwaysOn -- 一次硬件升级引发的问题

这是上周遇到的一个案例:对已有的硬件进行升级而引发的问题,期间还触发了一个比较严重的BUG,可谓多灾多难;不过值得庆幸的是,在一连串连锁问题出现的时候,并没有出现人工操作失误(这往往是在处理故障中风险最高、影响最大的问题)而扩大故障影响范围;

 

==========================华丽丽的分割线==========================

    先说一下环境:

    我做的是跨机房3节点alwayson:

    部署方面:3个节点中,两个位于主机房,同步模式,另外一个位于异地机房,跨子网异步模式;

    软件方面:windows 2012+SQLSERVER 2012 SP2+CU3;

    硬件方面:由于该系统上线时间较早,除了本地硬盘(RAID 10)用于存放必要的安装程序包外,每个节点各配置了一块IO卡用于存放数据、日志文件以及备份

 

    此前该系统在使用时,应用侧经常出现提交事务抖动(本地机房两节点同步),改为异步模式后应用侧性能表现良好;我们知道,在同步模式下,由于应用端需要等待在同步secondary节点完成日志固化(harden)后才能收到提交或回滚信息,因此两节点间的网络环境,以及磁盘IO能力就成为上述影响的关键;

    而在此之前,我们已经对网络进行了优化(详见:《SQLServer 2012之AlwaysOn —— 指定数据同步链路,消除网络抖动导致的提交延迟问题》),因此可以排除网络影响;另外,我们通过对磁盘IO性能的监控(尤其是checkpoint时的影响),最终定位到磁盘IO确实存在压力,最后决定更换IO卡;

    在申请设备的时候,我们发现,由于此前的IO卡为第一代产品,与目前最新采购的第三代产品有兼容性问题(无法同时安装),因此需要先将secondary节点从alwayson环境中踢出,重新安装后重新初始化数据,并添加回alwayson环境;这一步按照标准步骤执行,十分顺利;

    其次,我们准备切换AG到已更新硬件的节点(此处我们叫他Node_B),结果发现切换过程很顺利(手动故障转移),但切换后不能进行备份(由于后续需要将另外一个节点进行同样的更新硬件操作,不能备份就意味着在重新加回alwayson环境时,不能初始化数据),随即又将服务切回Node_A上(最初的master节点);

    随后,我们检查了Node_B的errorlog,发现其中出现如下错误信息:

Information 29-Apr-2014 3:17:24 PM MSSQL$PRD 9012 Server There have been 25958400 misaligned log IOs which required falling back to synchronous IO. The current IO is on file W:\MOUNTLOG\PRDLOG\PRDLOG1.ldf. 
Information 29-Apr-2014 3:17:17 PM MSSQL$PRD 9012 Server There have been 25958144 misaligned log IOs which required falling back to synchronous IO. The current IO is on file W:\MOUNTLOG\PRDLOG\PRDLOG1.ldf.

    其实从Node_B更换完硬件,并添加回alwayson环境后,就一直再报类似的错误,只是切换比较顺利,我们都忽略了检查errorlog这一关键的步骤;

    继续来说上面的错误信息,misaligned是个针对于IO方向的报警,具体的原理可以参考以下文章

http://blogs.msdn.com/b/saponsqlserver/archive/2014/10/02/message-misaligned-log-ios-which-required-falling-back-to-synchronous-io-in-sql-server-error-log.aspx

    而导致misaligned的原因,是由于两个节点的IO卡,其物理扇区大小不一致(Node_A为512,Node_B为4096;此处的物理扇区是存储设备底层设置的,与操作系统中format 4K~64K不是一个概念,操作系统格式化的定义是分配单元大小,或称之为簇)。上述链接中对9012错误进行了详细的分析,再此不再赘述;

    另一方面,是由于misaligned而导致了切换节点后无法进行备份么?第二天,我又搭了一套类似的环境进行测试,但问题没有重现;于是我们准备用另一套方案进行升级:

    既然由于AG中两个节点的物理扇区大小不等导致misaligned,我们准备先在现有AG中再增加一个物理扇区大小为4096的节点(Node_C),然后再切换AG到Node_B后,踢掉Node_A。这样AG中有两个同步关系的节点(Node_A、Node_C,且物理扇区大小均为4096),或许可以实现备份。

 

==========================华丽丽的分割线==========================

    按照上述方案,我们又安排了一次停机。但这次在切换服务并踢掉Node_A后,不但备份问题没有解决,连AG组也变成正在解析的情况

image

 

 

 

    从下图中,AG组中只能识别到当前节点;

image

   

 

 

 

 

 

 

    但Node_B仍可以正常的访问(读写正常,listener IP也可以正常使用),而Node_C则无法访问;这种状态极为不合理;

    此外,在errorlog中,发现大量remote harden of transaction的报错

image

   

 

 

 

 

 

 

      执行备份(spid=509)被checkpoint进程阻塞(spid=23),又被DB STARTUP进程阻塞(spid=35)image

 

 

 

image

 

 

 

 

 

 

 

image

 

 

 

 

 

 

 

image

 

 

 

 

 

 

 

    根据微软工程的分析“这是最近刚刚发现的一个SQL 的bug,只发生在SP2 CU3和CU4上面。即便不做BACKUP,也会发生这样的阻塞。”

    这可能是由于SQL Server内部发生了死锁,建议尽快再所有节点上安装以下这个补丁。

    http://support.microsoft.com/en-us/kb/3033492

    http://support.microsoft.com/en-us/kb/3034679

    您可以单独安装hotfix,或者安装SQL 2012 SP2CU5,我们建议您对于所有打过SP2 CU3(5556)和CU4(5569)并且配有AlwaysOn的环境,都尽快打上CU5

    http://support.microsoft.com/en-us/kb/3037255/en-us

 

    但目前的情况是需要先保证alwayson恢复正常,于是我们准备通过停机复制数据文件的方式将数据库迁移到其他alwayson环境下;但在停止sqlserver服务的时候hang住

image

 

 

 

 

 

 

 

    无奈,只能重启服务器。但神奇的是,重启大法在这里居然是最完美的解决方案。重启后,各种服务均恢复正常;

image

 

 

 

 

 

 

 

总结:这个案例比较特殊,在切换过程中遇到了另一个BUG,但好在BUG中出现的内部进程的死锁通过重启得到了释放。另外,对于第一部分提到的misaligned的问题,最好在安装硬件后,先检查一下物理扇区的大小是否一致,以免出现性能问题;

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
全方位解读服务网格(Service Mesh)的背景和概念
为了解决微服务框架的侵入性问题,我们引入服务网格。
1254 0
PolarDB 并行查询的前世今生
本文会深入介绍PolarDB MySQL在并行查询这一企业级查询加速特性上做的技术探索、形态演进和相关组件的实现原理,所涉及功能随PolarDB MySQL 8.0.2版本上线。
520 0
企业内部应用接入钉钉获取部门及人员信息
企业内部应用接入钉钉,同时通过API获取当前企业下部门及人员信息
1197 0
MySQL模糊查询再也用不着 like+% 了!
我们都知道 InnoDB 在模糊查询数据时使用 "%xx" 会导致索引失效,但有时需求就是如此,类似这样的需求还有很多,例如,搜索引擎需要根基用户数据的关键字进行全文查找,电子商务网站需要根据用户的查询条件,在可能需要在商品的详细介绍中进行查找,这些都不是B+树索引能很好完成的工作。 通过数值比较,范围过滤等就可以完成绝大多数我们需要的查询了。但是,如果希望通过关键字的匹配来进行查询过滤,那么就需要基于相似度的查询,而不是原来的精确数值比较,全文索引就是为这种场景设计的。
25675 0
阿里云云原生一体化数仓正式发布  助力企业数据驱动业务创新
云原生一体化数仓是集阿里云大数据产品MaxCompute、DataWorks、Hologres三种产品能力于一体的一站式大数据处理平台。核心是3个一体化和全链路数据治理能力,包括离线实时一体、湖仓一体、分析服务一体、全链路数据治理。
1619 0
全面公测|Grafana服务:一张图表胜过千行指标&日志
Grafana 帮助运维人员轻松处理各类运维过程中遇到的各类数据可视化与分析难题。目前阿里云 Grafana 服务全面免费公测,帮助企业轻松构建运维数据可视化平台,轻松实现数据驱动运维!
1171 0
一起学Golang系列(五)初次接触Go语言可能遇到的各种坑!
前面介绍了Go语言的基础语法,所谓磨刀不误砍柴工,希望大家还是能熟悉掌握这些基础知识,这样后面真正学起Go来才会得心应手。 作为初学者。Go语言的语法有些和java类似,但也有很多不一样的地方。刚开始都会遇到各种各样的坑。下面就来总结下学习go语言的过程中,遇到的各种坑。
1040 0
设备接入--海康摄像头SDK
springboot-对接海康摄像头,兼容window和Linux环境
1355 0
Flink SQL 在快手的扩展和实践
快手实时计算团队技术专家张静、张芒在 FFA 2021 的分享
1162 0
无影云桌面,企业与个人的应用神器
阿里云无影云桌面( Elastic Desktop Service)的原产品名为弹性云桌面,融合了无影产品技术后更名升级。它可以为您提供易用、安全、高效的云上桌面服务,帮助您快速构建、高效管理桌面办公环境,提供安全、灵活的办公体系。
276306 0
+关注
杰克.陈
一个安静的程序猿~
10425
文章
2
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载