Mycat
Posted 成为DBA
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Mycat相关的知识,希望对你有一定的参考价值。
Mycat简介
Mycat是数据库中间件,就是介于数据库与应用之间,进行数据处理与交互的中间服务。MyCat 是目前最流行的基于 java 语言编写的数据库中间件,是一个实现了 mysql 协议的服务器,前端用户可以把它看作是一个数据库代理,用 MySQL 客户端工具和命令行访问,而其后端可以用 MySQL原生协议(native)与多个MySQL 服务器通信,也可以用 JDBC(Jdbc:是Java语言中用来规范客户端程序如何来访问数据库的应用程序接口,提供了诸如查询和更新数据库中数据的方法。)协议与大多数主流数据库服务器通信。例如Oracle、SqlServer等等
Mycat开源免费,随环境变化更新维护快。Mycat支持标准的sql语句,大大降低学习成本。MyCat就是实现数据库集群的,对海量数据存储的一种解决方案,因为很多数据库不想Oracle一样自带集群的配置,那么在进行海量数据存储的时候就要使用到MyCat进行数据库的管理了。Mycat适合1000亿条以下的单表规模。
Mycat作用
基本功能实现数据库的高可用读写分离,数据库的分库分表,容灾备份等等。适用于并发量大,单机已经不能处理并发请求,、以及读远大于写的场景,数据实时要求不那么严格的场景。
Mycat原理
Mycat原理就是拦截用户发来的请求(SQL语句),mycat对SQL语句进行分析,如对SQL语句进行读写分离分析、分片分析、路由分析等等,然后将分析结果发送到后端的真是数据库上,数据库返回结果,mycat再将结果返回非用户。
Mycat配置文件说明
Mycat配置文件主要为三个,分别为server.xml、schema.xml、rule.xml。
Server.xml:用于配置mycat的账号密码以及逻辑库标签等
<!DOCTYPEmycat:server SYSTEM "server.dtd">
<mycat:serverxmlns:mycat="http://org.opencloudb/">
<system>
<propertyname="defaultSqlParser">druidparser</property>
</system>
<user name="user"> #设置mycat的用户名
<propertyname="password">user</property> #设置mycat的用户密码
<propertyname="schemas">e3mall</property> #设置逻辑库名称
<propertyname="readOnly">false</property>
</user>
</mycat:server>
Schema.xml:该文件是MyCat中最重要的配置文件之一,管理着MyCat的逻辑库、表、分片规则。
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
//1.配置逻辑库的标签
<schema name="TESTDB" checkSQLschema="false"sqlMaxLimit="100">
<table name="t_user" dataNode="dn1,dn2,dn3"rule="crc32slot" />
</schema>
//2.配置数据节点的标签
<dataNode name="dn1" dataHost="localhost1"database="db1" />
<dataNode name="dn2" dataHost="localhost1"database="db2" />
<dataNode name="dn3" dataHost="localhost1"database="db3" />
//3.配置连接的主机的节点标签
<dataHost name="localhost1" maxCon="1000"minCon="10" balance="0"
writeType="0" dbType="mysql"dbDriver="native"
switchType="1" slaveThreshold="100">
//4.配置读写分离
<heartbeat>select user()</heartbeat>
<writeHost host="hostM1" url="localhost:3306"user="root" password="root">
<readHost host="hostS2"url="192.168.1.200:3306" user="root"password="root" />
</writeHost>
</dataHost>
</mycat:schema>
Balance:读请求的负载均衡
0:不开启读写分离,所有读操作都发送到writhost中;
1:全部的readhost和writehost都参与读操作的负载均衡;
2:读请求随机发送给readhost和writehost
3:读请求随机发送给writehost中的readhost,writehost不参与读请求(推荐使用)
Writetype:写请求负载均衡
0:写请求先发送给schema.xml中的第一个writehost,当第一个writehost挂掉,再自动切换到writehost中,切换的第二个writehost中。重新启动后,以切换后的为准,切换记录会被记录在conf/dnindex.properties;
1:写请求随机发送到所有的wirtehost中;
2:不执行写操作。
Switchtype指切换的模式
0:不自动切换;
1:自动切换;
2:基于mysql主从同步的状态,决定是否切换 心跳语句为show slave status。
3:基于mysql galary cluster的切换机制,心跳语句为show status like ‘wsrep%’。
Rule.xml:定义了分片的规则,这一部分为tableRule和function这两个标签。
<tableRule name="auto-sharding-long">
<rule>
<columns>id</columns>
<algorithm>rang-long</algorithm>
</rule>
</tableRule>
name:用户标识不同的分表规则;
columns:指定按哪一列进行拆分;
algorithm:该属性值为下面function标签中name的属性值,定义了连接表规则的具体的路由算法,多个表规则可以连接到同一个路由算法上;
例如:
<functionname="rang-long" class="org.opencloudb.route.function.AutoPartitionByLong">
<propertyname="mapFile">autopartition-long.txt</property>
</function>
以上是关于Mycat的主要内容,如果未能解决你的问题,请参考以下文章