Mycat (二) —— Mycat概念和配置

  一.概念

      运行在应用层和数据库之间,可以当作一个Mysql服务器使用(不论是在工具还是在代码或者命令中都可以直接连接),实现对Mysql数据库的分库分表。也可以通过JDBC支持其他的数据库。

  二.关键特性

      1.可以当作一个Mysql数据库来使用

      2.支持Mysql之外的数据库,通过JDBC实现

      3.解决了我们提到的所有问题,多表join、分布式事务、全局序列号、翻页排序

      4.支持ZK配置,带监控mycat-web

  三.主要术语

概念含义
主机物理主机, 一台服务器, 一个数据库服务, 一个 3306 端口
物理数据库真实的数据库
物理表真实的表
分片将原来单个数据库的数据切分后分散存储在不同的数据库节点
分片节点分片以后数据存储的节点
分片键分片依据的字段,通常是主键
分片算法分片的规则, 例如随机、 取模、 范围、 哈希、 枚举以及各种组合算法
逻辑表相对于物理表, 是分片表聚合后的结果, 对于客户端来说跟真实的表没有区别
逻辑数据库相对于物理数据库, 是数据节点聚合后的结果, 例如 imall

  四.配置详解

     主要配置文件server.xml、schemal.xml、rule.xml和具体的分片配置文件

   1.server.xml

      包含系统配置信息:

      system标签:例如字符集、线程数、心跳、分布式事务开关等等

           user标签:配置登录用户和权限

    2.schema.xml

          包含逻辑库、表、分片规则、分片节点和数据源,可以定义多个schema。里面有三个主要的标签(table、dataNode、dataHost)

         1)Tabke

<schema name="imall" checkSQLschema="false" sqlMaxLimit="100">
   <table name="customer" primaryKey="id" dataNode="122-imall,123-imall,124-imall" rule="auto-sharding-long" />
   <table name="order_info" dataNode="122-imall,123-imall,124-imall" rule="mod-long-order" >
    <childTable name="order_detail" primaryKey="id" joinKey="order_id" parentKey="order_id"/>
</table>
</schema>
<schema name="test" checkSQLschema="false" sqlMaxLimit="100">
   <table name="student" primaryKey="sid" dataNode="122-gupao,123-gupao,124-gupao" rule="mod-long" />
</schema>
配置作用
checkSQLschema在查询 SQL 中去掉逻辑库名
sqlMaxLimit自动加上 limit 控制数据的返回
primaryKey

指定该逻辑表对应真实表的主键。 MyCat 会缓存主键(通过 primaryKey 属性配置) 与具体 dataNode 的信息。

当分片规则(rule) 使用非主键进行分片时, 那么在使用主键进行查询时, MyCat 就会通过缓存先确定记录在哪个 dataNode 上, 然后再在该 dataNode 上执行查询。

如果没有缓存/缓存并没有命中的话, 还是会发送语句给所有的 dataNode。

dataNode数据分片的节点
autoIncrement自增长(全局序列) , true 代表主键使用自增长策略
type全局表: global。 其他: 不配置

     2) dataNode

       数据节点与物理数据库的对应关系

<dataNode name="124-imall" dataHost="host124" database="imall" />

    3)dataHost

         配置物理主机的信息,readhost 是从属于 writehost 的

<dataHost name="host122" maxCon="1000" minCon="10" balance="0" writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
<heartbeat>select user()</heartbeat>
<writeHost host="hostM1" url="192.168.44.122:3306" user="root" password="123456">
</writeHost>
</dataHost>
​
<dataHost name="host123" maxCon="1000" minCon="10" balance="0" writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
<heartbeat>select user()</heartbeat>
<writeHost host="hostM1" url="192.168.44.123:3306" user="root" password="123456">
<!-- <readHost host="hostS1"></readHost>-->
</writeHost>
</dataHost>
​
<dataHost name="host124" maxCon="1000" minCon="10" balance="0" writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
<heartbeat>select user()</heartbeat>
<writeHost host="hostM1" url="192.168.44.124:3306" user="root" password="123456">
</writeHost>
</dataHost>

          balance:负载的配置,决定 select 语句的负载

作用
0不开启读写分离机制, 所有读操作都发送到当前可用的 writeHost 上。
1所有读操作都随机发送到当前的 writeHost 对应的 readHost 和备用的 writeHost
2所有的读操作都随机发送到所有的 writeHost,readHost 上
3所有的读操作都只发送到 writeHost 的 readHost 上

           writeType:读写分离的配置,决定 update、delete、insert 语句的负载

作用
0所有写操作都发送到可用的 writeHost 上(默认第一个, 第一个挂了以后发到第二个)
1所有写操作都随机的发送到 writeHost

            switchType:主从切换配置

作用
-1表示不自动切换
1默认值, 表示自动切换
2基于 MySQL 主从同步的状态决定是否切换,心跳语句为 show slave status
3基于 MySQL galera cluster 的切换机制(适合集群) (1.4.1), 心跳语句为 show status like 'wsrep%'。

 3.rule.xml

     定义分片规则和算法

//分片规则
<tableRule name="rang-long-cust">
<rule>
<columns>id</columns>
<algorithm>func-rang-long-cust</algorithm>
</rule>
</tableRule>

//分片算法
<function name="func-rang-long-cust" class="io.mycat.route.function.AutoPartitionByLong">
<property name="mapFile">rang-long-cust.txt</property>
</function>

五. 监控

1.连接到管理端

    mysql -uroot -h127.0.0.1 -p123456 -P9066

2.基本命令

命令作用
show @@server;查看服务器状态, 包括占用内存等
show @@database;查看数据库
show @@datanode;查看数据节点
show @@datasource;查看数据源
show @@connection;该命令用于获取 Mycat 的前端连接状态, 即应用与 mycat 的连接
show @@backend;查看后端连接状态
show @@cache;查看缓存使用情况
SQLRouteCache: sql 路由缓存。
TableID2DataNodeCache : 缓存表主键与分片对应关系。
ER_SQL2PARENTID : 缓存 ER 分片中子表与父表关系
reload @@config;重新加载基本配置(热加载) , 使用这个命令时 mycat 服务不可用
show @@sysparam;查询 mycat 服务的系统参数
show @@sql.high;执行频率高的 SQL
show @@sql.slow;慢 SQL
设置慢 SQL 的命令: reload @@sqlslow=5 ;
show @@syslog limit=50;查看最近 50 条系统日志

 

 

   

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值