设为首页 加入收藏

TOP

MySQL分片高可用集群之Cobar部署使用(二)
2015-11-12 21:29:25 来源: 作者: 【 】 浏览:16
Tags:MySQL 分片 可用 集群 Cobar 部署 使用
plain命令查看cobar的拆分情况。这个命令只是语法分析,不会到mysql中执行。


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


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


| DATA_NODE | SQL? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? |


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


| dn1? ? ? | SELECT * FROM h1 WHERE id IN (256)? ? ? |


| dn3? ? ? | SELECT * FROM h1 WHERE id IN (900, 901) |


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


2 rows in set (0.00 sec)


Cobar是不支持事务的,begin命令就不可以运行,很多操作尽量使用语句内原子操作。比如
update h1 set a=a+1 where id = 2;
而不是先读出数据,再修改。拆成两条就需要事务支持才安全了。


Cobar支持多库同时操作,但只是在多个库分别执行后,一起返回数据而已,我们试下下面的几个语句


MySQL [lyw]> select * from h1 limit 1;


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


| id? | v? ? |


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


| 600 | dd? |


| 256 | cc? |


|? 1 | aa? |


| 900 | ee? |


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


我们是想要得到一条数据,而实际上是得到4条,并且是每个库中一条,因此这样的结果并不符合我们的初衷,所以对于分页这样的操作用cobar并不合适。大家还可以去试下sort,? group,join等操作,以及他们的组合操作,都是如此。
那Cobar合适的是什么呢?cobar最合适的就是单行的操作,另外还有in这样的多行操作。或者其他只需要一个库就能搞定的操作。这也是需要我们在设计表结构的时候多下工夫才行。


第五步:多种分片方式配置


前面讲了一个按照数字进行hash分片的例子。cobar自身提供了4种分片方法,分别是PartitionByLong,PartitionByString,PartitionByFileMap,Dimension2PartitionFunction。每种方法需要配置的参数都不同


PartitionByString 按字符串hash分片
我们需要修改rule.xml文件,如下部分,记得所有的tableRule 在所有的function前面


?


? ?


? ? ? id


? ? ?


? ?


?


?


?

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


? ? 4


? ? 256


? ? :12


?


其中hashSlice的含义是字符串的哪几个字符进行hash运算,例子中:12表示前面的12个字符进行运算,另外还有负数表示法,表示从后面开始数。
在schema.xml增加一个表格


?


1
?




配置好后,我们可以用集群管理的reload方法热更新配置文件。(注意端口是9066)


bin/mysql -ulyw -p123456 -h127.0.0.1 -P 9066


MySQL [(none)]> reload @@config;


Query OK, 1 row affected (0.02 sec)


Reload config success


PartitionByFileMap 按文件内容分片
我们需要修改rule.xml文件,如下部分,


?


? ?


? ? ? district


? ? ?


? ?


?


?

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


? ? /home/lyw/file_map.txt


? ? 0


?


rule.xml中fileMapPath字段我们指定了一个配置文件/home/lyw/file_map.txt,这个文件内容的格式是k=v结构,k是分片的字符串,v是节点序号(不是hash值)。内容如下,您可自己多写一些。


a=0


b=1


c=2


d=3


。。。。。。


defaultNode 字段表示如果key值不在这个配置文件中,那么将数据存储在这个节点中。
然后我们还要在schema.xml增加一个表格?



只有字符串完整地属于配置文件中,才算匹配到,不是前缀,如例子中只有a,b,c,d可以找到对应的节点,其他任何值都将放入默认节点。因此这种方式一般不是用于id等主键字段,而是其他种类有限的字段,如国家、省份等。


Dimension2PartitionFunction 二维分片
二维分片有两个维度,都需要配置,因此配置内容较多
rule.xml:



? ?


? ? ? id, id2


? ? ?


? ?


? ?


? ? ? id


? ? ?


? ?


? ?


? ? ? id2


? ? ?


? ?


?


?

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


? ? string


? ? 2


? ? 512


? ? :12


? ? long


? ? 2


? ? 512


?


从rule.xml文件中我们看到tableRule配置了三个rule,其中第一个规则是有两个参数的,后两个规则只有一个参数,这3个rule不是必须全配置,但是要实现只匹配一个维度的话,就需要配置,否则当查询语句中只有一个维度的key时会进行所有库的执行,效率不高。
函数需要指定两个维度,字符串和数字都可以,其他类型目前不支持。
同样schema.xml增加一个表格?



如果需要二维分片,集群规模一般要相当大了,比如8*8=64,否则采用二维分片的意义不大。


第六步:Cobar自身集群配置


前面配置的cobar只是在一台机器上运行,而运行时cobar需要的资源是比较多的,一台cobar可以拖3台左右mysql服务器,而实际上只要用到cobar,mysql数量都在8台以上,所以需要多个cobar支撑,集群相关的内容在server.xml中配置,



? ?


? ? ? 192.168.1.8


? ? ? 1


? ?


? ?


? ? ? 192.168.1.9


? ? ? 1


? ?


? ?


? ? ? 192.168.1.10


? ? ? 1


? ?


?



每增加一台机器就多配置一个node,然后将这个配置文件复制到每台cobar电脑上,并启动。这时我们在任意一台电脑上用下面的命令查看活着的集群(宕机的节点不会显示)


MySQL [lyw]> show cobar_cluster;


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


| HOST? ? ? ? | WEIGHT |


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


| 192.168.1.8? |? ? ? 1 |


| 192.168.1.9? |? ? ? 1 |


| 192.168.1.10 |? ? ? 1 |


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


3 rows in set (0.00 sec)


此处虽然有host和weight两个值,但是cobar并没有做负载均衡相关的具体事情,只是告诉客户端,cobar集群的运行情况,让客户端自己制定负载均衡策略。


第七步:Cobar自身管理


前面讲的是数据操作,用的是8066端口,cobar提供集群管理功能默认用的是9066端口


bin/mysql -ulyw -p123456 -h127.0.0.1 -P9066


MySQL [(none

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

评论

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