SQL Server 负载均衡集群方案之Moebius
一.本文所涉及的内容(Contents)
- 本文所涉及的内容(Contents)
- 背景(Contexts)
- 架构原理(Architecture)
- 测试环境(Environment)
- 安装Moebius(Install)
- Moebius测试(Testing)
- 总结(Summary)
二.背景(Contexts)
前几天在SQL Server MVP宋大侠(宋沄剑)的一篇文章"数据库集群技术漫谈”中看到了格瑞趋势在SQL Server上的负载均衡产品Moebius,搞数据库的都知道:在Oracle上有RAC,MySQL也有对应的方案(可参考:MySQL搭建Amoeba系列),而SQL Server上直到SQL Server 2012版本的AlwaysOn到来,微软都没有提供一个负载均衡方案,我从宋大侠那里找来一个Moebius的测试版本进行一下测试,下面是我测试的过程。
三.架构原理(Architecture)

(Figure1:Moebius for SQL Server逻辑架构图)
四.测试环境(Environment)
操作系统:Windows Server 2008 R2
数据库版本:SQL Server 2012
服务器A:10.0.0.1
服务器B:10.0.0.2
虚拟IP:10.0.0.15
五.安装Moebius(Install)
Moebius的安装非常简便,在装有SQL Server引擎的服务器上直接点击安装包进行安装,安装过程中一直下一步即可。在此就不再多说。
在此交待一下我的测试环境,是两台虚拟机,IP分别为10.0.0.1和10.0.0.2,操作系统和SQL Server的版本分别为Windows Server 2012和SQL Server 2012。安装完成后在Management Studio管理工具中右击数据库,在弹出菜单中即可找到Moebius的菜单,如Figure2所示。

(Figure2:Moebius for SQL Server 2012)
安装完成后,打开配置管理器界面,如Figure3所示。

(Figure3:Moebius for SQL Server 2012)
分别将10.0.0.1和10.0.0.2这两台服务器加入集群,这里可以注意到,Moebius是以数据库为粒度的,相比实例而言,该种粒度会更加灵活,如Figure4所示。

(Figure4:设置数据库)
将10.0.0.1和10.0.0.2两台服务器的数据库分别加入集群后,建立虚拟IP和端口,建立的虚拟IP为10.0.0.15,端口为5000,之后所有前端应用的连接就可以通过该虚拟IP进行了,完全不需要理会后端的架构,可以让前端与后端解耦,如Figure5和Figure6所示。

(Figure5:设置虚拟IP)

(Figure6:设置连接属性)
建立完成后,集群就配置好了,效果如Figure7所示。

(Figure7:Moebius for SQL Server 2012)
六.Moebius测试(Testing)
(一).负载均衡测试(Load Balancing Testing)
集群的搭建完成后,就可以开始对集群进行测试。首先是负载均衡测试。负载均衡的测试办法是使用压力测试工具,然后分别查看两个实例的Profiler,根据我咨询宋沄剑的说法是,负载均衡的算法是默认根据两台服务器的过去一段时间采集的性能指标进行分析,优先将查询导到负载低的服务器中,但集群刚搭建的时候没有历史数据,则按照平均分配的原则。下面是我使用SQLQueryStress进行负载均衡测试的结果,如Figure8所示。我开了100个线程,每个线程循环10次,来进行一个非常简单的查询。

(Figure8:SQLQueryStress压力测试)
得到的结果如Figure9、Figure10所示,从图可以看到:负载基本被平均分配到两台服务器(由于测试工具每个查询都会附上Set Statistics IO On和Time On,因此负载应该为100个线程*10次循环*2)。

(Figure9:Profiler跟踪信息)

(Figure10:Profiler跟踪信息)
由Figure9、Figure10大概可以看出:负载基本被平均分配到集群中的两台服务器中。
(二).高可用性测试(Failover Testing)
接下来就是测试高可用性。高可用的测试我主要集中于故障转移切换的速度。首先,我开100个线程,每个线程循环20次,在集群上运行负载均衡,如Figure11所示。

(Figure11:SQLQueryStress)
Figure11大概执行了20秒,此时我再次执行,并在执行过程中,强制关闭集群中10.0.0.1的SQL Server服务,运行结果如Figure12所示。

(Figure12:SQLQueryStress)
我们看到,已经发送到到10.0.0.1服务器的部分事务给前端应用程序提示失败并回滚,除去停止服务所花的时间,以及所有的查询由10.0.0.1和10.0.0.2负载均衡执行,到仅仅只剩下10.0.0.2单独执行所花的时间,故障转移的切换时间在10秒以内,这个速度已经和SQL Server的镜像几乎持平了。
此时,再来看Moebius集群管理器,就发现10.0.0.1服务器已经被集群脱机,且虚拟IP已经漂移到了10.0.0.2,如Figure13所示。

(Figure13:Moebius for SQL Server 2012)
(三).数据安全性测试(Security Testing)
在Figure13描述的情况之后,此时只有10.0.0.2一台服务器处于活的状态 ,因为Moebius采用的是Share-Nothing架构,因此应该可以利用冗余数据防止数据丢失,从而保证了数据安全。此时我在10.0.0.2上新建立一张表Demo。并重新启动10.0.0.1的数据库服务,在Moebius中重新联机,如Figure14、Figure15所示。

(Figure14:Moebius for SQL Server 2012)

(Figure15:Moebius for SQL Server 2012)
在联机的过程中,有一个恢复差异数据的步骤,联机完成后我们来看10.0.0.1数据库,Demo表已经咋恢复差异数据的时候被自动同步了,如Figure16所示。

(Figure16:Demo表)
七.小结(Summary)
通过上面对Moebius的简单测试来看,Moebius的确实现了对SQL Server的负载均衡、高可用以及保证数据的安全。对于国内能够有公司实现类似Oracle RAC这样的负载均衡方案还是让我非常惊讶的,如果该结果在复杂的数据库环境下依然能够保持同样的结果,那么这个方案对于使用SQL Server的大公司来说价值就非常大了,有机会我再进行复杂一些的测试。
转载:http://www.cnblogs.com/gaizai/p/3644510.html
SQL Server 负载均衡集群方案之Moebius的更多相关文章
- LVS : Linux Virtual Server 负载均衡,集群,高并发,robust
1 LVS : Linux Virtual Server http://www.linuxvirtualserver.org/ http://www.linuxvirtualserver.org/zh ...
- 解决socket负载均衡集群方案和代码实现
有一段时间,在考虑下socket 之间集群 可以在Nginx 下可以 但是不同服务器之间怎么通讯呢 后来自己也想可不可以用什么东西或者中间件来通讯 ,后来在百度之下 发现果然就是按照我所想的 ,在网上 ...
- LVS (Linux Virtual Server) - 负载均衡集群 - keepalived
今天稍微了解了LVS 的原理和使用,在网络上找到不少好文章,稍微加以处理并在这里备份: 原理介绍:Linux Virtual Server 关于:http://www.linuxvirtualserv ...
- 高性能Linux服务器 第11章 构建高可用的LVS负载均衡集群
高性能Linux服务器 第11章 构建高可用的LVS负载均衡集群 libnet软件包<-依赖-heartbeat(包含ldirectord插件(需要perl-MailTools的rpm包)) l ...
- LB 高可扩展性集群(负载均衡集群)
一.什么是负载均衡 首先我们先介绍一下什么是负载均衡: 负载平衡(Load balancing)是一种计算机网络技术,用来在多个计算机(计算机集群).网络连接.CPU.磁盘驱动器或其他资源中分配负载, ...
- 负载均衡集群企业级应用实战—LVS
一.负载均衡集群介绍 1.集群 ① 集群(cluster)技术是一种较新的技术,通过集群技术,可以在付出较低成本的情况下获得在性能.可靠性.灵活性方面的相对较高的收益,其任务调度则是集群系统中的核心技 ...
- 实现基于LVS负载均衡集群的电商网站架构
背景 上一期我们搭建了小米网站,随着业务的发展,网站的访问量越来越大,网站访问量已经从原来的1000QPS,变为3000QPS,网站已经不堪重负,响应缓慢,面对此场景,单纯靠单台LNMP的架构已经无法 ...
- LVS负载均衡集群
回顾-Nginx反向代理型负载 负载均衡(load balance)集群,提供了一种廉价.有效.透明的方法,来扩展网络设备和服务器的负载.带宽.增加吞吐量.加强网络数据处理能力.提高网络的灵活性和可用 ...
- 负载均衡集群中的session解决方案【转】
通常面临的问题 从用户端来解释,就是当一个用户第一次访问被负载均衡代理到后端服务器A并登录后,服务器A上保留了用户的登录信息:当用户再次发送请求时, 根据负载均衡策略可能被代理到后端不同的服务器,例如 ...
随机推荐
- Eclipse安装ADT插件
安卓开发环境搭建,如果选择的是ADT Bundle,则包含了eclipse和adt tools.但是有些时候是在已经独立安装了Eclipse的基础上,在线安装ADT插件,就稍微麻烦了. 一.在线安装A ...
- 浅谈 html- table换行
这么久都没有来发表点总结了,看了园里的盆友发表的文章中,我发现自己也长进了不少. 但是,最近两天遇见了一个比较棘手的问题,就是在做web页面时,我用了一个table,这个页面是要供手机端调用的,所以在 ...
- [OC Foundation框架 - 17] copy语法
一个对象使用copy或mutableCopy方法可以创建对象的副本 1.copy 需要实现NSCopying协议 创建出来的是不可变副本,如NSString, NSArray, NSDictionar ...
- jquery完成带复选框的表格行高亮显示
jquery完成带复选框的表格行高亮显示 通过jquery技术来操作表格是件简单的事,通过jquery的语法,可以很轻松的完成表格的隔行换色,悬浮高亮,在实际的应用中可能会出现表格中带复选框的,删除时 ...
- git 快速入门(二)
一.引子 git代码托管的优秀工具之一, 其工作原理和svn截然不同.一旦拥有主干master分支权限, 只要在本地拉取主干分支, 可以随时随地切换分支. 它拥有众多优点,eg :支持在断网的情况下, ...
- java反射快速入门(二)
上一遍博文 , 简单介绍java 反射的常用接口,本遍博文, 我会结合项目开发的实际例子讲解下 java反射的使用 现在有个需求, 要将一个对象转换成xml格式, 或者将一串xml转换一个对象, 这时 ...
- Java向PostgreSQL发送prepared statement 与 libpq 向PostgreSQL发送prepared statement之比较:
Java 代码,在数据库端,并没有当成 prepared statetment 被处理. C代码通过libpq 访问数据库端,被当成了 prepared statement 处理.也许是因Postgr ...
- PowerShell远程安装应用程序
安装MSI包 使用PowerShell调用WMI对象,你可以执行下面的脚本来安装你的MSI安装包: $box="deviis01" #this is the name of you ...
- Nginx+Keepalived+Tomcat之动静分离的web集群
#vi /etc/nginx/nginx.conf############################################user nginx nginx;worker_process ...
- dialog统一标准调用方法(内部记录)
更新base-config.js 对话框统一为三种形式(如后期需要再添加其他方式) //对话框--确定取消 //dialogOkFun:确定函数 dialogCancelFun:取消函数 functi ...