Internet的规模每一百天就会增加一倍,客户但愿得到7天×24小时的不间断可用性及较快的系统反应时间,而不肯多次看到某个站点“Server Too Busy”及频繁的系统故障。 数据库
随着业务量的提升,以及访问量和数据流量的快速增加,网络各个核心部分的处理性能和计算强度也相应增大,使得单一设备根本没法承担。在此状况下,若是扔掉现有设备去作大量的硬件升级,必将形成现有资源的浪费,并且下一次业务量的提高,又将致使再一次硬件升级的高额成本投入。因而,负载均衡机制应运而生。 缓存
对于负载均衡,笔者常常接触的当属Oracle的负载均衡机制。下面,咱们先简单了解Oracle的负载均衡的实现方案。 安全
Real Application Clusters是双机并行服务器(8i及之前版本称做Oracle Parallel Server,OPS),用来在集群环境下实现多机共享数据库,以保证应用的高可用性,同时能够自动实现并行处理及均分负载,还能实现数据库在故障时的排错和无断点恢复。它能够自动进行负载平衡、故障修复和规划停机时间,以支持高可用性应用程序。若并行服务器中某节点失效,透明的应用程序容错可以把用户自动转接到另外一节点上继续运行,应用程序在用户没有察觉的状况下继续执行。这使周期性和非周期性发生故障的系统增大了连续可用性。进程的失效能够彻底透明地转移到另外一节点上去,经过适当地配置,能够指定全部查询都在客户端进行缓存,这样它们即可以在转移后的节点上从新设置。 服务器
下面咱们重点介绍Sql Server 2005是如何实现负载均衡的。 网络
Sql Server 2005的新特性 架构
端到端拓扑的事务性复制 负载均衡
SQL Server 2005对端到端(P2P)拓扑结构上事务性的复制增强了支持。P2P的拓扑结构支持无限的发布服务器,它们彼此之间能够互相交换事务。 性能
P2P拓扑是SQL Server的一个巨大进步。如今,多端点服务器能够更改数据,而且向其余的发布者复制事务。这就是说,订阅服务器再也不被限制在主要的报告环境中,能够经过事务性负载全球共享的方式将服务器分布开来。当用户的数量增长的时候,只要简单地向这个群体中添加服务器便可。 优化
除了将负载分布以外,这个拓扑结构还增长了可用性。若是任何一个点的服务器不可达,则池中其余服务器就会共享这个负载,由于每一个服务器都有其余全部服务器上可得到的所有数据集合。 进程
数据库镜像和快照
SQL Server 2005引入了数据库镜像的概念,来帮助得到高可用性。特别提醒的是,只要它正式发布了,数据库镜像就能够在SQL Server 2005上使用。然而,只有到SQL Server 2005 Service Pack 1才会支持镜像。
数据库快照是SQL Server 2005中引入的另外一项特性。快照是某一个时间点上的数据库的克隆。只要对镜像数据库进行了快照,就可让用户查询快照。快照的生成一般只须要几秒钟,由于它实际上在这个过程当中并无拷贝任何数据。所以,要把负载分布到主服务器和备用服务器上,就能够将数据库作镜像,而后阶段性地对备份服务器进行快照。并且还可使用快照在主服务器上进行报告。
软件实现SQL Server 2005的负载均衡
中间层
实现数据库的负载均衡技术,首先要有一个能够控制链接数据库的控制端。在这里,它截断了数据库和程序的直接链接,由全部的程序来访问这个中间层,而后再由中间层来访问数据库。这样,咱们就能够具体控制访问某个数据库了,而后还能够根据数据库的当前负载来调整每次链接到哪一个数据库。好处在两个方面:首先,它成功地将数据库放到了内网之中,更好地保护了数据库的安全性。若是数据库也在公网上,1433端口是很容易被攻击的,因此要保护数据库与之的链接,就用到了中间层。它能够将数据库更加好地保护在内网。其次,链接数据库的全部链接均可以控制,更方便DBA对数据的管理,看哪些链接更耗费数据库资源,以便更好地优化代码。
可是,也有两点要注意:第一,必需要作成Windows的服务程序。Windows发展到今天,若是以一个集成的大系统来说,作成服务程序更加稳定,也更加安全,这样作即便用户不登陆机器,也可使用。第二,必需要使用多个中间层。从中间层的做用能够看出,它承接了数据库的全部链接,因此,一旦出了问题,就会致使整个系统瘫痪。因此作多个中间层是必要的,这样,若是一个坏了能够登陆到另外一个。
实现多据库数据同步
中间层有了,下一步的工做是设置构建数据库集群。对于负载均衡,最重要的就是全部服务器的数据都是同步的。这是一个集群所必需的,由于,若是数据不一样步,那么用户从一台服务器读出的数据,就有别于从另外一台服务器读出的数据,这是不能容许的。因此必须实现一个数据库的数据同步。这里设置一个用于写入的数据库,设置两个用于读出的数据库,由于据统计,通常来说,70%的数据库操做为读操做。
首先,在写入数据库上作一个发布服务器,主要基于SQL Server 2005的复制技术,将即将用到的表都选上。注意,在链接上要选用模拟用户,而后共享时选择sa用户,这样就能够将数据共享了。
其次,在两个读服务器上作订阅服务,要注意一样的事项,这样一个“一写两读”的数据库集群就完成了。
数据库的安全备份
在一个大的系统中,系统的无端障性是很重要的,可是在刚才的系统下,若是用于写的服务器忽然坏了,整个系统就会出现问题,因此,再作个备份是必要的。
数据库镜像是SQL Server 2005大力推出的,它就是要实现数据库的安全转移,因此须要再单独拿出一台机器来作备份服务器,将彻底镜像写入该服务器,这样,即便写入服务器坏了,它也能够自动转移到备份服务器上来,保证不影响用户。
这实际上就至关于实现了对服务器的容灾管理,可是有一点须要注意,在这种镜像的体系中,必需要有一台服务器做为监视服务器,以便察看哪台服务器坏了,用以在机器出错以后迅速调整。
回传数据库的状态
数据库服务器均已配完,总体的机器集群架构已经构建,接下来的工做就是配置程序。
首先,在读和写的服务器都放上一个监控程序,它一样必须是Windows的服务,这样更稳定;其次,它能够设定成每隔30秒或者必定时间,将服务器的CPU、内存、网卡流量和当前数据库状态等信息发送回来。在这里须要设置一个权值,用以衡量CPU、内存利用率等信息的各自比例。在这个系统中,建议以CPU利用率为准。
中间层实现的负载均衡
到此为止,全部的准备工做都已完成,包括数据库的创建和配置,中间层的位置,下面所做的就是用软件来实现这个负载均衡。
首先,当一个用户有数据库请求时,先判断是读仍是写,若是是写的话,就直接返回写入服务器,这样当写服务器写完数据之后,差很少能够在3秒内返回其余两台机器。
其次,当遇到一个读的请求时,根据监控返回来的数据判断,根据刚才的权值返回一个当前最空闲的机器。须要注意的是,这时最好作一个记录器,用以保持一段时间的数值,可让管理员自行设定,更好地作到几台数据库的压力平衡。
最后,若是为主的写入服务器忽然坏掉,程序能够自动把备份的服务器切换过来,用刚才的备份服务器看成写服务器,而后作一个报警系统,用以通知管理员。一样,当监控服务器发现其余两台读服务器坏掉时,也会自动通知管理员,来处理服务器的异常状况,这样就能够保证系统的稳定运行,并且易于管理和维护。
总之,用软件和微软SQL Server 2005的一些新技术,能够很轻松地实现负载均衡,这样不但能够不用硬件来实现,方便管理员的操控,更有利于DBA管理数据库,及时发现问题。