1. 程式人生 > >Mycat 的分片(水平分片)例項

Mycat 的分片(水平分片)例項

要求:
把一個表分片儲存到三個資料節點上。

節點環境:
mysql節點1環境
作業系統版本 : centos6.4
資料庫版本 : mysql-5.6
mycat版本 :1.4 release
資料庫名 : db1、db3
ip:192.168.25.134

mysql節點2環境
作業系統版本 : centos6.4
資料庫版本 : mysql-5.6
mycat版本 :1.4 release
資料庫名 : db2
ip:192.168.25.166

MyCat安裝到節點1上(需要安裝jdk)

配置schema.xml:
Schema.xml理解:
Schema.xml作為MyCat中重要的配置檔案之一,管理著MyCat的邏輯庫、表、分片規則、DataNode以及DataSource
schema 標籤用於定義MyCat例項中的邏輯庫
Table 標籤定義了MyCat中的邏輯表
dataNode 標籤定義了MyCat中的資料節點,也就是我們通常說所的資料分片。
dataHost標籤在mycat邏輯庫中也是作為最底層的標籤存在,直接定義了具體的資料庫例項、讀寫分離配置和心跳語句。

注意:
若是LINUX版本的MYSQL,則需要設定為Mysql大小寫不敏感,否則可能會發生表找不到的問題。
在MySQL的配置檔案中my.ini [mysqld] 中增加一行 lower_case_table_names = 1

Schema.xml中配置:

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

    <schema name="TESTDB" checkSQLschema
="false" sqlMaxLimit="100">
<!-- auto sharding by id (long) --> <table name="TB_ITEM" dataNode="dn1,dn2,dn3" rule="auto-sharding-long" /> <table name="TB_USER" primaryKey="ID" type="global" dataNode="dn1,dn2" /> </schema> <dataNode name="dn1" dataHost
="localhost1" database="db1" />
<dataNode name="dn2" dataHost="localhost2" database="db2" /> <dataNode name="dn3" dataHost="localhost1" database="db3" /> <dataHost name="localhost1" maxCon="1000" minCon="10" balance="0" writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100"> <heartbeat>select user()</heartbeat> <!-- can have multi write hosts --> <writeHost host="hostM1" url="192.168.25.134:3306" user="root" password="root"> <!-- can have multi read hosts --> </writeHost> </dataHost> <dataHost name="localhost2" maxCon="1000" minCon="10" balance="0" writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100"> <heartbeat>select user()</heartbeat> <!-- can have multi write hosts --> <writeHost host="hostM1" url="192.168.25.166:3306" user="root" password="root"> <!-- can have multi read hosts --> </writeHost> </dataHost> </mycat:schema>

配置server.xml:
server.xml幾乎儲存了所有mycat需要的系統配置資訊。最常用的是在此配置使用者名稱、密碼及許可權。

<user name="test">
    <property name="password">test</property>
    <property name="schemas">TESTDB</property>
    <property name="readOnly">true</property>
</user>

配置rule.xml:
rule.xml裡面定義了我們對錶進行拆分所涉及到的規則定義。我們可以對錶使用不同的分片演算法,或者對錶使用相同的演算法,具體的引數不同。
這個檔案裡面主要有tableRule和function這兩個標籤。在具體使用過程中可以按照需求新增tableRule和function。
此配置檔案可以不用修改,使用預設即可。

分片測試:
由於配置的分片規則為“auto-sharding-long”,所以mycat會根據此規則自動分片。
每個datanode中儲存一定數量的資料。根據id進行分片
經測試id範圍為:
Datanode1:1~5000001
Datanode2:5000001~10000001
Datanodcct:10000001~15000001

當15000001以上的id插入時報錯:
[Err] 1064 - can’t find any valid datanode :TB_ITEM -> ID -> 15000002
此時需要再新增節點。

ok!!!結束!! 希望給各位猿友帶來幫助吧!!! 偷偷告訴你們!!!這是我剛寫的日記!!