Mycat 配置概述

核心配置文件

1.server.xml

作用:

  • 配置mycat系统性参数 ( 标签)
  • 配置用户以及访问权限 ( 标签)
  • 配置sql防火墙以及sql拦截功能

常用完整属性配,常用的mysql系统的完整配置

    <system> 
        <property name="serverPort">8066</property>
         <!-- mycat 管理端口 -->
        <property name="managerPort">9066</property> 
        <!-- 0为需要密码登陆、1为不需要密码登陆 ,默认为0,设置为1则需要指定默认账户-->
        <property name="nonePasswordLogin">0</property>
        <property name="bindIp">0.0.0.0</property> 
        <!--写队列大小-->
        <property name="frontWriteQueueSize">4096</property>
        <property name="charset">utf8</property>
    
        <!--事务隔离级别  3-可重复读-->
        <property name="txIsolation">3</property>
    
        <!--mycat线程数量-->
        <property name="processors">8</property>
        <!--线程空闲多长时间断开 毫秒-->
        <property name="idleTimeout">1800000</property>
        <!--秒-->
        <property name="sqlExecuteTimeout">300</property>
        <!-- 1为开启实时统计、0为关闭 -->
        <property name="useSqlStat">0</property>
        <!-- 1为开启全加班一致性检测、0为关闭 -->
        <property name="useGlobleTableCheck">0</property>
        <property name="sequnceHandlerType">2</property>
        <!--默认参数-->
        <property name="defaultMaxLimit">100</property>
        <!--mysql中包的大小-->
        <property name="maxPacketSize">104857600</property>
    </system>

    <user name="root" defaultAccount="true">
                    <property name="password">123456</property>
                    <property name="schemas">TESTDB,TESTDB2,TESTDB3</property>
    
                    <!-- 表级 DML 权限设置 -->
                    <!--            
                    <privileges check="false">
                            <schema name="TESTDB" dml="0110" >
                                    <table name="tb01" dml="0000"></table>
                                    <table name="tb02" dml="1111"></table>
                            </schema>
                    </privileges>           
                     -->
    </user>

    <user name="user">
        <property name="password">user</property>
        <property name="password">user</property>
        <!--是否对明文进行加密-->
 		<property name="usingDecrypt">0</property>
        <property name="schemas">TESTDB,TESTDB1,TESTDB2</property>
        <!--是否是默认账号-->
        <property name="readOnly">false</property> 
            <privileges check="false">
            <schema name="TESTDB" dml="0110" >
                <table name="tb01" dml="0000"></table>
                <table name="tb02" dml="1111"></table>
            </schema>
        </privileges>        
</user>
  • dml 总的数字代表: 0110 -> insert,update,select,detele 0代表不具有此权限,1代表有次权限
  • 用户密码加密配置
    java -cp Mycat-server-1.6.5-release.jar 0:root:123456 (0:前端加密标志 root:用户名 123456:密码)
    配置:对应的user标签 1

2.rule.xml

作用
配置分片规则

分片表的配置规则

<tableRule name="hash-mod-2_id">
  <rule>
    <columns>id</columns>
    <algorithm>hash–mode–2</algorithm>
  <rule>
<tableRule>
  • columns 分片列
  • algorithm 分片算法

配置表的分片算法

    <function name="hash-mode-2" class="io.mycat.route.function.PartitionByHashMod">
        <property name="count">2</property>
    </function>
常用分片算法
  • 简单取模分片算法 PartitionByMod

    场景:分片列是整型,使用这种取模算法



    例子
<tableRule name="partition-mod-2-stuent_id">
    <rule>
        <columns>student_id</columns>
        <algorithm>partition-mod-2</algorithm>
    </rule>
</tableRule>
<function name="partition-mod-2" class="io.mycat.route.function.PartitionByMod">
    <property name="count">2</property>
</function>
  • 哈希取模 PartitionByHashMod
    场景:分片列适合所有类型

    注意:如果hash一致的过多,可能会使某个分片数据库数据过多。

    例子
<tableRule name="partition-hash-mod-2-stuent_id">
    <rule>
        <columns>student_id</columns>
        <algorithm>partition-hash-mod-2</algorithm>
    </rule>
</tableRule>
<function name="partition-hash-mod-2" class="io.mycat.route.function.PartitionByHashMod">
    <property name="count">2</property>
</function>
  • 分片枚举算法 PartitionByFileMap
    场景: 根据有限个枚举类型进行分片
    <tableRule name="partition-enums-file-mod-2-school_id">
        <rule>
            <columns>school_id</columns>
            <algorithm>hash-int</algorithm>
        </rule>
    </tableRule>
    <function name="partition-enums-file-mod-2" class="io.mycat.route.functioin.PartitionByFileMap">
        <property name="mapFile">partition-hash-int.txt</property>
        <property name="type">0</property>
        <property name="defaultNode">0</property>
    </function>
  1. property name="type" 定义枚举值类型,0代表整数类型,非0表示字符串
  2. name="defaultNode" 是否使用默认节点,<0 : 不起用默认节点, >=0 表示启用默认节点
  3. 相应的配置文件,需要放在$MYCAT_HOME/conf 目录下
  4. 枚举值可以指定数据的存储位置
  • 字符串范围取模分片算法

    截取某个字符串的一部分,作为分片的依据

    算法:截取字符串的某一段,然后assic码相加,然后和取模基数进行取模计算。
    <function name="sharding-by-prefix-patter" class="io.mycat.route.function.PartitionByPrefixPattern">
        <property name="patternValue">128</property> <!--配置的取模基数-->
        <property name="prefixLength">2</property>  <!--取前2两位-->
        <property name="mapFile">prefix-partition-pattern.txt</property>
    </function>
  1. prefix-partition-pattern.txt 记录了 对应的取模范围和后端节点的对应关系
  2. 可以根据指定字符串的前N个字符确定存储位置

3.schema.xml

用途
配置逻辑库和逻辑表
配置逻辑表所存储的数据节点
配置数据节点所对应的数据库服务器信息

  • 逻辑库的定义
    <schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="1000"></schema>
  1. sqlMaxLimit 当前逻辑库默认返回的最大行数 , -1 时表示不限制
  2. checkSQLschema 是否检查sql中含有库名称 ,true :检查并删除库名 , false :不检查
  • 逻辑表定义
    <table name="travelrecord" primeryKey="id"  dataNode="dn1,dn2,dn3" rule="auto-sharding-long" />
  1. name 逻辑表名 (逻辑表必须对应着物理表)
  2. primeryKey 主键
  3. dataNode : 存储的实际的物理节点
  4. rule 引用分片规则
  • dataNode 标签
   	<dataNode name="dn1" dataHost="localhost1" database="db1" />
  1. name : 定义dataNode 的值
  2. dataHost mysql 集群的地址
  3. database 物理数据库的名称
  • dataHost 标签
  	<dataHost name="localhost1" maxCon="1000" minCon="10" balance="0"
			  writeType="0" dbType="mysql" dbDriver="native" switchType="1">
		<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>

dataHost属性

  1. name 组服务器名称,dataNode 标签引用的依据,mycat中唯一
  2. maxCon , minCon 定义 最大连接数 ,最小连接数
  3. banlance 工作方式,取值
    • balance="0", 不开启读写分离机制,所有读操作都发送到当前可用的 writeHost 上。
    • balance="1",全部的 readHost 与 stand by writeHost 参与 select 语句的负载均衡,简单的说,当双
      主双从模式(M1->S1,M2->S2,并且 M1 与 M2 互为主备),正常情况下,M2,S1,S2 都参与 select 语句的负载
      均衡。
    • balance="2",所有读操作都随机的在 writeHost、readhost 上分发。
    • balance="3",所有读请求随机的分发到 wiriterHost 对应的 readhost 执行,writerHost 不负担读压力,
      注意 balance=3 只在 1.4 及其以后版本有,1.3 没有。
  4. writeType 负载均衡类型
    • writeType="0", 所有写操作发送到配置的第一个 writeHost,第一个挂了切到还生存的第二个 writeHost,
      重新启动后已切换后的为准,切换记录在配置文件中:dnindex.properties .
    • writeType="1",所有写操作都随机的发送到配置的 writeHost,1.5 以后废弃不推荐。
  5. switchType 是否自动切换写数据库
    • -1 表示不自动切换。
    • 1 默认值,自动切换。
    • 2 基于 MySQL 主从同步的状态决定是否切换。
  6. heartbeat 标签,检测心跳
  7. writeHost 标签,指定写实例
  8. readHost 标签,指定读实例
  • 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">
		<!-- auto sharding by id (long) -->
		<table name="travelrecord" dataNode="dn1,dn2,dn3" rule="auto-sharding-long" />
	</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">
		<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>

posted on 2020-08-14 11:47  指尖,写不尽  阅读(384)  评论(0编辑  收藏  举报

导航