Mycat 中间件配置初探与入门操作
Mycat中间件配置初探与入门操作
By:授客 QQ:1033553122
实践环境
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
http://www.mycat.io/document/Mycat_V1.6.0.pdf
网盘链接分享,点击:Mycat中间件配置初探与入门操作.pdf 查看
Mycat 中间件配置初探与入门操作的更多相关文章
- mysql mycat 中间件安装与使用
一,什么是mycat 一个彻底开源的,面向企业应用开发的大数据库集群 支持事务.ACID.可以替代MySQL的加强版数据库 一个可以视为MySQL集群的企业级数据库,用来替代昂贵的Oracle集群 一 ...
- 高可用Mysql架构_Mysql主从复制、Mysql双主热备、Mysql双主双从、Mysql读写分离(Mycat中间件)、Mysql分库分表架构(Mycat中间件)的演变
[Mysql主从复制]解决的问题数据分布:比如一共150台机器,分别往电信.网通.移动各放50台,这样无论在哪个网络访问都很快.其次按照地域,比如国内国外,北方南方,这样地域性访问解决了.负载均衡:M ...
- MyCat中间件:读写分离(转)
利用MyCat中间件实现读写分离 需要两步: 1.搭建MySQL主从复制环境 2.配置MyCat读写分离策略 一.搭建MySQL主从环境 参考上一篇博文:MySQL系列之七:主从复制 二.配置MyCa ...
- Maven的安装、配置及使用入门
Maven的安装.配置及使用入门 本书代码下载 大家可以从我的网站下载本书的代码:http://www.juvenxu.com/mvn-in-action/,也可以通过我的网站与我取得联系,欢迎大家与 ...
- spring boot 入门操作(三)
spring boot入门操作 devtools热部署 pom dependencies里添加依赖 <dependency> <groupId>org.springframew ...
- Mysql的二进制安装和基础入门操作
前言:Mysql数据库,知识非常的多,要想学精学通这块知识,估计也要花费和学linux一样的精力和时间.小编也是只会些毛皮,给大家分享一下~ 一.MySQL安装 (1)安装方式: 1 .程序包yum安 ...
- java之servlet入门操作教程一续
本节主要是在java之servlet入门操作教程一 的基础上使用myeclipse实现自动部署的功能 准备: java之servlet入门操作教程一 中完成myFirstServlet项目的创建: ...
- Mysql数据库的二进制安装和基础入门操作
前言:Mysql数据库,知识非常的多,要想学精学通这块知识,估计也要花费和学linux一样的精力和时间.小编也是只会些毛皮,给大家分享一下~ 一.MySQL安装 (1)安装方式: 1 .程序包yum安 ...
- EF+LINQ事物处理 C# 使用NLog记录日志入门操作 ASP.NET MVC多语言 仿微软网站效果(转) 详解C#特性和反射(一) c# API接受图片文件以Base64格式上传图片 .NET读取json数据并绑定到对象
EF+LINQ事物处理 在使用EF的情况下,怎么进行事务的处理,来减少数据操作时的失误,比如重复插入数据等等这些问题,这都是经常会遇到的一些问题 但是如果是我有多个站点,然后存在同类型的角色去操作 ...
随机推荐
- Python - 搭建Jupyter notebook环境
1- Jupyter简介 HomePage:https://jupyter.org/ 安装指南:https://jupyter.org/install.html 官方文档:https://jupyte ...
- oracle批量去掉字段值空格
--查询验证 select ltrim(col1) from t1; --去掉字段值左边空格update t1 set col1=ltrim(col1); --去掉字段值右边空格update t1 s ...
- git版本管理规范
一.基本开发流程: 二.分支命名 2.1主分支 ① master :随时可供在生产环境中部署的代码 ② dev: 保存当前稳定并且最新的开发分支(多人开发同一分支) 2.2辅助分支 主要用于新功能的并 ...
- jvm详情——4、分代垃圾回收详述
虚拟机中的共划分为三个代: 年轻代(Young Generation) 年老点(Old Generation) 持久代(Permanent Generation) 其中持久代主要存放的是Java类的类 ...
- C# 获取 sha256
C# 获取 sha256, 输入可以是 字符串,也可以是 字节流流: 自定义的输入类型的枚举: public enum Sha26ParseType { StringType, StreamType ...
- SpringCloud入门之Spring Boot多环境配置切换指南
在 spring boot 中,有两种配置文件,一种是application.properties,另一种是application.yml,两种都可以配置spring boot 项目中的一些变量的定义 ...
- Java并发编程-AbstractQueuedSynchronizer源码分析
简介 提供了一个基于FIFO队列,可以用于构建锁或者其他相关同步装置的基础框架.该同步器(以下简称同步器)利用了一个int来表示状态,期望它能够成为实现大部分同步需求的基础.使用的方法是继承,子类通过 ...
- SOAP系列目录
1.协议分析 2.WebService.WCF介绍 3.HttpClientHelper实现webservice调用 4.SoapCore介绍
- Tomcat8源码笔记(五)组件Container分析
Tomcat8源码笔记(四)Server和Service初始化 介绍过Tomcat中Service的初始化 最先初始化就是Container,而Container初始化过程是咋样的? 说到Contai ...
- .net DBHelper
DBHelper.cs是程序来连接数据的,也是一个程序必不可少的一个类(本人道行浅,目前这样认为).由于一个程序基本写一次,容易忘记.所有写在这里备注 首先是引用 using System.Data; ...