一.本文所涉及的内容(Contents)

  1. 本文所涉及的内容(Contents)
  2. 背景(Contexts)
  3. 架构原理(Architecture)
  4. 测试环境(Environment)
  5. 安装Moebius(Install)
  6. Moebius测试(Testing)
    1. 负载均衡测试(Load Balancing Testing)
    2. 高可用性测试(Failover Testing)
    3. 数据安全性测试(Security Testing)
  7. 总结(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的大公司来说价值就非常大了,有机会我再进行复杂一些的测试。

  Tips:我刚刚拿到微软的MVP,在此感谢:宋沄剑林勇桦黄钊吉3位MVP大牛的帮助和鼓励。

大数据时代下的SQL Server第三方负载均衡方案----Moebius测试的更多相关文章

  1. (转)大数据时代下的SQL Server第三方负载均衡方案----Moebius测试

    一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 背景(Contexts) 架构原理(Architecture) 测试环境(Environment) 安装Moebius( ...

  2. 大数据量下的SQL Server数据库自身优化

    原文: http://www.d1net.com/bigdata/news/284983.html 1.1:增加次数据文件 从SQL SERVER 2005开始,数据库不默认生成NDF数据文件,一般情 ...

  3. (转)大数据量下的SQL Server数据库优化

     在SQL Server中,默认MDF文件初始大小为5MB,自增为1MB,不限增长,LDF初始为1MB,增长为10%,限制文件增长到一定的数目:一般设计中,使用SQL自带的设计即可,但是大型数据库设计 ...

  4. 柯南君:看大数据时代下的IT架构(4)消息队列之RabbitMQ--案例(Helloword起航)

    柯南君:看大数据时代下的IT架构(4)消息队列之RabbitMQ--案例(Helloword起航) 二.起航 本章节,柯南君将从几个层面,用官网例子讲解一下RabbitMQ的实操经典程序案例,让大家重 ...

  5. 柯南君:看大数据时代下的IT架构(3)消息队列之RabbitMQ-安装、配置与监控

    柯南君:看大数据时代下的IT架构(3)消息队列之RabbitMQ-安装.配置与监控 一.安装 1.安装Erlang 1)系统编译环境(这里采用linux/unix 环境) ① 安装环境 虚拟机:VMw ...

  6. 柯南君:看大数据时代下的IT架构(5)消息队列之RabbitMQ--案例(Work Queues起航)

    二.Work Queues(using the Java Client) 走起   在第上一个教程中我们写程序从一个命名队列发送和接收消息.在这一次我们将创建一个工作队列,将用于分发耗时的任务在多个工 ...

  7. 看大数据时代下的IT架构(1)业界消息队列对比

    一.MQ(Message Queue) 即 消息队列,一般用于应用系统解耦.消息异步分发,能够提高系统吞吐量.MQ的产品有很多,有开源的,也有闭源,比如ZeroMQ.RabbitMQ. ActiveM ...

  8. 大数据时代下EDM邮件营销的变革

    根据研究,今年的EDM邮件营销的邮件发送量比去年增长了63%,许多方法可以为你收集用户数据,这些数据可以帮助企业改善自己在营销中的精准度,相关性和执行力. 最近的一项研究表明,中国800强企业当中超过 ...

  9. R You Ready?——大数据时代下优雅、卓越的统计分析及绘图环境

    作者按:本文根据去年11月份CSDN举办的“大数据技术大会”演讲材料整理,最初发表于2012年2月期<程序员>杂志. 0  R 的安装

随机推荐

  1. .NET Core系列 :3 、使用多个项目

    通过前面的两篇文章,我们已经知道如何创建新的项目,如何生成并运行我们的应用程序,也知道(大致) project.json 文件中的内容是什么意思.但大多数项目往往也需要多个项目或引用的类库.我们要创建 ...

  2. nw.js桌面软件开发系列 第0.1节 HTML5和桌面软件开发的碰撞

    第0.1节 HTML5和桌面软件开发的碰撞 当我们谈论桌面软件开发技术的时候,你会想到什么?如果不对技术本身进行更为深入的探讨,在我的世界里,有这么多技术概念可以被罗列出来(请原谅我本质上是一个Win ...

  3. C语言 · 奇偶判断

    问题描述 能被2整除的数称为偶数,不能被2整除的数称为奇数.给一个整数x,判断x是奇数还是偶数. 输入格式 输入包括一个整数x,0<=x<=100000000. 输出格式 如果x是奇数,则 ...

  4. 有朋友问了数据库ID不连续,怎么获取上一篇和下一篇的文章?(不是所有情况都适用)

    呃 (⊙o⊙)…,逆天好久没写SQL了,EF用的时间长了,SQL都不怎么熟悉了......[SQL水平比较菜,大牛勿喷] 方法很多种,说个最常见的处理 因为id是自增长的,所以一般情况下下一篇文章的I ...

  5. 学习ASP.NET Core, 怎能不了解请求处理管道[6]: 管道是如何随着WebHost的开启被构建出来的?

    注册的服务器和中间件共同构成了ASP.NET Core用于处理请求的管道, 这样一个管道是在我们启动作为应用宿主的WebHost时构建出来的.要深刻了解这个管道是如何被构建出来的,我们就必须对WebH ...

  6. 步入angularjs directive(指令)--点击按钮加入loading状态

    今天我终于鼓起勇气写自己的博客了,激动与害怕并存,希望大家能多多批评指导,如果能够帮助大家,也希望大家点个赞!! 用angularjs 工作也有段时间了,总体感觉最有挑战性的还是指令,因为没有指令的a ...

  7. 【云知道】LoadRunner 录制问题集锦

    关键词:各路录制小白汇集于此 虽然知道君对录制不感冒,但总是看到扎堆的人说这些问题,忍不住要站出来了. 百度虽好,帮助了很多小白,但关键是百度并没有排除错误内容,经过历史的几年传播,错的都快变对的了, ...

  8. ,net core mvc 文件上传

    工作用到文件上传的功能,在这个分享下 ~~ Controller: public class PictureController : Controller { private IHostingEnvi ...

  9. 从阿里巴巴笔试题看Java加载顺序

    一.阿里巴巴笔试题: public class T implements Cloneable { public static int k = 0; public static T t1 = new T ...

  10. 浅谈Slick(2)- Slick101:第一个动手尝试的项目

    看完Slick官方网站上关于Slick3.1.1技术文档后决定开始动手建一个项目来尝试一下Slick功能的具体使用方法.我把这个过程中的一些了解和想法记录下来和大家一起分享.首先我用IntelliJ- ...