• 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>
    
    请关于一下啦^_^

    微信公众号

  • 相关阅读:
    NOIP模拟题 管道
    NOIP模拟题 序列
    NOIP模拟题 栅栏
    NOIP模拟题 斐波那契数列
    CodeForces 797F Mice and Holes
    CodeForces 589H Tourist Guide
    CERC2016 爵士之旅 Jazz Journey
    BZOJ3832 Rally
    BZOJ1061 NOI2008 志愿者招募
    js数组的操作
  • 原文地址:https://www.cnblogs.com/haloujava/p/13501342.html
Copyright © 2020-2023  润新知