您的位置:首页 > 运维架构 > 网站架构

cobar数据库中间件详解,可解决数据库拆分和数据库高可用HA

2016-06-02 12:05 585 查看
cobar是基于MySQL的分布式数据库服务中间件

下载地址:https://github.com/alibaba/cobar

cobar的文档(在源码文件的doc目录中)写的还是比较详细的,使用前只需要仔细阅读:
里面会介绍cobar的各个配置、cobar的集群部署、cobar对mysql的主备切换、cobar使用注意情况...

这里对cobar的配置不做介绍,大家阅读github中的文档就可以。

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约束,使用时注意规避

不支持跨库情况下的join、分页、排序、子查询操作。

SET语句执行会被忽略,事务和字符集设置除外。

分库情况下,insert语句必须包含拆分字段列名。

分库情况下,update语句不能更新拆分字段的值。

不支持SAVEPOINT操作。

暂时只支持MySQL数据节点。

使用JDBC时,不支持rewriteBatchedStatements=true参数设置(默认为false)。

使用JDBC时,不支持useServerPrepStmts=true参数设置(默认为false)。

使用JDBC时,BLOB, BINARY, VARBINARY字段不能使用setBlob()或setBinaryStream()方法设置参数

cobar路由规则重点介绍一下

将[0-1023]分为不同的区段,每个区段代表一个分库,其中区段的个数以及每个区段的长度由用户自定义;
用SQL中的拆分字段值对1024取模,结果落入哪个区段,SQL便被路由到那个分库执行(如果拆分字段不是
数值类型,则首先做一次hash)

1024的取模规则也使得cobar扩容变的简単,原始数据的分布区域库不会因为扩容而发生改变
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息