MySQL分片高可用集群之Cobar部署使用

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>

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/c28903e8abfd246b63014d434c8319eb.html