SQL Server 2005仍然不直接地支持负载均衡——但是它为以前SQL Server版本中可用的所有负载均衡方法提供了令人激动的改善和支持。
A端到端拓扑的事务性复制
SQL Server 2005对端到端(P2P)的拓扑结构上的事务性的复制加强了支持。
SQL Server 2000支持双向的复制,这就可以让两台服务器同时对彼此发布和订阅数据。服务器可以更新同一个共享数据,但是在这样的拓扑中你被限制在两台服务器上。
P2P的拓扑结构支持无限的发布服务器,他们彼此之间可以互相交换事务。当然,当参加的发布者的数量增加之后,事务性的延迟也就更大了。虽然在你的P2P拓扑结构中对节点的数量没有理论上的限制,但是只有在某个确定的数字之下才可以提供可接受的性能。微软推荐低于12个节点,以保证性能的优化。
无论怎样,P2P拓扑都是SQL Server的一个巨大进步:现在,多端点服务器可以更改数据,并且向其他的发布者复制事务。这就是说,订阅服务器不再被限制在主要的报告环境中。你可以通过事务性负载全球共享的方式将服务器分布开来。当用户的数量增加的时候,只要简单地向这个群体中添加服务器即可。
除了将负载分布之外,这个拓扑结构还增加了可用性。如果任何一个点的服务器不可达,则池中其它的服务器就会共享这个负载,因为每个服务器都有其它所有服务器上可获得的全部数据集合。
B表分割
分布式分区视图的工作方式在SQL Server 2005中与以前版本中的工作方式相同。然而,SQL Server 2005还支持表分区,这可以让你通过分布读写负载到多个磁盘(或者磁盘阵列)上来改善性能。
对于分区表,你必须识别分区要用的是哪一个卷,还有每个分区的范围。例如,一个标识字段的数值可以定义分区范围;一个分区内可以允许从1到1百万的数值,在第二个分区内可以允许1百万到2百万,以此类推。分区范围可以通过分区函数来指定.然后你还必须创建一个分区计划来讲分区函数中定义的每个范围值映射到分离的文件组上去。每个文件组都可以放在不同的磁盘上。
C备份和重新存储方面的改善(片段式重新存储)
SQL Server的备份和重新存储特性没有很大的改变,但是微软确实添加了一些新的函数来允许用户比以前更快地访问被重新存储的数据库。
SQL Server 2005现在支持片段式数据库重新存储。片段式重新存储可以让你首先重新存储主要的文件组,然后将数据库启动,处于在线状态。然后,可用的第二个文件组也可以被重新存储。只要第一文件组被重新存储了,那么用户就可以连接到数据库了。其他的文件组可以继续重新存储,与此同时,数据库也可以为查询和事务提供服务。正在重新存储的文件组标记为离线。 假设你有一个100GB的数据库,其中的75GB是历史性数据,很少被访问到。你可以将这些历史性数据放在它自己的文件组里面,然后让那些频繁访问的数据放在另外一个文件组。如果你将最近的数据放在第一文件组中,那么你就只需要重新存储25GB的数据就可以让用户连接到你的数据库上。然后你再重新存储其它的保留历史性数据的文件组。
D数据库镜像和快照
SQL Server 2005引入了数据库镜像的概念来帮助获得高可用性。特别提醒的是,只要它正是发布了,数据库镜像就可以在SQL Server 2005上使用。然而,只有到SQL Server 2005 Service Pack 1才会支持镜像,暂定在2006年年初发布。
从本质上来说,镜像的工作方式与日志传输类似。
1、事务日志记录可以应用在两个服务器中的数据库文件上。与日志传输不同的是,数据库镜像不需要你备份事务日志,也不需要拷贝备份到备份服务器上。
2、数据库镜像连续两次写入数据。与日志传输不同,备份的数据库必须保持在非恢复的模式中,这可以防止对数据的访问,即使是只读的方式。然而,镜像允许对备份数据库进行快照。
数据库快照是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管理数据库,及时发现问题
摘自: http://wenda.tianya.cn/wenda/thread?tid=5df5ab95b77d430a&clk=wttpcts