我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Mycat 核心配置是怎么样的

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Mycat 核心配置是怎么样的

这篇文章给大家介绍Mycat 核心配置是怎么样的,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。常用配置文件间的关系

Mycat 核心配置是怎么样的

由上图可以看到 Mycat 的核心配置文件均采用xml格式,这几个配置文件的用途如下:

  • server.xml:用于配置系统参数、用户信息、访问权限及SQL防火墙和SQL拦截功能等

  • schema.xml:用于配置逻辑库、逻辑表相关信息

  • rule.xml:如果使用了水平切分,就需要使用该文件配置切分规则

  • log4j2.xml:Mycat日志相关的配置,例如日志输出格式、日志级别等

应用连接Mycat服务时,Mycat首先会通过server.xml中的配置信息进行用户认证。用户通过验证后,所看到的逻辑库、逻辑表都是schema.xml中所配置的。当使用了水平切分时,Mycat会通过rule.xml里配置的规则来定位具体的物理数据库位置,从而完成写入/读取数据。


server.xml 配置详解

1、system 标签

用于配置 Mycat 的系统参数,其格式如下:

<system>
    <!-- ${key}表示配置属性的名称,${value}表示该配置属性的值 -->
    <property name="${key}">${value}</property>
</system>

配置 Mycat 服务端口示例:

<system>
    <property name="serverPort">3306</property>
</system>

常见的系统参数举例:

<system>
    <!-- mycat 服务连接端口 -->
    <property name="serverPort">8066</property>
    <!-- mycat 服务管理端口 -->
    <property name="managerPort">9066</property>
    <!-- mycat 服务监听的ip -->
    <property name="bindIp">0.0.0.0</property>
    <!-- 0为需要密码登陆、1为不需要密码登陆;默认为0,设置为1则需要指定默认账户-->
    <property name="nonePasswordLogin">0</property>
    <!-- 前端连接的写队列大小 -->
    <property name="frontWriteQueueSize">2048</property>
    <!-- 设置字符集编码 -->
    <property name="charset">utf8</property>
    <!-- mycat 的进程数量 -->
    <property name="processors">8</property>
    <!-- 闲置连接超时时间,单位:毫秒 -->
    <property name="idleTimeout">1800000</property>
    <!-- 默认最大返回的数据集大小 -->
    <property name="defaultMaxLimit">100</property>
    <!-- 允许的最大包大小 -->
    <property name="maxPacketSize">104857600</property>
    <!-- 0遇上没有实现的报文(Unknown command:),就会报错、1为忽略该报文,返回ok报文。
在某些mysql客户端存在客户端已经登录的时候还会继续发送登录报文,mycat会报错,该设置可以绕过这个错误-->
    <property name="ignoreUnknownCommand">0</property>
    <property name="useHandshakeV10">1</property>
    <property name="removeGraveAccent">1</property>
    <!-- 1为开启实时统计、0为关闭 -->
    <property name="useSqlStat">0</property>
    <!-- 1为开启全加班一致性检测、0为关闭 -->
    <property name="useGlobleTableCheck">0</property>
    <!-- SQL 执行超时 单位:秒-->
    <property name="sqlExecuteTimeout">300</property>
    <property name="sequnceHandlerType">1</property>
    <!--必须带有MYCATSEQ_或者 mycatseq_进入序列匹配流程 注意MYCATSEQ_有空格的情况-->
    <property name="sequnceHandlerPattern">(?:(\s*next\s+value\s+for\s*MYCATSEQ_(\w+))(,|\)|\s)*)+</property>
    <!-- 子查询中存在关联查询的情况下,检查关联字段中是否有分片字段 .默认 false -->
    <property name="subqueryRelationshipCheck">false</property>
    <property name="sequenceHanlderClass">io.mycat.route.sequence.handler.HttpIncrSequenceHandler</property>
    <!--默认为type 0: DirectByteBufferPool | type 1 ByteBufferArena | type 2 NettyBufferPool -->
    <property name="processorBufferPoolType">0</property>
    <!--分布式事务开关,0为不过滤分布式事务,1为过滤分布式事务(如果分布式事务内只涉及全局表,则不过滤),2为不过滤分布式事务,但是记录分布式事务日志-->
    <property name="handleDistributedTransactions">0</property>
    <!-- off heap for merge/order/group/limit  1开启;0关闭 -->
    <property name="useOffHeapForMerge">0</property>
    <!--是否采用zookeeper协调切换  -->
    <property name="useZKSwitch">false</property>
    <!--如果为 true的话 严格遵守隔离级别,不会在仅仅只有select语句的时候在事务中切换连接-->
    <property name="strictTxIsolation">false</property>
    <!-- Mycat连接数据库时使用的隔离级别
         1 - 读未提交
         2 - 读已提交
         3 - 可重复读
         4 - 串行化
     -->
    <property name="txIsolation">2</property>
    <property name="useZKSwitch">true</property>
    <!--如果为0的话,涉及多个DataNode的catlet任务不会跨线程执行-->
    <property name="parallExecute">0</property>
</system>

2、user 标签

用于配置Mycat的访问用户及权限,其格式如下:

<user name=${username}>
    <property name="${key}">${value}</property>
    ...
</user>

配置示例:

<!-- 用户名 -->
<user name="mall">
    <!-- 密码 -->
    <property name="password">123456</property>
    <!-- 允许该用户访问的逻辑库 -->
    <property name="schemas">mall_db</property>
    <!-- 可配置多个允许访问的逻辑库,使用逗号分隔 -->
    <!-- <property name="schemas">mall_db,db1,db2</property>  -->
    <!-- 是否只读 -->
    <property name="readOnly">false</property>
</user>

除了配置对库的权限可能还不够,有时候我们需要配置用户对某些表的访问权限。如下示例:

<!-- 用户名 -->
<user name="mall">
    <!-- 密码 -->
    <property name="password">123456</property>
    <!-- 允许该用户访问的逻辑库 -->
    <property name="schemas">mall_db,db1,db2</property>

    <!-- 表级 DML 权限配置,check属性表示是否开启该配置 -->
    <privileges check="true">
        <!-- 特别权限应用的逻辑库 -->
        <schema name="mall_db" dml="0110">
            <!-- 
                配置用户对该表的访问权限,dml属性用于指定权限位,
                如果table标签没有配置该属性的话,默认取schema标签的dml属性值,
                剩余没有配置的其他表默认也是取schema标签的dml属性值
            -->
            <table name="user_table" dml="0000"></table>
            <table name="order_table" dml="1111"></table>
        </schema>
    </privileges>
</user>

dml属性配置的数字是权限位,分别对应着insert,update,select,delete四种权限。例如,当dml的值为0110时,表示拥有updateselect权限,不具有insertdelete权限。所以权限位为1时代表拥有对应的操作权限,为0时代表没有该操作权限。

在该示例中,mall用户对:

  • user_table表不具有任何操作权限

  • order_table表拥有所有操作权限

  • 其他表只拥有updateselect权限

加密明文密码

以上配置用户的示例中,密码都是以明文的形式写在配置文件中。但用户的密码是安全敏感的,一般不会直接在配置文件中写明文密码,而是写一个加密过后的密码。否则只要拥有查看server.xml文件的权限,就能轻易获取到各个用户的密码,这是非常不安全的。

因此,Mycat 提供了一个工具用于加密明文密码,该工具在一个jar包内,可使用如下命令对密码进行加密:

[root@txy-server /usr/local/mycat]# java -cp lib/Mycat-server-1.6.7.4-release.jar io.mycat.util.DecryptUtil 0:root:123456

参数说明:

  • 0:代表的是mycat用户登录密码加密(1 则是dataHost加密)

  • root:用户名

  • 123456:明文密码

执行成功后,会得到一个加密后的字符串:

GO0bnFVWrAuFgr1JMuMZkvfDNyTpoiGU7n/Wlsa151CirHQnANVk3NzE3FErx8v6pAcO0ctX3xFecmSr+976QA==

复制该字符串,替换配置文件中的明文密码,如下示例:

<user name="root" defaultAccount="true">
        <!-- 需要声明使用的是加密后的密码 -->
        <property name="usingDecrypt">1</property>
        <property name="password">GO0bnFVWrAuFgr1JMuMZkvfDNyTpoiGU7n/Wlsa151CirHQnANVk3NzE3FErx8v6pAcO0ctX3xFecmSr+976QA==</property>
        ...
</user>

log4j2.xml 配置文件

我们都知道Mycat是使用Java进行开发的,所以其日志框架也是使用Java生态圈内的log4j2。Mycat日志相关的配置都在 log4j2.xml 文件中,本小节将介绍一些常用的配置项。

1、Pattern 标签

用于配置 Mycat 日志输出格式,默认如下:

<PatternLayout>
    <Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %5p [%t] (%l) - %m%n</Pattern>
</PatternLayout>
  • %d{yyyy-MM-dd HH:mm:ss.SSS}:日志的时间格式

  • %5p:输出的日志的级别

  • %t:输出日志的线程名称

  • %l:日志输出语句所在的代码位置

  • %m:输出代码中指定的日志内容

  • %n:输出一个换行符

更多Pattern取值详见官方文档

这里截取了一段 Mycat 的日志内容,可以看到与Pattern是一一对应上的:

2020-01-09 15:22:57.960  INFO [Timer1] (io.mycat.backend.datasource.PhysicalDatasource.getConnection(PhysicalDatasource.java:564)) - no ilde connection in pool 1838161857 ,create new connection for hostM1 of schema db3 totalConnectionCount: 0 increamentCount: 1

2、level 属性

用于配置 Mycat 的日志输出级别,默认为info级别:

<asyncRoot level="info" includeLocation="true">

关于log4j2的内建日志级别详见官方文档


rule.xml 文件详解

当我们需要通过Mycat实现数据分片时就得用到rule.xml配置文件,该文件用于配置:

  • 水平分片的分片规则

  • 分片规则所对应的分片函数

这是一个分片规则的配置示例:

<!-- name属性指定分片规则的名称,必须在 rule.xml 文件中是唯一的 -->
<tableRule name="hash-mod-4_id">
    <rule>
        <!-- 指定使用表中的哪个列进行分片 -->
        <columns>id</columns>
        <!-- 指定表的分片算法,取值为<function>标签的name属性 -->
        <algorithm>hash-mod-4</algorithm>
    </rule>
</tableRule>
  • Tips:分片规则的名称尽量具有实际意义,命名格式可以参考:{分片算法名称}-{分片数量}_{分片列};上面的示例就是采用的这种命名格式

上面示例中所提到的&lt;function&gt;标签是用于配置表的分片算法或者说分片函数,如下示例:

<!-- name属性指定分片算法的名称,同样需要是唯一的;class属性指定该算法的具体实现类 -->
<function name="hash-mod-4"
          class="io.mycat.route.function.PartitionByHashMod">
    <!-- 要分片的数据库节点数量,必须指定,否则没法分片 -->
    <property name="count">4</property>
</function>

每个分片算法的所需参数可能不一样,所以property标签是可以有多个的,其属性也因具体的分片算法而异。如下示例:

<function name="partbyday"
          class="io.mycat.route.function.PartitionByDate">
    <property name="dateFormat">yyyy-MM-dd</property>
    <property name="sNaturalDay">0</property>
    <property name="sBeginDate">2014-01-01</property>
    <property name="sEndDate">2014-01-31</property>
    <property name="sPartionDay">10</property>
</function>

常用的几个分片算法

Mycat 内置了非常多的分片算法,并且我们也可以针对实际情况自行开发属于自己的分片算法。我们来看看常用分片算法都有哪些:

  • PartitionByMod:简单取模,直接通过列值进行取模得出分片位置

  • PartitionByHashMod:哈希取模,先将列值进行hash运算之后再取模得出分片位置

  • PartitionByFileMap:分片枚举,根据枚举值对数据进行分片,例如在异地多活的场景中通过地区id进行数据分片的场景

  • PartitionByPrefixPattern:字符串范围取模,根据长字符串的前面几位进行取模分片

PartitionByMod

简单取模分片算法的工作原理:
Mycat 核心配置是怎么样的

  • 在图中有两个数据库,每个数据库就是一个分片,所以使用分片列的值对2进行取模,就能得出分片位置

配置示例:

<tableRule name="mod-long-2_id">
    <rule>
        <columns>id</columns>
        <algorithm>mod-long</algorithm>
    </rule>
</tableRule>
<function name="mod-long" 
          class="io.mycat.route.function.PartitionByMod">
    <!-- 取模的基数,也就是分片数量 -->
    <property name="count">2</property>
</function>

总结:

  • 简单,数据分布均匀,适用于整数类型的列,不能用于非整型的列

  • 计算方式:分片列 % 分片基数

  • 实现类的全名:io.mycat.route.function.PartitionByMod

PartitionByHashMod

当需要取模的列为非整型时,就可以使用哈希取模分片算法。其工作原理如下图:
Mycat 核心配置是怎么样的

  • 对分片列的值进行hash运算,得出一个整数型的数值,然后对分片数量“count”进行取模,就可以得到分片位置

配置示例:

<tableRule name="hash-mod-2_login_name">
    <rule>
        <columns>login_name</columns>
        <algorithm>hash-mod</algorithm>
    </rule>
</tableRule>
<function name="hash-mod"
          class="io.mycat.route.function.PartitionByHashMod">
    <property name="count">2</property>
</function>

总结:

  • 可以用于多种数据类型的分片列,如字符串、日期等

  • 分片没有简单取模算法均匀,因为存在hash重复的情况。两个相同的数据进行hash运算后的数值是一样的,那么取模后得出来的分片位置也就一样

  • 计算方式:hash(分片列) % 分片基数

  • 实现类的全名:io.mycat.route.function.PartitionByHashMod

PartitionByFileMap

前两种分片算法都是通过算法本身去计算出分片位置,是无法人工控制的。如果需要人工控制分片位置时,就可以使用到分片枚举算法。该算法使得我们可以指定一些枚举值来对分片位置进行控制,其实也就相当于是人工指定了某些数据应该到哪个分片。

例如,某张表中有个存储用户所在区域id的列,我们希望将区域id与数据库所在的区域进行映射,以实现区域id为1的数据被分片到区域1数据库中,区域id为2的数据被分片到区域2数据库中,以此类推。在这种场景下就可以使用分片枚举算法,其工作原理如下图:
Mycat 核心配置是怎么样的

  • 通过mapFile配置一个分片关系映射,其格式为key-value,key为枚举,value为数据节点的索引。图中的枚举就是area_id,一个area_id对应着一个数据节点。没有配置映射关系的area_id则会被分片到DEFAULT_NODE所对应的数据节点。

配置示例:

<tableRule name="hash-int_area_id">
    <rule>
        <columns>area_id</columns>
        <algorithm>hash-int</algorithm>
    </rule>
</tableRule>
<function name="hash-int"
          class="io.mycat.route.function.PartitionByFileMap">
    <!-- mapFile 文件名,位于config目录下 -->
    <property name="mapFile">partition-hash-int.txt</property>
    <!-- 指定mapFile中枚举的数据类型,0为整型;非0则为字符串类型 -->
    <property name="type">0</property>
    <!-- 是否启用默认节点,大于等于0为启用;小于等于0为不启用 -->
    <property name="defaultNode">0</property>
</function>
  • Tips:数据节点的索引是从0开始的,在编辑mapFile时需要注意这一点

总结:

  • 可以根据枚举值指定数据存储的位置

  • 需要在$MYCAT_HOME/conf目录下增加mapFile来配置枚举值同节点的映射关系

  • 计算方式:hash(分片列) % 分片基数

  • 实现类的全名:io.mycat.route.function.PartitionByFileMap

PartitionByPrefixPattern

以上所介绍到的分片算法都是根据列进行分片的,在实际工作中我们可能会遇到这样一个需求:需要通过字符串的前几位或后几位进行分片。例如,通过订单号的前五位进行分片计算,或按用户的姓氏进行分片。在这种场景下,就可以使用字符串范围取模分片算法。

例如,需要对ABCDEFGHI这个字符串的前三位进行分片计算,其计算过程如下图:
Mycat 核心配置是怎么样的

  • 对指定的字符串范围分别进行ascii码计算并求和,然后对配置的求模基数进行取模计算,最后根据mapFile里配置的取值范围与数据节点索引的映射关系得出分片的数据节点。因此,mapFile需要配置所有可能的取值范围,否则找不到对应的数据节点就会报错。

工作原理:
Mycat 核心配置是怎么样的

配置示例:

<tableRule name="sharding-by-prefix-pattern_login_name">
    <rule>
        <columns>login_name</columns>
        <algorithm>sharding-by-prefix-pattern</algorithm>
    </rule>
</tableRule>
<function name="sharding-by-prefix-pattern"
          class="io.mycat.route.function.PartitionByPrefixPattern">
    <!-- mapFile 文件名,位于config目录下 -->
    <property name="mapFile">prefix-partition-pattern.txt</property>
    <!-- 求模基数 -->
    <property name="patternValue">128</property>
    <!-- 字符串范围,这里为前两位 -->
    <property name="prefixLength">2</property>
</function>

总结:

  • 可以根据指定字符串的前N个字符确定存储位置

  • 需要在$MYCAT_HOME/conf目录下增加mapFile来配置取模范围同节点的映射关系

  • 实现类的全名:io.mycat.route.function.PartitionByPrefixPattern


schema.xml 文件

用途:

  • 配置逻辑库及逻辑表

  • 配置逻辑表所存储的数据节点

  • 配置数据节点所对应的物理数据库服务器信息


schema 标签

schema 标签用于定义逻辑库,示例:

<schema name="TESTDB" checkSQLschema="true" sqlMaxLimit="100" randomDataNode="dn1">
    ...
</schema>
  • checkSQLschema属性判断是否检查发给Mycat的SQL是否含有库名,为true时会将SQL中的库名删除掉

  • name属性定义逻辑库的名字,必须唯一不能重复

  • sqlMaxLimit属性用于限制返回结果集的行数,值为-1时表示关闭该限制。如果没有开启限制则默认取server.xml里配置的限制

  • randomDataNode属性定义将一些随机语句发送到该数据节点中


table 标签

使用了schema 标签定义逻辑库之后,还需要使用table 标签定义逻辑表。示例:

<schema name="TESTDB" checkSQLschema="true" sqlMaxLimit="100" randomDataNode="dn1">
    <!-- 多表定义 -->
    <table name="travelrecord,address" dataNode="dn1,dn2,dn3" rule="auto-sharding-long" splitTableNames ="true"/>
    <!-- 单表定义 -->
    <table name="oc_call" primaryKey="id" dataNode="dn1$0-743" rule="latest-month-calldate"/>
</schema>
  • name 属性定义逻辑表的名字,必须唯一不能重复且需要与数据库中的物理表名一致。使用逗号分割配置多个表,即多个表使用这个配置

  • primaryKey 属性指定逻辑表中的主键,也是需要与物理表的主键一致

  • dataNode 属性指定物理表所在数据节点的名称,配置多个数据节点时需按索引顺序并使用逗号分隔,或指定一个索引范围:dn1$0-743。注意数据节点定义之后,顺序不能再发生改变,否则会导致数据混乱

  • rule 属性用于指定分片规则名称,对应rule.xml中的&lt;tableRule&gt;标签的name属性,如无需分片可以不指定

  • splitTableNames 属性定义是否允许多个表的定义


dataNode 标签

dataNode 标签用于定义数据节点,数据节点指向的是存储逻辑表的物理数据库。示例:

<dataNode name="dn1" dataHost="localhost1" database="db1" />
<dataNode name="dn2" dataHost="localhost1" database="db2" />
<dataNode name="dn3" dataHost="localhost1" database="db3" />
<!-- 可以配置一个范围 -->
<dataNode name="dn1$0-743" dataHost="localhost1" database="db$0-743"/>
  • name 属性定义数据节点的名称,必须唯一

  • dataHost 属性指定分片所在的物理主机

  • database 属性指定物理数据库的名称


dataHost 标签

dataHost 标签用于定义后端物理数据库主机信息,该标签内有两个子标签,可以定义一组数据库主机信息。例如,定义一组主从集群结构的数据库主机信息:
Mycat 核心配置是怎么样的

  • writeHost标签配置写实例,即主从中的master节点

  • readHost 标签配置读实例,即主从中的salve节点

  • readHostwriteHost的子标签,与writeHost有绑定关系

在一个dataHost内可以定义多个writeHostreadHost。但是,如果writeHost指定的后端数据库宕机,那么这个writeHost绑定的所有readHost都将不可用。另一方面,由于这个writeHost宕机系统会自动的检测到,并切换到备用的writeHost上去。

配置示例:

<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="localhost" url="localhost:3306" user="root"
               password="123456">
        <readHost host="localhost" url="localhost:3306" 
                  user="root" password="123456"></readHost>
    </writeHost>
</dataHost>

dataHost 标签属性
  • name 属性用于定义主机名称,必须唯一

  • maxCon 属性指定每个读/写实例连接池的最大连接数。也就是说,标签内嵌套的writeHostreadHost 标签都会使用这个属性的值来实例化出连接池的最大连接数

  • minCon 属性指定每个读写实例连接池的最小连接数,即初始化连接池的大小

  • dbType 属性指定后端连接的数据库类型,目前支持二进制的mysql协议,还有其他使用JDBC连接的数据库

  • dbDriver 属性指定连接后端数据库使用的驱动,目前可选的值有nativeJDBC

  • slaveThreshold 属性用于定义主从复制延时阈值,当Seconds_Behind_Master &gt; slaveThreshold时,读写分离筛选器会过滤掉此Slave机器,防止读到很久之前的旧数据

  • balance 属性指定读写分离的负载均衡类型,目前的取值有4 种:

    • 0:不开启读写分离机制,所有读操作都发送到当前可用的 writeHost

    • 1:全部的readHost与stand by writeHost参与select语句的负载均衡

    • 2:所有读操作都随机在writeHostreadhost 上分发

    • 3:所有读请求随机分发到 wiriterHost 对应的readhost 执行。即 writerHost 不负担读压力,全部读请求由 readhost 执行。注意该取值只在1.4及其以后版本有,1.3没有

  • writeType 属性指定写实例的负载均衡类型,目前的取值有4 种:

    • -1:表示不自动切换

    • 0:所有写操作发送到配置的第一个writeHost,第一个挂了切到还生存的第二个writeHost。重新启动后以切换后的为准,切换记录在配置文件中:dnindex.properties

    • 1:所有写操作都随机的发送到配置的writeHost,1.5 以后废弃不推荐使用

    • 2:基于MySQL主从同步的状态决定是否切换(1.4 新增)

  • switchType 属性用于指定主从切换的方式:

    • -1:表示不自动切换

    • 1:默认值,自动切换

    • 2:基于MySQL主从同步的状态决定是否切换,心跳检测语句为:show slave status

    • 3:基于MySQL galary cluster的切换机制(适合集群,1.4.1新增),心跳检测语句为show status like 'wsrep%'

另外,slaveThreshold 属性是用于配合writeType属性实现根据主从延时来进行主从切换的,其官方文档描述如下:

1.4 开始支持MySQL主从复制状态绑定的读写分离机制,让读更加安全可靠,配置如下:MyCAT 心跳检查语句配置为show slave statusdataHost 上定义两个新属性:switchType="2"slaveThreshold="100",此时意味着开启MySQL主从复制状态绑定的读写分离与切换机制,Mycat心跳机制通过检测show slave status 中的"Seconds_Behind_Master"、"Slave_IO_Running"、"Slave_SQL_Running" 三个字段来确定当前主从同步的状态以及Seconds_Behind_Master 主从复制时延,当Seconds_Behind_Master &gt; slaveThreshold时,读写分离筛选器会过滤掉此Slave机器,防止读到很久之前的旧数据,而当主节点宕机后,切换逻辑会检查Slave上的Seconds_Behind_Master是否为0,为0时则表示主从同步,可以安全切换,否则不会切换。


heartbeat 标签

heartbeat 标签内指明用于和后端数据库进行心跳检查的语句。例如,MySQL可以使用select user(),Oracle可以使用select 1 from dual 等。

这个标签还有一个connectionInitSql属性,主要是当使用Oracla数据库时,需要执行的初始化SQL语句就这个放到这里面来。例如:alter session set nls_date_format='yyyy-mm-dd hh34:mi:ss'

注:如果是配置主从切换的语句在1.4之后必须是:show slave status


writehost 标签、readHost标签

这两个标签都用于配置一组主从数据库的相关信息,Mycat用这两个标签配置的连接信息实例化后端连接池。唯一不同的是,writeHost 配置写实例(master)、readHost 配置读实例(salve),并且readHostwriteHost 的子标签。通过这两个标签可以组合读/写实例以满足系统的要求。

在一个dataHost内可以定义多个writeHostreadHost。但是,如果writeHost指定的后端数据库宕机,那么这个writeHost绑定的所有readHost都将不可用。另一方面,当一个writeHost宕机时系统会自动检测到,并切换到备用的writeHost 上去。


writehost 标签及readHost标签的属性

这两个标签的属性相同,这里就一起介绍:

  • host 属性用于标识不同实例名称,一般writeHost名称使用M1作为后缀,readHost则使用S1作为后缀

  • url 属性用于配置数据库的连接地址,如果是使用nativedbDriver,则一般为address:port这种形式。用JDBC或其他的dbDriver,则需要特殊指定。例如,当使用JDBC 时则可以这么写:jdbc:mysql://localhost:3306/

  • user 属性配置数据库用户名

  • password 属性配置数据库密码

  • weight 属性配置某个数据库在 readhost 中作为读节点的权重

  • usingDecrypt 属性指定是否对密码加密,默认为0, 若需要开启则配置为1


schema.xml 配置文件示例

<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">

    <schema name="TESTDB" checkSQLschema="true" sqlMaxLimit="100" randomDataNode="dn1">
        <table name="travelrecord,address" dataNode="dn1,dn2,dn3" rule="auto-sharding-long" splitTableNames="true"/>
        <!-- <table name="order" primaryKey="id" dataNode="dn1$0-743" rule="auto-sharding-long" splitTableNames="true"/> -->
    </schema>

    <dataNode name="dn1" dataHost="localhost1" database="db1"/>
    <dataNode name="dn2" dataHost="localhost1" database="db2"/>
    <dataNode name="dn3" dataHost="localhost1" database="db3"/>
    <!-- <dataNode name="dn1$0-743" dataHost="localhost1" database="db$0-743"/> -->

    <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="hostS1" url="localhost:3306" user="root" password="123456"/>
        </writeHost>
        <writeHost host="hostM2" url="localhost:3306" user="root" password="123456"/>
    </dataHost>
</mycat:schema>

关于Mycat 核心配置是怎么样的就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Mycat 核心配置是怎么样的

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

spring的核心配置文件是什么

在Spring框架中,核心的配置文件通常是一个XML文件,命名为applicationContext.xml。该文件包含了Spring容器的配置信息,用于定义和配置Spring的各种组件,如bean、依赖注入、切面、事务管理等。同时,Spr
2023-10-08

hadoop核心配置文件怎么查看

要查看 Hadoop 的核心配置文件,您可以使用以下命令来查找 Hadoop 安装目录中的配置文件:ls /path/to/hadoop/etc/hadoop通常,Hadoop 的核心配置文件位于 Hadoop 安装目录的 etc/had
hadoop核心配置文件怎么查看
2024-03-06

vsftpd 配置是怎么样的

这篇文章给大家介绍vsftpd 配置是怎么样的,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。 IP监听与连接控制 vsftpd工作在独立模式(standalone)下的启动参数有两项: listen=y
2023-06-13

Python 3.1核心语言的变化是怎么样的

Python 3.1核心语言的变化是怎么样的,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。这里我们将对Python 3.1核心语言的变化进行分析,包括字符串的格式化、说明符以及
2023-06-17

Spring Cloud 的核心架构原理是怎么样的

Spring Cloud 的核心架构原理是怎么样的,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。最近在补一些分布式系列的面试内容,提前几个月做做准备吧,你们懂的,也跟大家分享分
2023-06-19

MyBatis的核心配置出现问题怎么解决

如果MyBatis的核心配置出现问题,可以尝试以下解决方法:检查MyBatis配置文件(通常是mybatis-config.xml)是否正确配置了数据库连接信息、mapper路径等重要信息。检查mapper文件是否正确映射了数据库表和SQL
MyBatis的核心配置出现问题怎么解决
2024-03-01

WebSEAL Configure配置是怎么样的

小编给大家分享一下WebSEAL Configure配置是怎么样的,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!1.[rstest1][/]#pdconfigTivoli Access Manager Setup Menu
2023-06-03

vuex的核心概念和基本使用是怎么样的

vuex的核心概念和基本使用是怎么样的,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。介绍Vuex是实现组件全局状态(数据)管理的一种机制,可以方便的实现组件之间的数据共享开始安
2023-06-22

hadoop配置文件是怎么样的

这篇文章给大家介绍hadoop配置文件是怎么样的,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。文件名称 格式 描述hadoop-env.sh
2023-06-03

怎么选择云服务器配置,服务器当中核心的是什么

怎么选择云服务器配置,服务器当中核心的是什么?在当前数字化时代,云服务器已成为托管网站、应用程序和数据的常见选择。然而,面对不同的云服务器配置选择,很多人可能困惑于如何挑选适合自己需求的配置。下面将介绍一些有关选择云服务器配置的关键要素,并重点探讨服务器中最核心的要素是什么。
怎么选择云服务器配置,服务器当中核心的是什么
2024-01-23

CentOS LAMP配置是怎样的

今天就跟大家聊聊有关CentOS LAMP配置是怎样的,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。今天用yum方法搭建起了个CentOS LAMP环境,中间遇到了很多问题,经过go
2023-06-16

Linux内核是怎么样的

这篇文章将为大家详细讲解有关Linux内核是怎么样的,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Linux 内核,这个经常听见,却不不知道它具体是干嘛的东西,是不是觉得非常神秘?Linux 内核看不见摸
2023-06-16

编程热搜

目录