MyCat-08之centos7上使用mycat部署水平分表---數字範圍分片

接上一篇帖子《MyCat-07之centos7上使用mycat部署水平分表---分片枚舉

一、目標

使用mycat部署分片枚舉。
什麼叫數字範圍分片?

按照表中某個指定的字段值(數字int類型)的範圍去分片,比如值在1到3000的放到節點1服務器,值在3001到5000的放到節點2服務器上。沒有在規則範圍內的放在指定的默認的節點服務器上。

二、實施mycat數字範圍分片

1.修改/usr/local/mycat/conf/shcema.xml。

在<schema>內追加一行<table name="salary" dataNode="dn1,dn2" rule="auto_sharding_long"></table>,意思是,有一個表叫salary,被分片到了dn1和dn2兩臺節點服務器上,分片規則叫auto_sharding_long(需在rule.xml中定義)。完整代碼如下

<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">

        <schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1">
           <table name="teacher" dataNode="dn2"></table>
           <table name="student" dataNode="dn1,dn2" rule="mod_rule">
               <childTable name="student_record" primaryKey="xid" joinKey="student_id" parentKey="xid" />
           </table>
           <table name="xuser" dataNode="dn1,dn2" type="global"></table>
           <table name="salary" dataNode="dn1,dn2" rule="auto_sharding_long"></table>
        </schema>
        <dataNode name="dn1" dataHost="host1" database="xkahn" />
        <dataNode name="dn2" dataHost="host2" database="xkahn" />
        <dataHost name="host1" maxCon="1000" minCon="10" balance="0"
                          writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
                <heartbeat>select user()</heartbeat>
                <writeHost host="hostM1" url="10.100.100.31:3306" user="root"
                                   password="123123">
                </writeHost>
        </dataHost>
        <dataHost name="host2" maxCon="1000" minCon="10" balance="0"
                          writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
                <heartbeat>select user()</heartbeat>
                <writeHost host="hostM1" url="10.100.100.32:3306" user="root"
                                   password="123123">
                </writeHost>
        </dataHost>
</mycat:schema>

2.在/usr/local/mycat/conf/rule.xml中增加分片算法

        <tableRule name="auto_sharding_long">
                <rule>
                        <columns>money</columns>
                        <algorithm>rang-long</algorithm>
                </rule>
        </tableRule>

3.修改/usr/local/mycat/conf/rule.xml中的rang-long算法


        <function name="rang-long"
                          class="io.mycat.route.function.AutoPartitionByLong">
                <property name="mapFile">autopartition-long.txt</property>
        </function>

改爲:
        <function name="rang-long"
                          class="io.mycat.route.function.AutoPartitionByLong">
                <property name="mapFile">autopartition-long.txt</property>
                <property name="defaultNode">0</property>
        </function>

註釋:添加一個默認節點,即如果某條數據沒有被本算法包括,那麼這條數據就存放到默認的mycat節點服務器0(第一個節點服務器)上,1等於第二臺節點服務器。

4.修改算法文件/usr/local/mycat/conf/autopartition-long.txt
將原有的全部用"#"註釋掉,或者都刪除掉。然後添加下面兩行

0-3000=0
3001-5000=1

註釋:這個意思是工資數在0到3000塊錢的教師工資放到第一個節點服務器,工資範圍在3001到5000塊的放到第二臺節點服務器

5.開個mycat31的新終端啓動mycat

cd /usr/local/mycat/bin
./mycat console

6.在開個mycat31的新終端進入mycat的數據管理平臺
創建本次的數字範圍分片表salary,並插入測試數據

mysql -umycat -p123456 -h 192.168.73.100 -P 8066
use TESTDB;
create table salary(xid int(10) not null unique primary key,name varchar(20) not null,teacher_id int(10),money int(10),note varchar(500));
insert into salary(xid,name,teacher_id,money,note) values (1,"kahn",3721,3690,"kahn保安崗位工資3690元");
insert into salary(xid,name,teacher_id,money,note) values (2,"serena",129,3000,"serena的工資是3000元");
insert into salary(xid,name,teacher_id,money,note) values (3,"songsuer",138,2000,"宋姝兒的工資是2000元");
insert into salary(xid,name,teacher_id,money,note) values (4,"柳多妍",139,9999,"柳多妍的工資是9999津巴布韋幣");
insert into salary(xid,name,teacher_id,money,note) values (5,"xia",3312,6613,"xia的工資是6613元");

註釋,上面的應該只有id爲1名字叫kahn的數據放在了第二個節點服務器mycat32上,其餘的全部被放到了第一個節點服務器mycat31上

7.在mycat上、還有兩臺物理服務器查數據是否存在(觀察是否按照規則分片了)
select * from salary;
a.3690大於3000所以自動被分到第二臺mysql服務器
b.3000小於3001所以被分到第一臺mysql服務器
c.2000小於3001所以被分到第一臺mysql服務器
d.9999大於5000了,沒有被滿足的條件了,所以就被分到了默認服務器<第一臺mysql服務器>
e.6613大於5000了,沒有被滿足的條件了,所以就被分到了默認服務器<第一臺mysql服務器>

------------------END--------------2020年3月26日15:33:50-------------------------

老鐵雙擊666

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章