zoukankan      html  css  js  c++  java
  • 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>
    
    请关于一下啦^_^

    微信公众号

  • 相关阅读:
    JDBC 查询的三大参数 setFetchSize prepareStatement(String sql, int resultSetType, int resultSetConcur)
    有空必看
    SpringMVC 利用AbstractRoutingDataSource实现动态数据源切换
    FusionCharts JavaScript API Column 3D Chart
    FusionCharts JavaScript API
    FusionCharts JavaScript API
    Extjs 继承Ext.Component自定义组件
    eclipse 彻底修改复制后的项目名称
    spring 转换器和格式化
    Eclipse快速生成一个JavaBean类的方法
  • 原文地址:https://www.cnblogs.com/haloujava/p/13501342.html
Copyright © 2011-2022 走看看