只有字符串完整地属于配置文件中,才算匹配到,不是前缀,如例子中只有a,b,c,d可以找到对应的节点,其他任何值都将放入默认节点。因此这种方式一般不是用于id等主键字段,而是其他种类有限的字段,如国家、省份等。
Dimension2PartitionFunction 二维分片
二维分片有两个维度,都需要配置,因此配置内容较多
rule.xml:
<tableRule>
<rule>
<columns>id, id2</columns>
<algorithm><![CDATA[ func2D(${id}, ${id2}) ]]></algorithm>
</rule>
<rule>
<columns>id</columns>
<algorithm><![CDATA[ func2D(${id}, null) ]]></algorithm>
</rule>
<rule>
<columns>id2</columns>
<algorithm><![CDATA[ func2D(null, ${id2}) ]]></algorithm>
</rule>
</tableRule>
<function
>
<property>string</property>
<property>2</property>
<property>512</property>
<property>:12</property>
<property>long</property>
<property>2</property>
<property>512</property>
</function>
从rule.xml文件中我们看到tableRule配置了三个rule,其中第一个规则是有两个参数的,后两个规则只有一个参数,这3个rule不是必须全配置,但是要实现只匹配一个维度的话,就需要配置,否则当查询语句中只有一个维度的key时会进行所有库的执行,效率不高。
函数需要指定两个维度,字符串和数字都可以,其他类型目前不支持。
同样schema.xml增加一个表格
<table dataNode="dn0,dn1,dn2,dn3" rule="rule2D" />
如果需要二维分片,集群规模一般要相当大了,比如8*8=64,否则采用二维分片的意义不大。
第六步:Cobar自身集群配置
前面配置的cobar只是在一台机器上运行,而运行时cobar需要的资源是比较多的,一台cobar可以拖3台左右mysql服务器,而实际上只要用到cobar,mysql数量都在8台以上,所以需要多个cobar支撑,集群相关的内容在server.xml中配置,
<cluster>
<node>
<property>192.168.1.8</property>
<property>1</property>
</node>
<node>
<property>192.168.1.9</property>
<property>1</property>
</node>
<node>
<property>192.168.1.10</property>
<property>1</property>
</node>
</cluster>
每增加一台机器就多配置一个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)]> show @@help;
reload命令会是一个常用命令,当修改了配置文件,就执行下这个命令让配置生效。
MySQL [(none)]> reload @@config;
Query OK, 1 row affected (0.01 sec)
Reload config success
注意server.xml中的system部分不可以热加载,需要重启生效。
如果加载后发现有误,可以用rollback命令回滚配置,注意只能回滚一次。
假如我们要看下所有服务器的活动情况,我们可以用下面的命令
MySQL [(none)]> show @@heartbeat;
+--------+-------+-------------+-------+---------+-------+----------+---------+--------------+---------------------+-------+
| NAME | TYPE | HOST | PORT | RS_CODE | RETRY | STATUS | TIMEOUT | EXECUTE_TIME | LAST_ACTIVE_TIME | STOP |
+--------+-------+-------------+-------+---------+-------+----------+---------+--------------+---------------------+-------+
| cobar1 | COBAR | 192.168.1.8 | 8066 | 1 | 0 | idle | 10000 | 0,0,0 | 2015-10-22 10:33:28 | false |
| cobar2 | COBAR | 192.168.1.9 | 8066 | -1 | 3 | checking | 10000 | 0,0,0 | 2015-10-22 10:33:27 | false |
| cobar3 | COBAR | 192.168.1.10| 8066 | -1 | 1 | checking | 10000 | 0,0,0 | 2015-10-22 10:33:26 | false |