vlambda博客
学习文章列表

一切都要从MyCat的配置说起

安装目录

我们首先要关注conf里面的配置文件

一切都要从MyCat的配置说起

而配置文件我们需要了解的是

  • server.xml : MyCat服务器参数调整和用户授权的配置文件

  • schema.xml :  逻辑库定义和表以及分片定义的配置文件

  • rule.xml : 分片规则的配置文件,修改该配置文件需要重启MyCat


从server.xml开始了解配置的内容:

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE mycat:server SYSTEM "server.dtd">
<mycat:server xmlns:mycat="http://io.mycat/">
      <system>
        <property name="nonePasswordLogin">0</property> 
        <property name="useHandshakeV10">1</property>
        <property name="useSqlStat">0</property>  
        <property name="useGlobleTableCheck">0</property>  

        <property name="sequnceHandlerType">2</property>
        <property name="sequnceHandlerPattern">(?:(\s*next\s+value\s+for\s*MYCATSEQ_(\w+))(,|\)|\s)*)+</property>
    <property name="subqueryRelationshipCheck">false</property> 


        <property name="processorBufferPoolType">0</property>

        <property name="handleDistributedTransactions">0</property>


        <property name="useOffHeapForMerge">0</property>


        <property name="memoryPageSize">64k</property>


        <property name="spillsFileBufferSize">1k</property>

        <property name="useStreamOutput">0</property>


        <property name="systemReserveMemorySize">384m</property>


        <property name="useZKSwitch">false</property>


        <property name="strictTxIsolation">false</property>

        <property name="useZKSwitch">true</property>

    </system>



    <user name="root" defaultAccount="true">
        <property name="password">123456</property>
        <property name="schemas">TESTDB</property>

    </user>

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

</mycat:server>

system标签,该标签内嵌套的property标签都是系统配置的属性。

我们主要关注user标签,该标签用于定义登陆mycat的时候的用户和权限

<user name="user">
    <property name="password">user</property>

定义了一个用户为user,密码为user

<property name="schemas">TESTDB1,TESTDB2,TESTDB3</property>

schemas定义的则是逻辑库的名称,如果有多个逻辑库可以用逗号隔开

接着了解schema.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">
        <table name="travelrecord" dataNode="dn1,dn2,dn3" rule="auto-sharding-long" />

        <table name="company" primaryKey="ID" type="global" dataNode="dn1,dn2,dn3" />

    </schema>
    <dataNode name="dn1" dataHost="localhost1" database="db1" />
    <dataNode name="dn2" dataHost="localhost1" 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>
        <writeHost host="hostM1" url="localhost:3306" user="root"
                   password="123456">

            <readHost host="hostS2" url="192.168.1.200:3306" user="root" password="xxx" />
        </writeHost>
        <writeHost host="hostS1" url="localhost:3316" user="root"
                   password="123456" />

    </dataHost>

</mycat:schema>
  • schema标签

用于定义逻辑库,name属性定义逻辑库的名字,sqlMaxLimit定义限制返回结果集的行数,如果-1表示关闭limit限制。

  • table标签

定义逻辑表,name定义逻辑表的名字,primaryKey定义逻辑表的主键,dataNode定义了表数据所存储的数据节点,rule定义了逻辑表分片规则,对应的是rule.xml中的

  • dataNode

定义逻辑表存储的物理数据库,name定义数据节点的名称,唯一,dataHost属性定义分派你所在的物理主机,database定义物理数据库名。

  • dataHost

定义后端数据库主机信息,name定义了一组数据库服务器的名称,在配置文件中必须唯一,

maxCon定义mycat连接mysql的最大连接数,balance定义mycat读写分离、负载均衡的工作方式,如果为0则是不开启读写分离机制。

dbType代表使用的数据库类型(比如mysql,mongoDB等)

dbDriver代表所使用的数据库驱动

switchType代表写数据库如何进行高可用的切换,如果为1代表当每一个writeHost不可访问的时候都会切换到第二个writeHost写服务器。

最后我们了解下rule.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mycat:rule SYSTEM "rule.dtd">
<mycat:rule xmlns:mycat="http://io.mycat/">
    <tableRule name="rule1">
        <rule>
            <columns>id</columns>
            <algorithm>func1</algorithm>
        </rule>
    </tableRule>



    <function name="func1" class="io.mycat.route.function.PartitionByLong">
        <property name="partitionCount">8</property>
        <property name="partitionLength">128</property>
    </function>

</mycat:rule>

rule.xml 主要就两个标签

  • tableRule

定义了配置表的分片规则,name分片规则名字,唯一。columns 定义了分片列,必须是表中存在的列,mycat根据这个列计算却低估当前数据要存放在哪个分片。algorithm指定表的分片算法,这里跟function的name属性。

  • function

定义配置表的分片算法,name定义了算法的名称,唯一。class属性是指实现分片算法的java类的全名。count代表分片节点数的总和。





专注分享Java技术,跟我一起学习吧