设为首页 加入收藏

TOP

MySQL分片高可用集群之Cobar部署使用(一)
2015-11-12 21:29:25 来源: 作者: 【 】 浏览:14
Tags: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
淘宝现在的开源网站也有:http://code.taobao.org/p/cloud-cobar/src/
两个地方下载的目录结构稍有不同,但目前内容基本一样,且都可以运行,您可以自行选择。本例子所用版本为1.2.7。


第二步:安装多个MySQL数据库


第三步:部署Cobar


Cobar只有配置文件,没有其他的元数据,因此关键就在于配置文件的修改,下载的包里面有一个例子配置文件,我们在此基础上做修改。我们第一次先只使用分片1~4,后面的4个等下再使用。
首先我们修改schema.xml,我的内容如下






?


?


? ?


?


?


?


? ?


? ? ? ds[0]


? ?


?


?


? ?


? ? ? ds[1]


? ?


?


?


? ?


? ? ? ds[2]


? ?


?


?


? ?


? ? ? ds[3]


? ?


?


?


?


? ?


? ? ? ds[8]


? ?


?


?


?


? ?


? ? ? 192.168.1.8:14011/lyw


? ? ? 192.168.1.8:14021/lyw


? ? ? 192.168.1.8:14031/lyw


? ? ? 192.168.1.8:14041/lyw


? ? ? 192.168.1.8:14051/lyw


? ? ? 192.168.1.8:14061/lyw


? ? ? 192.168.1.8:14071/lyw


? ? ? 192.168.1.8:14081/lyw


? ? ? 192.168.1.8:14091/lyw


? ?


? ? lyw


? ? 123456


? ? STRICT_TRANS_TABLES


?



配置好schema.xml后,我们可以看到里面有个字段rule="ruleLong",这个ruleLong的具体内容是配置在rule.xml文件中,我们这里的配置如下






?


?


?


? ?


? ? ? id


? ? ?


? ?


?


? ?


?


?

? ? class="com.alibaba.cobar.route.function.PartitionByLong">


? ? 4


? ? 256


? ?



可以看到ruleLong规则中用到funcLong函数,funcLong函数在下面定义,注意所有函数定义都需要在规则下面,partitionCount * partitionLength必须等于1024,否则无法启动。
然后是server.xml,这个文件修改下用户名密码就可以了,其他用默认参数。






? ?


?


? ? 123456


? ? lyw


?



另外还有个配置文件log4j.xml,无需修改。
我们的配置文件都已准备好,然后就启动吧


$ bin/startup.sh


$ jps


15894 CobarStartup


15946 Jps


$ netstat -nlp|grep java


tcp6? ? ? 0? ? ? 0 :::8066? ? ? ? ? ? ? ? :::*? ? ? ? ? ? ? ? ? ? LISTEN? ? ? 15894/java? ? ?


tcp6? ? ? 0? ? ? 0 :::9066? ? ? ? ? ? ? ? :::*? ? ? ? ? ? ? ? ? ? LISTEN? ? ? 15894/java



java7下可以直接启动,如果时java8需要注释掉startup.sh中的一行。? ? ?


# JAVA_OPTS="$JAVA_OPTS -XX:+UseCMSCompactAtFullCollection"


请检查下进程是否启动,如果配置有误是无法启动的。启动后,我们可以看到已经开启了两个端口,8066和9066,其中8066是用于数据读写等操作的,9066是用于cobar自身管理的。我们迫不及待的要去试下了。


第四步:使用Cobar


lyw@lywd:~/db/mariadb-10.1$ bin/mysql -ulyw -p123456 -h127.0.0.1 -P8066


MySQL [(none)]> show databases;


+----------+


| DATABASE |


+----------+


| lyw? ? ? |


+----------+


1 row in set (0.04 sec)


MySQL [(none)]> use lyw;


Database changed


MySQL [lyw]> show tables;


Empty set (0.00 sec)


MySQL [lyw]> create table h1 (id int primary key, v varchar(32));


Query OK, 0 rows affected (0.01 sec)


MySQL [lyw]> insert into h1 (id, v) values(1, 'aa'), (2, '2'), (256, 'cc'), (600,'dd'),(900, 'ee'), (1000, 'ff');


Query OK, 6 rows affected (0.02 sec)


Records: 2? Duplicates: 0? Warnings: 0


MySQL [lyw]> select * from h1;


+------+------+


| id? | v? ? |


+------+------+


|? 256 | cc? |


|? 900 | ee? |


| 1000 | ff? |


|? 600 | dd? |


|? ? 1 | aa? |


|? ? 2 | 2? ? |


+------+------+


6 rows in set (0.00 sec)


MySQL [lyw]> select * from h1 where id = 256;


+-----+------+


| id? | v? ? |


+-----+------+


| 256 | cc? |


+-----+------+


1 row in set (0.00 sec)


MySQL [lyw]> select * from h1 where id in (256, 900, 901);


+-----+------+


| id? | v? ? |


+-----+------+


| 256 | cc? |


| 900 | ee? |


+-----+------+


2 rows in set (0.00 sec)


最后返回的结果看起来有点乱,并且每次执行这样的select语句,顺序都会不同,这是因为我们插入的这6条数据已经根据ruleLong的规则分散在了4个数据库中,返回的时候cobar只是简单的合并,并没有排序。我们这时候可以到4个库中分别查询,每个库都只包含其中的一部分数据。
注意:前面的insert语句中指定了列名(id, v),这是必须的,否则会将数据插入到所有数据库中去,即插入1条等于插入4条。
select * from h1 where id = 256;? 这行查询语句指定了id = 256,因此cobar会计算256这个值是在哪个数据库(第二个)因此这条语句只会在第二个数据库中查找
select * from h1 where id in (256, 900, 901);? 这行查询语句指定了两个id,cobar会计算这些id都属于哪个库,然后去对应的库查询,实际上会变成两个语句,
在第二个库执行select * from h1 where id in (256),
在第四个库执行select * from h1 where id in (900, 901),
然后合并数据返回。
我们可以用ex

首页 上一页 1 2 3 4 下一页 尾页 1/4/4
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇ORA-00600 错误解决一例 下一篇解决MySQL Slave同步问题

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: