SQL ServerMyCat:取代Cobar数据库中件

Cobar
是阿里巴巴开源的一个数据库中件,为了缓解类似proxy这类的题材。目前和种类的发生异虎360开端源之Atlas。类似的发出基本在线上用起老无爽,问题多的仍MySQL
Proxy和SQL Relay,基本得以忽略。

 

Cobar  下载:https://github.com/alibaba/cobar

Atlas 下载:https://github.com/Qihoo360/Atlas

  

===============================================================

 

MyCat:取代Cobar数据库中件

  

好家伙是MyCAT?简单的说,MyCAT就是:
一个彻底开源的,面向企业应用开发之“大数据库集群”
支持工作、ACID、可以替代Mysql的加强版数据库 ?
一个好说是“Mysql”集群的商店级数据库,用来替昂贵的Oracle集群 ?
一个融合内存缓存技术、Nosql技术、HDFS大数据的时SQL Server ?
结合传统数据库与新颖分布式数据仓库的初一代店级数据库产品 ?
一个风行之数据库中件产品。

目标

不如本钱的拿长存的单机数据库及行使平滑迁移至“云”端,解决多少存储和业务规模迅猛增长状态下的数目瓶颈问题。

第一特性

支持 SQL 92标准 支持Mysql集群,可以当作Proxy使用
支持JDBC连接ORACLE、DB2、SQL Server,将其效为MySQL Server使用
支持galera for mysql集群,percona-cluster或者mariadb
cluster,提供高可用性数据分片集群,自动故障切换,高可用性
,支持读写分离,支持Mysql双主多从,以及同样兆多从之模式
,支持全局表,数据自动分片到差不多独节点,用于高效表关联查询
,支持独有的基于E-R
关系之分片策略,实现了快的表关联查询多平台支撑,部署及实施简单。

优势

因阿里开源之Cobar产品要研发,Cobar的泰、可靠性、优秀之架构和总体性,以及广大成熟的施用案例使MyCAT一起来即有着一个怪好之起点,站在巨人的肩头上,我们能够看又远。广泛吸取业界优秀的开源项目与翻新思路,将那融入到MyCAT的基因被,使得MyCAT在诸多者都遥遥领先于目前另部分同类的开源项目,甚至逾越某些商业产品。MyCAT背后出同等只是强有力的技艺集团,其参与者都是5年以上红软件工程师、架构师、DBA等,优秀之技能集团保证了MyCAT的产品质量。
MyCAT并无寄于任何一个买卖店铺,因此不像某些开源项目,将一些首要的特点封闭在该商业产品受,使得开源项目化了一个张。

悠长规划

每当支持Mysql的功底及,后端增加又多之开源数据库和商贸数据库的支持,包括原生支持PosteSQL、FireBird等开源数据库,以及经JDBC等艺术间接支持其他非开源的数据库如Oracle、DB2、SQL
Server等落实更智能的自我调节特性,如自行统计分析SQL,自动创建同调整目录,根据数据表的读写频率,自动优化缓存和备份策略等落实再次完善的监督管理作用以及HDFS集成,提供SQL命令,将数据库装入HDFS中并会快速分析并优秀的开源报表工具,使之富有一定的数量解析的力量。

 

MyCat架构

SQL Server 1 

 

 

MyCat官网:http://mycat.org.cn/

MyCat 下载:https://github.com/MyCATApache/Mycat-Server

MyCat文档:https://github.com/MyCATApache/Mycat-doc

 

 

延伸阅读:

同样步一步编写mysql中间件(学习Cobar和MyCat)

首先首—初步询问与搭建AIO  http://blog.csdn.net/crazy_hunter/article/details/41047215

亚首–了解MySQL协议及分析方法 
 http://blog.csdn.net/crazy_hunter/article/details/41074939

其三篇—-MySQL第一单保险分析和拍卖HandshakePacket   http://blog.csdn.net/crazy_hunter/article/details/41120381

第四篇—-实现伪MySQL服务器,基于MySQL协议的HelloWorld  http://blog.csdn.net/crazy_hunter/article/details/41309131

 

 

=========================================================

 

 

Alibaba的Cobar真是强大.

 

 

日前算是抽空研究了下Cobar,感觉是活的确大正确(在文档方面比Amoeba强多矣),特此推荐给大家。Cobar是阿里巴巴研发的关系项目数码的分布式处理体系,该产品成功取代了原基于Oracle的数码存储方案,目前既接管了3000+单MySQL数据库的schema,平均每天处理近50亿不良的SQL执行要。

第一,使用Cobar的基本力量如下:

分布式: 
Cobar的分布式重点是透过将表放入不同之库来实现: 

  1. Cobar支持用同样布置表水平拆分成多卖分别放入不同之库来实现表底程度拆分 
  2. Cobar也支持将不同之表放入不同之库 
  3. 多数情况下,用户会用上述两栽艺术混合使用 
    此间需要强调的凡,Cobar不支持用平布置表,例如test表拆分成test_1, test_2,
    test_3…..位居和一个库中,必须用拆分后底阐明分别放入不同的库来实现分布式。 

HA: 
在用户配置了MySQL心跳的图景下,Cobar可以自动往后端连接的MySQL发送心跳,判断MySQL运行状况,一旦运行出现异常,Cobar可以自行切换到备机工作。但用强调的是: 
1.
Cobar之主备切换出少数种点方式,一栽是用户手动触发,一种植是Cobar的心跳语词检测及异常后自行触发。那么,当心跳检测到主机异常,切换至备机,如果主机恢复了,需要用户手动切回主机工作,Cobar不会见以主机恢复时自动切换回主机,除非备机的心跳也回到异常。 
2.
Cobar独自检查MySQL主备异常,不体贴主备之间的数量并,因此用户需以使用Cobar之前以MySQL主备上安排双向共,详情可参考MySQL参考手册。 

其次,我们吧待注意Cobar的效力约束: 

1) 不支持跨库情况下之join、分页、排序、子查询操作。 
2) SET语句执行会让忽视,事务及字符集设置除外。 
3) 分库情况下,insert语句必须包含拆分许段列名。 
4) 分库情况下,update语句不可知更新拆分许段的价值。 
5) 不支持SAVEPOINT操作。 
6) 暂时只支持MySQL数据节点。 
7)
使用JDBC时,不支持rewriteBatchedStatements=true参数设置(默认也false)。 
8) 使用JDBC时,不支持useServerPrepStmts=true参数设置(默认也false)。 
9) 使用JDBC时,BLOB, BINARY,
VARBINARY字段不克以setBlob()或setBinaryStream()方法设置参数。 

然后,我们来分析一下Cobar逻辑层次图: 
SQL Server 2 
*
dataSource:数据源,表示一个切实的数据库连接,与物理存在的数据库schema一一对应。 
*
dataNode:数据节点,由主、备数据源,数据源的HA以及连接池共同整合,可以以一个dataNode理解为一个分库。 
* table:表,包括拆分表(如tb1,tb2)和非拆分表。 
* tableRule:路由于规则,用于判断SQL语句被路由于到具体什么datanode执行。 
*
schema:cobar可以定义包含拆分表的schema(如schema1),也可定义无拆分表的schema(如schema2)。 

Cobar支持的数据库结构(schema)的层系关系有着较强的油滑,用户可以以说明自由放置不同之datanode,也可是拿不同的datasource放置在同一MySQL实例上。在实质上利用中,我们需要经过配备文件(schema.xml)来定义我们要之数据库服务器和表的分布策略,这点我们将以后面的设置和布置部分受到介绍到。 

随着,我们来介绍Cobar的安装以及安排步骤:

下面我们用采取一个极端简便的分库分表的例证来说明Cobar的基本用法,数据库schema如下图(该实例也只是参照: Cobar产品首页 )。 
SQL Server 3 
1) 系统对外提供的数据库名是dbtest,并且其中起一定量摆放表tb1及tb2。 
2) tb1申明的数目被映射到大体数据库dbtest1的tb1达标。 
3)
tb2发明底同一片数据被映射到大体数据库dbtest2的tb2达到,另外一些多少被映射到大体数据库dbtest3的tb2达。 

1、环境准备 

操作系统:Linux或者Windows (推荐在Linux环境下运行Cobar) 
MySQL: http://www.mysql.com/downloads/  (推荐使用5.1上述版本) 
JDK: http://www.oracle.com/technetwork/java/javase/downloads/  (推荐用1.6以上版本) 
Cobar: http://code.alibabatech.com/wiki/display/cobar/release/  (下载tar.gz或者zip文件) 

2、数据准备 

一旦本文MySQL所于服务器IP为192.168.0.1,端口为3306,用户称吧test,密码也空,我们得创造schema:dbtest1、dbtest2、dbtest3,table:tb1、tb2,SQL如下: 

[sql]  view
plain copy

 

 

 

  1. #创建dbtest1  
  2. drop database if exists dbtest1;  
  3. create database dbtest1;  
  4. use dbtest1;  
  5. #在dbtest1上创建tb1  
  6. create table tb1(  
  7. id    int not null,  
  8. gmt   datetime);  
  9.    
  10. #创建dbtest2  
  11. drop database if exists dbtest2;  
  12. create database dbtest2;  
  13. use dbtest2;  
  14. #在dbtest2上创建tb2  
  15. create table tb2(  
  16. id    int not null,  
  17. val   varchar(256));  
  18.    
  19. #创建dbtest3  
  20. drop database if exists dbtest3;  
  21. create database dbtest3;  
  22. use dbtest3;  
  23. #在dbtest3上创建tb2  
  24. create table tb2(  
  25. id    int not null,  
  26. val   varchar(256));  

3、配置Cobar 

Cobar解压之后发生四只目录: 
bin/:可执行文件目录,包含启动(start)、关闭(shutdown)和重启(restart)脚本 
lib/:逻辑类库目录,包含了Cobar所需的jar包 
conf/:配置文件目录,下面会详细介绍 
logs/:运行日志目录,最重大的log有些许独:程序日志(stdout.log)和决定高出口(console.log) 

布置文件的用法如下: 
log4j.xml:日志配置,一般的话保持默认即可 
schema.xml:定义了schema逻辑层次图备受之具备因素,并利用这些要素与rule.xml中定义的平整组建分布式数据库系统 
rule.xml:定义了分库分表的规则 
server.xml:系统布局文件 

咱们以schema.xml中配置数据库结构(schema)、数据节点(dataNode)、以及数据源(dataSource)。 

[html]  view
plain copy

 

 

 

  1. <?xml version=”1.0″ encoding=”UTF-8″?>  
  2. <!DOCTYPE cobar:schema SYSTEM “schema.dtd”>  
  3. <cobar:schema xmlns:cobar=”http://cobar.alibaba.com/"&gt;  
  4.    
  5.   <!– schema定义 –>  
  6.   <schema name=”dbtest” dataNode=”dnTest1″>  
  7.     <table name=”tb2″ dataNode=”dnTest2,dnTest3″ rule=”rule1″ />  
  8.   </schema>  
  9.    
  10.   <!– 数据节点定义,数据节点由数据源和另外组成部分参数组织要成为。–>  
  11.   <dataNode name=”dnTest1″>  
  12.     <property name=”dataSource”>  
  13.       <dataSourceRef>dsTest[0]</dataSourceRef>  
  14.     </property>  
  15.   </dataNode>  
  16.   <dataNode name=”dnTest2″>  
  17.     <property name=”dataSource”>  
  18.       <dataSourceRef>dsTest[1]</dataSourceRef>  
  19.     </property>  
  20.   </dataNode>  
  21.   <dataNode name=”dnTest3″>  
  22.     <property name=”dataSource”>  
  23.       <dataSourceRef>dsTest[2]</dataSourceRef>  
  24.     </property>  
  25.   </dataNode>  
  26.    
  27.   <!– 数据源定义,数据源是一个有血有肉的后端数据连接的代表。–>  
  28.   <dataSource name=”dsTest” type=”mysql”>  
  29.     <property name=”location”>  
  30.       <location>192.168.0.1:3306/dbtest1</location> <!–注意:替换为您的MySQL IP和Port–>  
  31.       <location>192.168.0.1:3306/dbtest2</location> <!–注意:替换为汝的MySQL IP和Port–>  
  32.       <location>192.168.0.1:3306/dbtest3</location> <!–注意:替换为公的MySQL IP和Port–>  
  33.     </property>  
  34.     <property name=”user”>test</property> <!–注意:替换为您的MySQL用户名–>  
  35.     <property name=”password”>test</property> <!–注意:替换为汝的MySQL密码–>  
  36.     <property name=”sqlMode”>STRICT_TRANS_TABLES</property>  
  37.   </dataSource>  
  38. </cobar:schema>  

咱俩注意到,上述配置实际上就拿图2着之数据库结构布局好了。dbtest主要映射的凡dnTest1库(即192.168.0.1:3306/dbtest1库房),而其中的tb2表则是随规则rule1,被分配至dnTest2库(即192.168.0.1:3306/dbtest2库)和dnTest3库(即192.168.0.1:3306/dbtest3库)中。此外,规则rule1的概念可以于rule.xml中找到,代码如下: 

[html]  view
plain copy

 

 

 

  1. <?xml version=”1.0″ encoding=”UTF-8″?>  
  2. <!DOCTYPE cobar:rule SYSTEM “rule.dtd”>  
  3. <cobar:rule xmlns:cobar=”http://cobar.alibaba.com/"&gt;  
  4.   
  5.   <!– 路由规则定义,定义什么表,什么字段,采用什么路由于算法。–>  
  6.   <tableRule name=”rule1″>  
  7.     <rule>  
  8.       <columns>id</columns>  
  9.       <algorithm><![CDATA[ func1(${id})]]></algorithm>  
  10.     </rule>  
  11.   </tableRule>  
  12.   
  13.   <!– 路由函数定义,应用在行程由于规则之算法定义着,路由于函数可以从定义扩展。–>  
  14.   <function name=”func1″ class=”com.alibaba.cobar.route.function.PartitionByLong”>  
  15.     <property name=”partitionCount”>2</property>  
  16.     <property name=”partitionLength”>512</property>  
  17.   </function>  
  18. </cobar:rule>  

重组schema.xml中的情,我们可以看分表的条条框框是,按照id字段把tb2表中的数量分配到dnTest2和dnTest3点滴只分区中,其中id小于512底数目会让放置dnTest2储藏室底分区中,而另外的会吃置于dnTest3库的分区中,更多路由于算法可以参见《 行程由于文档 》。最后,我们来拘禁一下server.xml的配置,代码如下。 

[html]  view
plain copy

 

 

 

  1. <?xml version=”1.0″ encoding=”UTF-8″?>  
  2. <!DOCTYPE cobar:server SYSTEM “server.dtd”>  
  3. <cobar:server xmlns:cobar=”http://cobar.alibaba.com/"&gt;  
  4.    
  5.   <!–定义Cobar用户名,密码–>  
  6.   <user name=”root”>  
  7.     <property name=”password”>passwd</property>  
  8.     <property name=”schemas”>dbtest</property>  
  9.   </user>  
  10. </cobar:server>  

此的server.xml配置比较简单,只布置了地面Cobar服务之数据库结构、用户名和密码。在启动Cobar服务之后,使用用户名root和密码passwd就得登录Cobar服务。 

4、运行Cobar 

启航Cobar服务大粗略,运用bin目录下的start.sh即可(停止使用shutdown.sh)。启动成功之后,可以以logs目录下的stdout.log中观看如下日志: 

[html]  view
plain copy

 

 

 

  1. 10:54:19,264 INFO  ===============================================  
  2. 10:54:19,265 INFO  Cobar is ready to startup …  
  3. 10:54:19,265 INFO  Startup processors …  
  4. 10:54:19,443 INFO  Startup connector …  
  5. 10:54:19,446 INFO  Initialize dataNodes …  
  6. 10:54:19,470 INFO  dnTest1:0 init success  
  7. 10:54:19,472 INFO  dnTest3:0 init success  
  8. 10:54:19,473 INFO  dnTest2:0 init success  
  9. 10:54:19,481 INFO  CobarManager is started and listening on 9066  
  10. 10:54:19,483 INFO  CobarServer is started and listening on 8066  
  11. 10:54:19,484 INFO  ===============================================  

随之,我们即便足以使用“mysql -h127.0.0.1 -uroot -ppasswd -P8066
-Ddbtest”命令来报到Cobar服务了,再接下去的操作就跟以另外MySQL
Client中一样了。比如,我们可以运用“show
databases”命令查看数据库,使用“show tables”命令查看数据表,如下图: 
SQL Server 4 
继之,我们随下图备受的SQL指定为数表插入测试记录。 
SQL Server 5 
可看看,这里的tb2负涵盖了id为1、2、513底3漫漫记下。而实际上,这3修记下存储于不同的物理数据库及的,大家可交物理库上说明一下。 

至于Cobar的连日和以方法与MySQL一样,Java程序中好下JDBC(建议5.1上述之版),PHP中可以使用PDO。当然,Cobar还提供HA、集群等高级的效力,更多信息要参见其《 产品文档 》。此外,产品文档中还为我们提供了详尽的PPT文档《Cobar原理及应用.ppt》来介绍Cobar在实际上生育环境中之采用方法,真可谓之故心良苦啊! 

除此以外,特别解释一下大家可能比关心的心窝子跳检测问题,Cobar的心窝子跳检测关键用在以下简单个地方。 

1、在部署数据节点的下,我们得使用心跳检测来探测数据节点的运行状况。Cobar中使用实行SQL的章程来进展探测,简单且实用。例如,我们好拿前面实例中之schema.xml中的dataNode配置成下面的规范。 

[html]  view
plain copy

 

 

 

  1. … …  
  2.   <!– 数据节点定义,数据节点由数据源和其他组成部分参数组织要成为。–>  
  3.   <dataNode name=”dnTest1″>  
  4.     <property name=”dataSource”>  
  5.       <dataSourceRef>dsTest[0]</dataSourceRef>  
  6.     </property>  
  7.     <!–Cobar以及后端数据SQL Server源连接池大小设置–>  
  8.     <property name=”poolSize”>256</property>  
  9.     <!–Cobar通过中心跳来贯彻后端数据源HA,一旦主数据源心跳失败,便切换至备数据源上行事–>  
  10.     <!–Cobar心跳是经过向后端数据源执行同样修SQL语句,根据该语句之回来结果判断数据源的运作状态–>  
  11.     <property name=”heartbeat”>select user()<property>  
  12.   </dataNode>  
  13. … …  

2、当我们要对Cobar作集群(cluster),进行负荷均衡的时刻,我们啊需要采用心跳机制。不过此的布置则是在server.xml中,代码如下: 

[html]  view
plain copy

 

 

 

  1. … …  
  2.   <!–组建一个Cobar集群,只待以cluster配置中把有Cobar节点(注意:包括目前Cobar自身)都配置上虽可–>  
  3.   <cluster>  
  4.     <!–node名称,一个node表示一个Cobar节点,一旦配置了node,当前Cobar便会向这节点定期发起心跳,探测节点的运作情况–>  
  5.     <node name=”cobar1″>  
  6.       <!–Cobar节点IP, 表示手上Cobar将见面往192.168.0.1达标配置之Cobar发送心跳–>  
  7.       <property name=”host”>192.168.0.1</property>  
  8.       <!–节点的权重,用于客户端的载重均衡,用户可以通过命令查询有节点的运行状况与权重–>  
  9.       <property name=”weight”>1</property>  
  10.     </node>  
  11.     <!–时Cobar将会晤为192.168.0.2臻配备之Cobar发送心跳–>  
  12.     <node name=”cobar2″>  
  13.       <property name=”host”>192.168.0.2</property>  
  14.       <property name=”weight”>2</property>  
  15.     </node>  
  16.     <!–时Cobar将会见朝着192.168.0.3齐布置的Cobar发送心跳–>  
  17.     <node name=”cobar3″>  
  18.       <property name=”host”>192.168.0.3</property>  
  19.       <property name=”weight”>3</property>  
  20.     </node>  
  21.     <!–用户还好以Cobar节点分组,以便实现schema级别之细粒度负载均衡–>  
  22.     <group name=”group12″>  
  23.       <property name=”nodeList”>cobar1,cobar2</property>  
  24.     </group>  
  25.      <group name=”group23″>  
  26.       <property name=”nodeList”>cobar2,cobar3</property>  
  27.     </group>  
  28.   </cluster>  
  29. … …  

说到底,简单看一下Cobar的落实原理。

首先是系统模块架构。 
SQL Server 6 
自打达图备受得看来,Cobar的前头、后端模块都落实了MySQL协议;当接受到SQL请求时,会相继进行分解(SQL
Parser)和路由(SQL Router)工作,然后采用SQL
Executor去后端模块获取数据集(后端模块还担负心跳检测功能);如果数据集来自多单数据源,Cobar则需要将多少集进行组合(Result
Merge),最后回来响应。整个过程应比好掌握, 

下面是Cobar的网络通讯模块架构。 
SQL Server 7 
自从上图被好见到,Cobar采用了主流的Reactor设计模式来处理要,并采取NIO进行底层的数据交换,这大大提升系统的载荷能力。其中,NIOAcceptor用于拍卖前端请求,NIOConnector则用于管理后端平的连年,NIOProcessor用于管理大多线程事件处理,NIOReactor则用来完成底层的事件驱动机制,就是看起与Mina和Netty的网络型比较相似。如果生趣味,大家还得交Cobar站点的下载页面(http://code.alibabatech.com/wiki/display/cobar/release)获取该项目的源码,真是太周到了,让我们为富有开源精神的阿里人掌声鼓励一下! 

 

https://my.oschina.net/u/222931/blog/507957

相关文章