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;载入新配置文件即可。

 

posted @ 2019-01-04 14:33  涛涛的笔记  阅读(2465)  评论(1编辑  收藏  举报