mycat 中的dataHost和dataNode 以及如何按月分片


先說一下datahost這是用來配置是的數據庫服務信息的,一個datahost中可能有多個服務器,這些服務器可能會分擔讀寫任務,如果這樣,那么可能需要做服務器的主從設計。

datanode用來做數據分片的,mycat會根據分片規則將數據寫入datanode對應的數據庫中,不同的datanode中可以使用相同的datahost。

用mycat一直是用編號作為分片依據,最近一個項目中數據庫結構不適合以自增編號做分片依據,並且要求加入新數據庫服務器之后不能中斷服務,經過對現有數據分析,所有表都有一個添加時間字段,那么我們決定用這個字段來按月分片存儲數據。這里要先說一下,按月分片的話並不會將數據分布到12個datanode中,而是每年的每個月對應一個datanode,也就是2018年1-12月對應12個datanode,2019年1-12月又對應12個datanode,也就是每一年就需要用到12個datanode。當然你可以將同一個datahost放到不同的datanode中。初期可以根據服務器數量添加node,到node用完后可以添加node節點。文件結構如下:

 

 

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

    <schema name="park" checkSQLschema="false" sqlMaxLimit="100">
        <!-- auto sharding by id (long) -->
        <table name="cars" dataNode="dn$1,dn2,dn3,dn4,dn5,dn6,dn7,dn8,dn9" rule="sharding-by-month" />

        <!-- global table is auto cloned to all defined data nodes ,so can join
            with any table whose sharding node is in the same data node -->
    
    </schema>
    <!-- <dataNode name="dn1$0-743" dataHost="localhost1" database="db$0-743"
        /> -->
    <dataNode name="dn1" dataHost="212-3306" database="park" />
    <dataNode name="dn2" dataHost="212-3307" database="park" />
    <dataNode name="dn3" dataHost="212-3308" database="park" />
    <dataNode name="dn4" dataHost="212-3309" database="park" />
    <dataNode name="dn5" dataHost="212-3306" database="park" />
    <dataNode name="dn6" dataHost="212-3307" database="park" />
    <dataNode name="dn7" dataHost="212-3308" database="park" />
    <dataNode name="dn8" dataHost="212-3309" database="park" />
    <dataNode name="dn9" dataHost="212-3309" database="park" />
    <!--<dataNode name="dn4" dataHost="sequoiadb1" database="SAMPLE" />
     <dataNode name="jdbc_dn1" dataHost="jdbchost" database="db1" />
    <dataNode    name="jdbc_dn2" dataHost="jdbchost" database="db2" />
    <dataNode name="jdbc_dn3"     dataHost="jdbchost" database="db3" /> -->
    
    <dataHost name="212-3306" maxCon="100" 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.0.212:3306" user="root"
                   password="123456">
             
        </writeHost>
    </dataHost>
    
    
    <dataHost name="212-3307" maxCon="100" 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="hostM2" url="192.168.0.212:3307" user="root"
                   password="123456">
             
        </writeHost>
    </dataHost>
    <dataHost name="212-3308" maxCon="100" 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="hostM3" url="192.168.0.212:3308" user="root"
                   password="123456">
             
        </writeHost>
    </dataHost>
    <dataHost name="212-3309" maxCon="100" 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="hostM4" url="192.168.0.212:3309" user="root"
                   password="123456">
             
        </writeHost>
    </dataHost>
    
</mycat:schema>

 

修改完文件后可以使用命令載入配置:

mysql -uroot -p123456 -P 9066 -h 127.0.0.1  進入管理后台

輸入:reload @@config_all;載入新配置文件即可。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM