本文来自网易云社区
SQL Server 是windows平台.NET架构下标配数据库解决方案,与Oracle、MySQL共同构成了DB-Engines Ranking的第一阵营,在国内外企业市场中有着广泛的应用。Mirroring是SQL Server 最常用的高可用解决方案,具有自动故障转移,高安全模式下具有数据“零”丢失,对客户端透明等优势,目前AWS、阿里云、腾讯云均采用该技术实现云端SQL Server 高可用部署。今天我们就来聊聊SQL Server 高可用镜像实现原理;
数据副本
镜像技术实现了位于不同物理服务器上的两个SQL Server实例数据同步,在镜像集群中,SQL Server实例具有三种角色;
Principal:具有完整的数据副本,对外提供数据库读写服务;
Mirror:具有完整的数据副本,本身不提供读写服务,通过接收来自Principal的更新日志实现数据同步,允许创建快照实现报表;
Witness: 本身不存储数据,只负责在高安全运行模式下提供自动故障切换的能力,确保两个SQL Server实例只有一个对外提供服务,避免脑裂情况出现;
在镜像集群中,principal和mirror的数据同步是依靠事务日志来实现的,与Oracle和MySQL 不同,SQL Server的事务日志是Database级别的,不是实例级别的,每个Database都单独的事务日志,这也就使得SQL Server的镜像是可以基于Database层面实现。一个SQL Server实例中的两个Database,一个可以作为principal,一个可以作为mirror,分别与其他SQL Server实例组建镜像关系;另外,SQL Server 一个Database只能有一个mirror节点,一个mirror的database不可以再有mirror节点,这点与MySQL级联复制不同;
SQL Server的事务日志是物理记录级别的,记录了对数据库某个页的某行记录(slot)的操作,princip