最近好不容易抽空研究了下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逻辑层次图:

* 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产品首页)。

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如下:

#创建dbtest1

drop database if exists dbtest1;

create database dbtest1;

use dbtest1;

#在dbtest1上创建tb1

create table tb1(

id    int not null,

gmt   datetime);

#创建dbtest2

drop database if exists dbtest2;

create database dbtest2;

use dbtest2;

#在dbtest2上创建tb2

create table tb2(

id    int not null,

val   varchar(256));

#创建dbtest3

drop database if exists dbtest3;

create database dbtest3;

use dbtest3;

#在dbtest3上创建tb2

create table tb2(

id    int not null,

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)。

cobar:schema SYSTEM "schema.dtd">

dsTest[0]

dsTest[1]

dsTest[2]

192.168.0.1:3306/dbtest1

192.168.0.1:3306/dbtest2

192.168.0.1:3306/dbtest3

test

test

STRICT_TRANS_TABLES

我们注意到,上述配置实际上已经把图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中找到,代码如下:

cobar:rule SYSTEM "rule.dtd">

id

2

512

cobar mysql cluster_Cobar使用文档(可用作MySQL大型集群解决方案)相关推荐

  1. mysql数据库更改文档_更改MySQL数据库目录位置

    更改MySQL数据库目录位置 MySQL默认的数据文档存储目录为/var/lib/mysql.假如要把MySQL目录移到/home/data下需要进行下面几步: 1.home目录下建立data目录 c ...

  2. mysql存储word文档_使用MySQL存储和检索word文档

    我需要使用Servlet将MS Word文档存储和检索到MySQL 5.1中.我有上传文件的代码,但我不知道我可以加入表格.我已经在我要插入.doc文件的字段中使用了BLOB. 这是我上传文件的代码片 ...

  3. 服务器文档梳理,服务器节点与集群

    服务器节点与集群 内容精选 换一换 节点是容器集群组成的基本元素.节点取决于业务,既可以是虚拟机,也可以是物理机.每个节点都包含运行Pod所需要的基本组件,包括Kubelet.Kube-proxy . ...

  4. MySQL的在线文档

    Oracle可以说是一款最"开放"的商业数据库,就是因为他提供了很全面的文档体系,能公开的文档,都可以从官网上找到,而且检索便捷. 碰巧看到徐老师写的这篇<MySQL全面的在 ...

  5. 计算机毕业设计Java大型商场应急预案管理系统(源码+系统+mysql数据库+lw文档)

    计算机毕业设计Java大型商场应急预案管理系统(源码+系统+mysql数据库+lw文档) 计算机毕业设计Java大型商场应急预案管理系统(源码+系统+mysql数据库+lw文档) 本源码技术栈: 项目 ...

  6. PHP实习之路—NO.1(看LINUX、APACHE、MYSQL、PHP文档)

    PHP实习之路-NO.1(看LINUX.APACHE.MYSQL.PHP文档): 基本功一定要扎实! 本文转自 Lee_吉  博客,原文链接:    http://blog.51cto.com/121 ...

  7. [官方] mysql 性能优化文档(中英文自译)

    大家好,我是烤鸭: 根据官方文档翻译并精简部分内容.建议有时间的朋友下载原版查看,全文106页pdf,快的话1-2天就能看完.自己翻译的有些地方可能不完整,欢迎指正. 官方pdf下载,需登录: htt ...

  8. 计算机毕业设计Java-超市会员积分管理系统-(源码+系统+mysql数据库+lw文档)

    计算机毕业设计Java-超市会员积分管理系统-(源码+系统+mysql数据库+lw文档) 计算机毕业设计Java-超市会员积分管理系统-(源码+系统+mysql数据库+lw文档) 本源码技术栈: 项目 ...

  9. 计算机毕业设计Javahtml5健身房信息管理系统(源码+系统+mysql数据库+lw文档)

    计算机毕业设计Javahtml5健身房信息管理系统(源码+系统+mysql数据库+lw文档) 计算机毕业设计Javahtml5健身房信息管理系统(源码+系统+mysql数据库+lw文档) 本源码技术栈 ...

最新文章

  1. echarts中的世界地图
  2. python编程的条件语句_Python 条件语句
  3. Quartz.net 开源job调度框架(二)----定点执行
  4. hexo部署在码云出现样式问题
  5. cad图标注释大全_CAD源泉插件快捷键使用教程(全集)
  6. 【antd】输入控件的思想
  7. jhipster项目迁移websocket
  8. echarts3 graph java_Echarts中graph类型的运用求教
  9. python编程的区别_Python与其它编程语言的区别
  10. Hadoop HDFS原理
  11. lg g2刷android8.0,lg g2线刷刷机教程(可救砖)
  12. 深入理解prach的频域和时域数据
  13. Leetcode︱448. Find All Numbers Disappeared in an Array找到所有数组中消失的数字.java
  14. 目标检测的名词概念(持续记录中.....)
  15. g77、gfortran、gcc的区别与联系
  16. c#中的反射的高级语法_Kubernetes第3部分中的seccomp新语法以及一些高级主题
  17. VS中C++导入并使用DLL文件使用步骤
  18. 如何创建phpinfo查看php信息?
  19. java流程控制原理与方法_1.从本质上看,计算机控制系统的工作原理可归纳为三个步骤,以下不属这三个步骤的是 ( )。_学小易找答案...
  20. Bootstrap重抽样方法

热门文章

  1. 积木赛尔号机器人_赛尔号:盖亚是如何一步步得到缪斯的青睐?千万别将他看成直男...
  2. php fsockopen socket,PHP利用socket(fsockopen)的简单示例
  3. android 获取元素的下标_Appium中定位方式by_android_uiautomator
  4. 宝塔挂载linux硬盘,宝塔移动硬盘挂载Linux服务器挂载ntfs移动硬盘
  5. 【Leetcode_easy】657. Robot Return to Origin
  6. 笔记之_java整理JavaScript
  7. CentOS中无法使用setup命令 -bash:setup: command not found
  8. MySQL调优系列基础篇
  9. C/C++ http协议发送字段,文件,单个和多张图片
  10. MFC多线程各种线程用法 .