当今世界是一个高度依赖于
计算机系统的世界,
数据库中所存储的数据代表了企业对于客户、订单、供应商、员工等所积累的知识。但是多少年来SQL Server行业内一直以来都缺少
负载均衡的产品或方案。这既是由于数据库引擎的事务性,也是由于数据库处于系统的核心位置。任何在应用程序与数据库之间的中间件都可能引入
单点故障点。
方案演进
开始
集群最开始并不是在
数据库系统上产生的,而是在应用服务器上。在计算机的早期,由于
大型计算机成本昂贵,就产生了由多个微型计算机组成的集群,在该类集群中,每一个节点上都运行各自的操作系统和应用,共同来为用户提供服务,组建应用集群的目的是为了性能和可用性。
此时,数据库层面还是单机运行,没有对应的集群产品。
双机共享存储
随着应用
服务器集群技术的发展,由第三方厂商开始基于现有的商用数据库推出了数据库
共享存储的集群。集群之间通过共享存储来实现
高可用性,如图1所示。
在此基础之上,Share-Disk架构又分为单活和双活,双活即为集群中的每一个节点都可以同时对外提供服务,而单活为集群中只有一个节点可对外提供服务,集群中的其他服务器作为冗余在“活”的节点出现故障时接替该服务器成为对外提供服务的节点。该类架构最典型的产品就是SQL Server Failover Cluster(SQL Server故障转移集群)、NEC的
EXPRESSCLUSTER、ROSE的ROSE HA。这种方式的弊端也是显而易见的,如下:
双机不共享存储
Share-Nothing架构又分为两种,首先是
分布式架构。将数据库中的数据按照某一标准分布到多台机器中,查询或插入时按照条件查询或插入对应的分区。
另一种是每一个节点完全独立,节点之间通过网络连接,通常是通过光纤等
专用网络。如图2所示。
在Share-Nothing架构中,每一个节点都拥有自己的内存和存储,都保留数据的完整副本。通常来说,又可以分为两种,可以
负载均衡和不可以负载均衡。
首先谈谈不可负载均衡的集群,在不可负载均衡的技术中,集群中的节点会被分为主节点和辅助节点,主节点向外提供服务,辅助节点作为热备(二阶段事务提交)或暖备(不需要保证事务同步),同时有可能使得辅助节点提供只读的服务。使用这个架构的技术包括:
SQL ServerAlwaysOn,SQL Server Mirror,Oracle Data Guard这种架构带来的好处包括:
多机负载均衡
在Share-Nothing架构的基础上,使得
负载均衡架构成为可能。所谓负载均衡就是将对数据库的负载分布到集群中的多个节点上,在集群中的每一个节点都可以对外提供服务,从而达到更高的吞吐量,更好的资源利用率和更低的响应时间。前端通过代理进行调度。使用该类架构的技术包括:MySQL上的
Amoeba,MySQL上的HA Proxy。
该类
负载均衡有一个共同点,就是前端需要一个单独的网关进行调度,因此引入了
单点故障点,网关处还需要做额外的高可用方案。该方案的好处包括:
莫比斯(Moebius)集群
莫比斯集群是一个为
SQL Server用户提供
负载均衡、高可用、
数据安全解决方案的产品。在基于前文提到的多机负载均衡的基础之上,做了大幅改进。架构图如图3所示。
莫比斯集群在多机负载均衡的基础上,前端调度是依赖于数据库引擎,每个数据库引擎上都存在调度节点,但同一时间只有一个主调度节点承载调度任务,当主节点宕机后,任何一个节点都可以接替调度任务,从而避免了前端网关类型引入的单点故障。
此外,莫比斯还有如下好处:
数据同步引擎
数据实时复制是构建多机高可用及
负载均衡,系统实时
容灾、备份所采用的一种核心技术。Moebius Core宿主在SQL Server 数据库引擎中,监测数据库内数据的变化并分析导致数据变化的原因,将变化的数据以最小的消耗同步到其它节点中,保证数据的实时一致性及事务的连续性。
故障监控引擎
快速发现故障节点并将其剥离
Moebius 集群通过“网络心跳”及“仲裁机制”可以实现自动故障监测,当侦测到集群中某节点发生故障时,会在最短的时间内发现并通过虚拟IP转移技术自动将故障节点的业务转移,同时将此节点剥离出集群。
SQL解析及调度引擎
监控SQL语句,透明地切分应用与数据库
解析:解析应用程序传递的SQL语句,并作相应的优化及缓存。
调度:按照业务的需要将SQL语句调度到相应的服务器上;在对SQL语句进行分发时采用多种负载均衡策略,可以实现SQL语句一级的负载均衡。
处理:按照业务的需要对SQL语句进行相应的处理,包括修改、替换SQL语句等等。