Cobar是taobao公司用Java开发的分布式MySQL中间件,可以支持数据的分片,且接口与mysql相同,因此可以无缝切换。并且不仅支持Mysql,而且还支持MariaDB哦,对版本的要求也很低,只要5.1以上就可以了。如果公司有较多的java项目,推荐使用。我们就来试试Cobar的集群搭建吧。
第一步:下载Cobar
现在可以从两个官方地址下载,一个是github上:https://github.com/alibaba/cobar 可以下载源码,也可以直接下载编译好的包https://github.com/alibaba/cobar/releases
淘宝现在的开源网站也有:
两个地方下载的目录结构稍有不同,但目前内容基本一样,且都可以运行,您可以自行选择。本例子所用版本为1.2.7。
第二步:安装多个MySQL数据库
请参考文章 的第二步,不过Cobar不需要gtid支持,因此gtid相关的配置可选,如果是MariaDB,这几行是不需要配的,此处我们使用的是MariaDB-10.1。
我们配置9个数据库用于测试
作用 地址 端口 数据文件路径 配置文件路径
分片1 192.168.1.8 14011 /dev/shm/data/co11 cobra/co11.cnf
分片2 192.168.1.8 14021 /dev/shm/data/co21 cobra/co21.cnf
分片3 192.168.1.8 14031 /dev/shm/data/co31 cobra/co31.cnf
分片4 192.168.1.8 14041 /dev/shm/data/co41 cobra/co41.cnf
备份1 192.168.1.8 14051 /dev/shm/data/co51 cobra/co51.cnf
备份2 192.168.1.8 14061 /dev/shm/data/co61 cobra/co61.cnf
备份3 192.168.1.8 14071 /dev/shm/data/co71 cobra/co71.cnf
备份4 192.168.1.8 14081 /dev/shm/data/co81 cobra/co81.cnf
不分片 192.168.1.8 14091 /dev/shm/data/co91 cobra/co91.cnf
编辑好co11.cnf ~ co91.cnf 这9个配置文件,执行init_start.sh即可全部初始化好并启动。这里之所以配置为ip而不是localhost或127.0.0.1是为了后面集群做准备。
第三步:部署Cobar
Cobar只有配置文件,没有其他的元数据,因此关键就在于配置文件的修改,下载的包里面有一个例子配置文件,我们在此基础上做修改。我们第一次先只使用分片1~4,后面的4个等下再使用。
首先我们修改schema.xml,我的内容如下
<?xml version="1.0" encoding="UTF-8"?>
<!-- Copyright 1999-2012 Alibaba Group. 。。。。-->
<!DOCTYPE cobar:schema SYSTEM "schema.dtd">
<cobar:schema xmlns:cobar="http://cobar.alibaba.com/">
<!-- schema定义 意思是对外显示的数据库名是lyw,dataNode="dnG"表示默认的数据节点是dnG -->
<schema dataNode="dnG">
<table dataNode="dn0,dn1,dn2,dn3" rule="ruleLong" />
</schema>
<!-- 数据节点定义,数据节点由数据源和其他一些参数组织而成。ds[0]这样的下标是dataSource中数据数组的序号 -->
<dataNode>
<property>
<dataSourceRef>ds[0]</dataSourceRef>
</property>
</dataNode>
<dataNode>
<property>
<dataSourceRef>ds[1]</dataSourceRef>
</property>
</dataNode>
<dataNode>
<property>
<dataSourceRef>ds[2]</dataSourceRef>
</property>
</dataNode>
<dataNode>
<property>
<dataSourceRef>ds[3]</dataSourceRef>
</property>
</dataNode>
<!-- 不分片的数据源,跟schema第一个dataNode对应 -->
<dataNode>
<property>
<dataSourceRef>ds[8]</dataSourceRef>
</property>
</dataNode>
<!-- 数据源定义,数据源是一个具体的后端数据连接的表示。 -->
<dataSource type="mysql">
<property>
<location>192.168.1.8:14011/lyw</location>
<location>192.168.1.8:14021/lyw</location>
<location>192.168.1.8:14031/lyw</location>
<location>192.168.1.8:14041/lyw</location>
<location>192.168.1.8:14051/lyw</location>
<location>192.168.1.8:14061/lyw</location>
<location>192.168.1.8:14071/lyw</location>
<location>192.168.1.8:14081/lyw</location>
<location>192.168.1.8:14091/lyw</location>
</property>
<property>lyw</property>
<property>123456</property>
<property>STRICT_TRANS_TABLES</property>
</dataSource>
</cobar:schema>
配置好schema.xml后,我们可以看到里面有个字段rule="ruleLong",这个ruleLong的具体内容是配置在rule.xml文件中,我们这里的配置如下
<?xml version="1.0" encoding="UTF-8"?>
<!-- Copyright 1999-2012 Alibaba Group. 。。。。-->
<!DOCTYPE cobar:rule SYSTEM "rule.dtd">
<cobar:rule xmlns:cobar="http://cobar.alibaba.com/">
<!-- 路由规则定义,定义什么表,什么字段,采用什么路由算法 -->
<!-- 所有路由规则tableRule都必须在所有函数function前面 -->
<tableRule>
<rule>
<columns>id</columns>
<algorithm><![CDATA[ funcLong(${id}) ]]></algorithm>
</rule>
</tableRule>
<!-- 路由函数定义,所有函数定义都需要在规则下面 -->
<!--- partitionCount * partitionLength必须等于1024 -->
<function
>
<property>4</property>
<property>256</property>
</function>
</cobar:rule>