Mycat中间件配置初探与入门操作

本文涉及的产品
性能测试 PTS,5000VUM额度
注册配置 MSE Nacos/ZooKeeper,118元/月
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介: Mycat中间件配置初探与入门操作

Mycat中间件配置初探与入门操作


实践环境

Mycat-server-1.5.1-RELEASE-20161130213509-win.tar.gz

下载地址:

https://github.com/MyCATApache/Mycat-download/blob/master/1.5-RELEASE/Mycat-server-1.5.1-RELEASE-20161130213509-win.tar.gz

 

Win7

 

配置

server.xml

Mycat服务器参数调整和用户授权的配置文件。

<?xml version="1.0"?>

<mycat:server xmlns:mycat="http://org.opencloudb/">

<system>

<property name="defaultSqlParser">druidparser</property>

      <!-- <property name="useCompression">1</property>--> <!--1为开启mysql压缩协议-->

<!-- <property name="processorBufferChunk">40960</property> -->

<!--

<property name="processors">1</property>

<property name="processorExecutor">32</property>

-->

<!--默认是65535 64K 用于sql解析时最大文本长度 -->

<!--<property name="maxStringLiteralLength">65535</property>-->

<!--<property name="sequnceHandlerType">0</property>-->

<!--<property name="backSocketNoDelay">1</property>-->

<!--<property name="frontSocketNoDelay">1</property>-->

<!--<property name="processorExecutor">16</property>-->

<!--

<property name="mutiNodeLimitType">1</property> 0:开启小数量级(默认) ;1:开启亿级数据排序

<property name="mutiNodePatchSize">100</property> 亿级数量排序批量

<property name="processors">32</property> <property name="processorExecutor">32</property>

<property name="serverPort">8066</property>

<property name="managerPort">9066</property>

<property name="idleTimeout">300000</property> <property name="bindIp">0.0.0.0</property>

<property name="frontWriteQueueSize">4096</property> <property name="processors">32</property>

-->

</system>

<user name="myuser">

   <property name="password">123456</property>

   <property name="schemas">mydatabase</property>

   <property name="readOnly">false</property>

</user>

 

<!--

<quarantine>

  <whitehost>

     <host host="127.0.0.1" user="mycat"/>

     <host host="127.0.0.2" user="mycat"/>

  </whitehost>

      <blacklist check="false"></blacklist>

</quarantine>

-->

</mycat:server>

 

配置说明:

服务端口配置

这里的服务端口也就是连接mycat时使用的端口,无特殊需求可不做更改,默认8066,如果要修改,则修改serverPort配置

例子:修改服务端口为8065

<property name="serverPort">8065</property>

 

授权用户配置

配置连接mycat时使用的用户名,用户名密码,逻辑数据库名,是否只读权限等。

例子:

<user name="myuser"> <!--配置用户名为:myuser-->

   <property name="password">123456</property> <!--配置密码为:123456-->

<property name="schemas">mydatabase</property><!--配置逻辑数据库名为:mydatabase-->

<property name="readOnly">false</property><!--配置用户为非只读权限用户-->

</user>

 

补充说明:可以一次性配置多个逻辑库,逻辑库名称之间用逗号隔开,如下,配置了user, order两个逻辑库

<property name="schemas">user,order</property>

 

注意:如果设置readOnly为true,则设置用户只有只读权限,当执行数据库INSERT语句时,会提示 User Readonly

 

schema.xml

是逻辑库定义和表以及分片定义的配置文件

<?xml version="1.0"?>

<!DOCTYPE mycat:schema SYSTEM "schema.dtd">

<mycat:schema xmlns:mycat="http://org.opencloudb/" >

<schema name="mydatabase" checkSQLschema="false" sqlMaxLimit="100">

<!--按mod-long分片-->

<table name="my_table" dataNode="dn1,dn2" rule="mod-long" />

</schema>

 

<dataNode name="dn1" dataHost="dbhost1" database="mydb1" />

<dataNode name="dn2" dataHost="dbhost1" database="mydb2" />

 

<dataHost name=" dbhost1" maxCon="1000" minCon="10" balance="0" writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">

   <heartbeat>select user()</heartbeat>

<writeHost host="hostM1" url="10.118.59.84:3307" user="testacc" password="test1234">

      <!--

<readHost host="hostS2" url="10.118.59.84:3307" user="testacc" password="test1234" />

-->

  </writeHost>

</dataHost>

</mycat:schema>

 

逻辑库配置

如下,一个schema定义,代表了一个逻辑库的具体配置、定义,可以结合server.xml配置多个schema

<schema name="mydatabase" checkSQLschema="false" sqlMaxLimit="100">

……

</schema>

注意:name 配置逻辑库名称,名称必须在server.xml中schemas属性已定义

 

逻辑表配置

如下,一个table定义一个逻辑表,可以同时定义多个table。

<table name="my_table" dataNode="dn1,dn2" rule="mod-long" />

 

全局表

<table name="goods" primaryKey="ID" type="global" dataNode="dn1,dn2" />

 

说明:

name     代表逻辑表表名,必须唯一,和在物理库上执行CREATE TABLE 时指定的表名是一样的。

dataNode 代表表对应的分片,名称自定义,如上如果需要配置多个分片名称则用逗号隔开,个人感觉叫数据库节点可能会更好理解,因为Mycat默认采用分库方式,也就是说把一个表映射到不同的数据库上

rule     代表表要采用的数据切分方式,名称对应到rule.xml中的对应配置,如果要分片必须配置。

type     设置逻辑表类型,设置为global表示全局表,全局表不用指定rule,全局表的记录会自动复制其dataNode属性指定的所有数据库分片中。

primaryKey 该逻辑表对应真实表的主键,主要用于加快查询速度

更多逻辑表配置参考官方配置文档

 

分片配置(dataNode)

如果,每个dataNode定义了一个分配,即一个数据库

<dataNode name="dn1" dataHost="dbhost1" database="mydb1" />

<dataNode name="dn2" dataHost="dbhost1" database="mydb2" />

 

说明:

name 代表分片的名称,必须在上述table元素中dataNode属性值中有定义,可以理解为数据库的别名

dataHost 配置分片所在物理数据库所在主机名称,名称自定义

database 设置分片所在物理数据库真实名称

 

这里,分片映射是数据库可以在同一台机器上,也可以在不同机器上

 

物理库分片映射配置(dataHost)

如下,一个dataHost定义了一个物理库分片映射,具体的说定义了用于连接物理数据库的连接url(数据库ip及端口),数据库用户名,登录密码,读写分离配置,以及其它连接属性等

<dataHost name=" dbhost1" maxCon="1000" minCon="10" balance="0" writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">

<heartbeat>select user()</heartbeat>

<writeHost host="hostM1" url="10.118.59.84:3307" user="testacc" password="test1234">

   <!--

<readHost host="hostS2" url="10.118.59.83:3307" user="testacc" password="test1234" />

-->

</writeHost>

</dataHost>

 

说明:

dataHost标签

name 该属性配置分片所在物理数据库所在主机名称,必须和上述dataNode的dataHost属性值中有定义

 

maxCon 设置每个读写实例连接池的最大连接数。也就是说,标签内嵌套的writeHost、readHost标签都会使用这个属性的值来实例化出连接池的最大连接数

 

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

 

balance:

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不负担读压

 

writeType:

writeType="0", 所有写操作发送到配置的第一个writeHost。

writeType="1",所有写操作都随机的发送到配置的writeHost。

writeType="2",不执行写操作。

 

 

dbType 指定后端连接的数据库类型,目前支持二进制的mysql协议,还有其他使用JDBC连接的数据库。例如:mongodb、oracle、spark等

 

dbDriver 指定连接后端数据库使用的Driver,目前可选的值有native和JDBC。使用native的话,因为这个值执行的是二进制的mysql协议,所以可以使用mysql和maridb。其他类型的数据库则需要使用JDBC驱动来支持

 

switchType:

switchType=-1  表示不自动切换

switchType=1   默认值,自动切换

switchType=2   基于MySQL 主从同步的状态决定是否切换

 

heartbeat标签

代表Mycat需要对物理库心跳检测的语句,正常情况下生产案例可能配置主从,或者多写或者单库,无论哪种情况Mycat都需要维持到数据库的数据源连接,因此需要定时检查后端连接可以性,心跳语句就是来作为心跳检测。

 

 

writeHost和readHost 标签

此标签代表一个逻辑主机(dataHost)对应的后端的物理主机映射,例如例子中写库hostM1 映射到10.118.59.84:3307。如果后端需要做读写分离或者多写或者主从则通过配置多个writeHost 或者readHost即可。

<writeHost host="hostM1" url="10.118.59.84:3307" user="testacc" password="test1234">

   <readHost host="hostS2" url="10.118.59.83:3307" user="testacc" password="test1234" />

</writeHost>

<writeHost>

   ……

</writeHost>

 

注:mysql为例,mycat读写分离,目前主要是依赖mysql主从复制实现的,也就是说,如果没有配置主从复制,那一般也就不必配置读写分离。

 

rule.xml

是分片规则的配置文件,分片规则的具体一些参数信息单独存放为文件,也在这个目录下,配置文件修改需要重启MyCAT

<tableRule name="mod-long">

   <rule>

       <columns>id</columns>

<algorithm>mod-long</algorithm>

   </rule>

</tableRule>

<function name="mod-long" class="org.opencloudb.route.function.PartitionByMod">

  <property name="count">2</property> <!--count是分片的数量-->

</function>

 

数据切分中作为表切分规则中最重要的配置,表的切分方式决定了数据切分后的性能好坏,因此也是最重要的配置。

 

如上面例子配置了一个切分规则,名为mod-long 对应的切分方式(function )是按日期切分,该配置中:

 

tableRule

name 为schema.xml 中table 标签中对应的 rule="mod-long" ,也就是配置表的分片规则,

columns 是表的切分字段: id

 

algorithm 是规则对应的切分规则:映射到function 的name。

 

function

function 配置是分片规则的配置。

name 为切分规则的名称,名字人员取,但是需要与tableRule 中algorithm标签内容匹配。

 

class 是切分规则对应的切分类,写死,需要哪种规则则配置哪种,例如本例子是模切片:org.opencloudb.route.function.PartitionByMod, 例中会对id进行十进制求模运算,将运算结果作为Mycat的分片依据。

property 标签是切分规则对应的不同属性,不同的切分规则配置不同。

 

运行

双击bin\startup_nowrap.bat

 

连接mycat

同连接mysql(sqlyog为例)

 

 

 

 

操作数据表

同操作mysql数据库一样

 

往my_table插入不同id的数据,

INSERT INTO my_table(a, b, id) VALUES(1, 1, 7);

 

然后查询

SELECT * FROM my_table

 

发现查询出来的是插入的全部记录,但是这些记录一部分存在mydb1.my_table,一部分存在mydb2.my_table

 

参考链接

https://github.com/MyCATApache/Mycat-Server/wiki/3.0-Mycat%E9%85%8D%E7%BD%AE%E5%85%A5%E9%97%A8

https://github.com/MyCATApache/Mycat-Server/wiki/4.0-%E9%80%BB%E8%BE%91%E5%BA%93%E3%80%81%E7%B3%BB%E7%BB%9F%E5%8F%82%E6%95%B0%E9%85%8D%E7%BD%AE%EF%BC%88server.xml%EF%BC%89

https://github.com/MyCATApache/Mycat-Server/wiki/5.0-%E9%80%BB%E8%BE%91%E5%BA%93%E3%80%81%E8%A1%A8%E5%88%86%E7%89%87%E9%85%8D%E7%BD%AE(schema.xml)

https://github.com/MyCATApache/Mycat-Server/wiki/6.0-%E8%A1%A8%E5%88%87%E5%88%86%E8%A7%84%E5%88%99%E9%85%8D%E7%BD%AE%EF%BC%88rule.xml%EF%BC%89

http://www.mycat.io/document/Mycat_V1.6.0.pdf

 

 

网盘链接分享,点击:Mycat中间件配置初探与入门操作.pdf 查看

 

 

 

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
6月前
|
开发框架 JavaScript 中间件
配置中间件
【5月更文挑战第19天】
69 4
|
6月前
|
中间件
egg.js 24.17中间件配置
egg.js 24.17中间件配置
62 0
egg.js 24.17中间件配置
|
3月前
|
前端开发 中间件 索引
Django入门到放弃之中间件
Django入门到放弃之中间件
|
3月前
|
存储 中间件 PHP
Python编程入门:从零到一的代码实践深入理解 PHP 中的中间件模式
【8月更文挑战第28天】本文旨在通过浅显易懂的方式,向初学者介绍Python编程的基础知识,并结合具体代码示例,带领读者一步步实现从零基础到能够独立编写简单程序的转变。文章将围绕Python语言的核心概念进行讲解,并通过实例展示如何应用这些概念解决实际问题。无论你是编程新手还是希望扩展技能的专业人士,这篇文章都将为你打开编程世界的大门。 【8月更文挑战第28天】在PHP的世界中,设计模式是构建可维护和可扩展软件的重要工具。本文将通过浅显易懂的语言和生动的比喻,带领读者深入理解中间件模式如何在PHP应用中发挥魔力,实现请求处理的高效管理。我们将一步步揭开中间件的神秘面纱,从它的定义、工作原理到
|
4月前
|
消息中间件 缓存 中间件
中间件本地事务执行操作
【7月更文挑战第17天】
26 2
|
4月前
|
缓存 监控 中间件
中间件配置和管理问题
【7月更文挑战第14天】
59 1
|
6月前
|
存储 监控 安全
中间件应用优化持久化配置
【5月更文挑战第4天】中间件应用优化持久化配置
75 2
中间件应用优化持久化配置
|
6月前
|
消息中间件 监控 NoSQL
中间件应用合理配置内存
【5月更文挑战第4天】中间件应用合理配置内存
85 2
中间件应用合理配置内存
|
6月前
|
JSON 资源调度 JavaScript
中间件中加载和配置中间件
【5月更文挑战第18天】
60 2
|
6月前
|
存储 缓存 监控
中间件Cache-Aside策略读取操作
【5月更文挑战第9天】
35 2