[alwayson数据库未同步]关于主备库磁盘不一致引发的AlwaysOn备份问题处理

关于主备库磁盘不一致引发的AlwaysOn备份问题处理

【摘要】

企业环境中,SQLServer数据库的使用会涉及很多高可用架构,而AlwaysOn是目前非常流行的一种。在AlwaysOn架构中,官方推荐各个副本的环境配置信息要求一致,以方便在主备进行切换的时候更加方便接管主角色,但由于企业的经费预算方面的限制,会把资源分配划分优先级,比如SSD存储会优先给与主副本使用,其他副本则使用传统的机械盘,这样能在尽量节省成本的情况下,给予主库最好的性能。

在这样的场景下,副本之间的日志同步会存在效率方面的差距,进而可能引发其他的问题,本次的问题就是在这样一个场景下发生的:由于主副本和辅助副本的磁盘类型不一致而出现备份不成功问题。

【正文】

本次问题涉及的环境信息如下:

计算机名

操作系统版本

数据库版本

磁盘类型

DB01

WindowsServer2012R2

SQLServer2014withSP3

SSD闪存盘

DB02

Windows

Server2012R2

SQL

Server2014withSP3

机械盘

日常运行中该AlwaysOn没有出现问题,数据情况正常,同步也正常。

数据库备份计划都设置在辅助副本上,长期执行正常。

某段时间开始,辅助副本上的备份计划一直失败,且没有明确的指明原因信息,事件信息如下:

就问题现象和直接错误信息来看,没有任何可以参考的地方,于是先检查并明确出现问题的时间点,再去全面检查这些时间附近的系统错误日志和数据库错误日志,发现以下可疑的信息:

从以上信息来看,数据库的日志传输可能存在一些问题,并且涉及到卷影复制层面,那么可能操作系统上也存在一些问题。

去看数据库的ERRORLOG信息,也发现了一些异常的信息:

这些信息显示存在未对齐的日志IO,说明数据库的日志文件存在一定的问题,但是这个信息仅仅在辅助副本上面有,主副本上面情况正常。

就这些错误信息去进行查询,微软官方论坛有提出猜测性说法,认为两个副本所使用的磁盘扇区大小不同,就会产生这样的问题,去检查两个服务器的磁盘扇区字节数,确实是不一致:

辅助副本的磁盘物理扇区字节数是4096;

主副本的磁盘物理扇区字节数是512;

根据官方文档及相关博客的指引,日志错位的错误信息,极可能是由于这个原因导致的;

https://social.msdn.microsoft.com/Forums/en-US/9e4c38ee-8dd4-45f4-9e48-3a9b13af339f/error-there-have-been-xxx-misaligned-log-ios-which-required-falling-back-to-synchronous-io-when?forum=sqldatabaseengine

https://blogs.msdn.microsoft.com/saponsqlserver/2014/10/01/message-misaligned-log-ios-which-required-falling-back-to-synchronous-io-in-sql-server-error-log/

https://www.mssqltips.com/sqlservertip/5942/sql-server-misaligned-log-ios-which-required-falling-back-to-synchronous-io/

但是,辅助副本的备份失败,是否跟这个有关系呢?答案是有关系;

从理论层面看,AlwaysOn的数据同步,是日志块的传递和接收重做,而正是因为两个副本的磁盘扇区物理字节数不一致,导致了日志错位现象,所以比较有可能是错位了的日志文件导致备份失败;

官方对于备份失败的相关解释如下:

所以推测在进行卷影复制创建的时候,遇到了数据库日志文件读取的错误,复制副本的日志文件始终是错误状态,所以理论上是不具备条件进行卷影复制副本的创建的,于是backup出现失败;

参考链接:

https://support.microsoft.com/en-us/help/2615182/windows-server-backup-may-fail-because-of-the-sql-vss-writer

为了定位问题及验证推理,决定从源头出发来纠正:将两个副本的日志盘的物理扇区字节数调整到一致,即512,观察运行一周;

整个星期时间里,都没有再出现上面的错误信息,辅助副本的备份也正常进行,问题解决。

猜你喜欢

转载自www.cnblogs.com/sqlserver-mysql/p/12703046.html