原创作品,转载请标明:http://blog.geekcome.com/archives/252
运行环境:
主机1:Ubuntu14.04 Desktop + MySQL5.5 + JDK 1.7(HP Z400) 内网IP地址:192.168.137.8
NODE1:Ubuntu 13.04 server + MySQL5.5 内网IP地址:192.168.137.31
NODE2:Ubuntu 13.04 server + MySQL5.5 内网IP地址:192.168.137.32
注:(NODE1和NODE2运行于XEN虚拟化平台,硬件环境HP Z800)
Cobar简介:
Cobar是关系型数据库的分布式处理系统,它可以在分布式的环境下看上去像传统数据库一样为您提供海量数据服务。
产品在阿里巴巴B2B公司已经稳定运行了3年以上。
目前已经接管了3000+个MySQL数据库的schema,为应用提供数据服务。
据最近统计cobar集群目前平均每天处理近50亿次的SQL执行请求。
Cobar最主要解决的问题是:分布式和HA。
分布式:主要是通过将同一个表的数据拆分成多个,放入不同的数据库实例,查询的时候也会按照同样的操作方式,来更新具体数据库实例中的对应的数据。
HA:高可用性,在设置了MYSQL心跳的情况下,如果主数据库发生了异常,Cobar会自动连接从数据库,如果主数据库恢复正常,只能手动恢复到主数据库。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()方法设置参数。
当然,如果想努力实现这些功能,可以fork官方的源码:https://github.com/alibaba/cobar
环境搭建
Cobar服务器:192.168.137.8:8066 用户名/密码:root/sa 实例名:dbtest
主机1:192.168.137.8:3306 用户名/密码:cobar/sa 实例名:dbtest1
Node1:192.168.137.31:3306 用户名/密码:cobar/sa 实例名:dbtest2
Node2:192.168.137.32:3306 用户名/密码:cobar/sa 实例名:dbtest3
Cobar-Server-1.2.7版本下载:http://pan.baidu.com/s/1pJudQh9
实验拓扑图如下:
cobar
首先分别在三个主机创建数据库实例:
01
创建dbtest1脚本
02
dropdatabaseif exists dbtest1;
03
createdatabasedbtest1;
04
use dbtest1;
05
#在dbtest1上创建tb1
06
createtabletb1(
07
id intnotnull,
08
gmt datetime);
09
创建dbtest2
10
dropdatabaseif exists dbtest2;
11
createdatabasedbtest2;
12
use dbtest2;
13
#在dbtest2上创建tb2
14
createtabletb2(
15
id intnotnull,
16
val varchar(256));
17
创建dbtest3
18
dropdatabaseif exists dbtest3;
19
createdatabasedbtest3;
20
use dbtest3;
21
#在dbtest3上创建tb2
22
createtabletb2(
23
id intnotnull,
24
val varchar(256));