数据库路由中间件MyCat - 使用篇(3)下篇
此文已由作者张镐薪授权网易云社区发布。
欢迎访问网易云社区,了解更多网易技术产品运营经验。
2. 配置conf/server.xml
server.xml几乎保存了所有mycat需要的系统配置信息。其在代码内直接的映射类为SystemConfig类。 参考完整配置:
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE mycat:server SYSTEM "server.dtd"><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>-->
<!-- 表示使用数据库方式生成sequence. -->
<property name="sequnceHandlerType">1</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> -->
<property name="serverPort">8066</property> <property name="managerPort">9066</property>
</system>
<user name="root">
<!--从1.4.1开始,MyCat支持密文保存密码,这里明文密码为root -->
<property name="usingDecrypt">1</property>
<property name="password">CrjpLhvVJkHk0EPW35Y07dUeTimf52zMqClYQkIAN3/dqiG1DVUe9Zr4JLh8Kl+1KH1zd7YTKu5w04QgdyQeDw==</property>
<property name="schemas">schema1</property>
</user><user name="test">
<!--这里明文密码为test-->
<property name="usingDecrypt">1</property>
<property name="password">nYx8wxkKtgdPtMXIpapwbNadIWFzpse48NcO+42D1yS//1cNxxQquw07eV/7gvVpxzbjNv47t6QpChvVszKy9g==</property>
<property name="readOnly">true</property>
<property name="schemas">schema1</property>
</user></mycat:server>
2.1 生成密文密码
查看密文密码工具类org.opencloudb.util.DecryptUtil,可以发现main方法中接收的参数为如下格式: 0:test:test 分别对应的是
加密方式:0 前端加密, 1 后端加密(后端是指后台具体数据库连接)
server.xml 文件中定义的用户名
明文密码
这里我们是配置前端,用户名为test,密码为test。 (前端和后端用的密码盐不一样,盐中还有用户名的成分) 传入这个参数运行主类,在控制命令行得到密文密码。 nYx8wxkKtgdPtMXIpapwbNadIWFzpse48NcO+42D1yS//1cNxxQquw07eV/7gvVpxzbjNv47t6QpChvVszKy9g==
2.2 配置用户和逻辑库与权限
<user name="root">
<!--从1.4.1开始,MyCat支持密文保存密码,这里明文密码为root -->
<property name="usingDecrypt">1</property>
<property name="password">CrjpLhvVJkHk0EPW35Y07dUeTimf52zMqClYQkIAN3/dqiG1DVUe9Zr4JLh8Kl+1KH1zd7YTKu5w04QgdyQeDw==</property>
<!--规定可以访问的逻辑库,可以配置多个,用,分割-->
<property name="schemas">schema1</property>
</user><user name="test">
<!--这里明文密码为test-->
<property name="usingDecrypt">1</property>
<property name="password">nYx8wxkKtgdPtMXIpapwbNadIWFzpse48NcO+42D1yS//1cNxxQquw07eV/7gvVpxzbjNv47t6QpChvVszKy9g==</property>
<!--对于数据库只读访问-->
<property name="readOnly">true</property>
<property name="schemas">schema1</property>
</user>
上面的注释已经很清楚,在1.5版本,用户权限更全面,并且还有ip白名单和sql黑名单的功能。
2.3 配置系统参数
<system>
<!--默认sql解析器,之后我们会仔细分析,这里设置为淘宝开源的druidparser最为高效-->
<property name="defaultSqlParser">druidparser</property>
<!--是否开启mysql压缩协议,客户端、mycat、mysql三者都启用才行,参考下面1-->
<!-- <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>-->
<!-- 指定使用Mycat全局序列的类型。0为本地文件方式,1为数据库方式。默认是使用本地文件方式,文件方式主要只是用于测试使
用。根据之前的讨论,最好还是用id生成器-->
<!--<property name="sequnceHandlerType">1</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> -->
<property name="serverPort">8066</property> <property name="managerPort">9066</property>
</system>
以下2、3、4的属性不理解不用着急,之后的源代码篇会讲述得更清楚,这里可以都不配置。
Mycat可以在server.xml中配置1启用。 客户端如果是mysql命令行,则加参数-C启用压缩协议。 客户端如果是jdbc则在jdbc的url上加上参数useCompression=true,例如:jdbc:mysql://127.0.0.1:8066 /base?useCompression=true 一般网路条件越差,性能提升越明显。
processors:这个属性主要用于指定系统可用的线程数,默认值为Runtime.getRuntime().availableProcessors()方法返回的值。主要影响processorBufferPool、processorBufferLocalPercent、processorExecutor属性。NIOProcessor的个数也是由这个属性定义的,所以调优的时候可以适当的调高这个属性。
由于每次执行NIO读、写操作都需要使用到buffer,系统初始化的时候会建立一定长度的buffer池来加快读、写的效率,减少建立buffer的时间。Mycat中有两个主要的buffer池:BufferPool和ThreadLocalPool BufferPool由ThreadLocalPool组合而成,每次从BufferPool中获取buffer都会优先获取ThreadLocalPool中的buffer,未命中之 后才会去获取BufferPool中的buffer。也就是说ThreadLocalPool是作为BufferPool的二级缓存,每个线程内部自己使用的。当 然,这其中还有一些限制条件需要线程的名字是由$_开头。然而,BufferPool上的buffer则是每个NIOProcessor都共享的。 默认这个属性的值为: 默认bufferChunkSize(4096) processors属性 1000 BufferPool的总长度 = bufferPool / bufferChunk。 若bufferPool不是bufferChunk的整数倍,则总长度为前面计算得出的商 + 1 假设系统线程数为4,其他都为属性的默认值,则: bufferPool = 4096 4 1000 BufferPool的总长度 : 4000 = 16384000 / 4096
processorExecutor属性 这个属性主要用于指定NIOProcessor上共享的businessExecutor固定线程池大小。mycat在需要处理一些异步逻辑的时候会把任务提交到这个线程池中。新版本中这个连接池的使用频率不是很大了,可以设置一个较小的值。
TCP相关参数,前端后端分别为: frontSocketSoRcvbuf 默认值: 1024 1024 frontSocketSoSndbuf 默认值: 4 1024 1024 frontSocketNoDelay 默认值: 1 backSocketSoRcvbuf 默认值: 4 1024 1024 backSocketSoSndbuf 默认值: 1024 1024 backSocketNoDelay 默认值: 1
MySql连接相关属性: packetHeaderSize : 指定Mysql协议中的报文头长度。默认4。 maxPacketSize : 指定Mysql协议可以携带的数据最大长度。默认16M。 idleTimeout : 指定连接的空闲超时时间。某连接在发起空闲检查下,发现距离上次使用超过了空闲时间,那么这个连接会被回收,就是被直接的关闭掉。默认30分钟。 charset : 连接的初始化字符集。默认为utf8。 txIsolation : 前端连接的初始化事务隔离级别,只在初始化的时候使用,后续会根据客户端传递过来的属性对后端数据库连接进行同步。默认为REPEATED_READ。 sqlExecuteTimeout:SQL执行超时的时间,Mycat会检查连接上最后一次执行SQL的时间,若超过这个时间则会直接关闭这连接。默认时间为300秒
定时任务: processorCheckPeriod : 清理NIOProcessor上前后端空闲、超时和关闭连接的间隔时间。默认是1秒。 dataNodeIdleCheckPeriod : 对后端连接进行空闲、超时检查的时间间隔,默认是60秒。 dataNodeHeartbeatPeriod : 对后端所有读、写库发起心跳的间隔时间,默认是10秒
服务相关属性: bindIp : mycat服务监听的IP地址,默认值为0.0.0.0。 serverPort : 定义mycat的使用端口,默认值为8066。就是客户端接入端口(应用接入,mysql客户端接入端口),MyCat的主要服务都是通过这个端口发出。 managerPort : 定义mycat的管理端口,默认值为9066。有很多监控命令
更多网易技术、产品、运营经验分享请点击。
相关文章:
【推荐】 BRVAH(让RecyclerView变得更高效)(1)
【推荐】 一行代码搞定Dubbo接口调用
数据库路由中间件MyCat - 使用篇(3)下篇的更多相关文章
- 数据库路由中间件MyCat - 背景篇(2)
此文已由作者张镐薪授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. MyCat的前世今生 如前文所说,Amoeba.Cobar.MyCat等属于同宗一脉.若Amoeba能继续下 ...
- 数据库路由中间件MyCat - 使用篇(1)
此文已由作者张镐薪授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 基本概念 直接介绍概念太枯燥了,还是拿个和背景篇相似的例子介绍 业务场景:客户完成下单,快递员接受并更新运单 ...
- 数据库路由中间件MyCat - 源代码篇(13)
此文已由作者张镐薪授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 4.配置模块 4.2 schema.xml 接上一篇,接下来载入每个schema的配置(也就是每个MyCat ...
- 数据库路由中间件MyCat - 使用篇(3)上篇
此文已由作者张镐薪授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 全局序列号 数据切分后,原有的关系数据库中的主键约束在分布式条件下将无法使用,因此需要引入外部机制保证数据唯 ...
- 数据库路由中间件MyCat - 源代码篇(7)
此文已由作者张镐薪授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 3. 连接模块 3.4 FrontendConnection前端连接 构造方法: public Fronte ...
- 数据库路由中间件MyCat - 源代码篇(15)
此文已由作者张镐薪授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. public static void handle(String stmt, ServerConnectio ...
- 数据库路由中间件MyCat - 源代码篇(14)
此文已由作者张镐薪授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 对于表的dataNode对应关系,有个特殊配置即类似dataNode="distributed(d ...
- 数据库路由中间件MyCat - 源代码篇(1)
此文已由作者张镐薪授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 进入了源代码篇,我们先从整体入手,之后拿一个简单流程前端连接建立与认证作为例子,理清代码思路和设计模式.然后 ...
- 数据库路由中间件MyCat - 使用篇(4)
此文已由作者张镐薪授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 配置MyCat 3. 配置conf/rule.xml 1.5GA版本中的规则配置比较笨,2.0中优化了一些, ...
随机推荐
- 【题解】P2279消防局的设立
[题解][P2279 HNOI2003]消防局的设立 又是一道贪心. 随便指定一个点为根,可以知道在覆盖了一个节点的子树的情况下,消防站越高越好.那么我们就贪心吧.\(trick\)是按深度\(pus ...
- python数据分析之:数据加载,存储与文件格式
前面介绍了numpy和pandas的数据计算功能.但是这些数据都是我们自己手动输入构造的.如果不能将数据自动导入到python中,那么这些计算也没有什么意义.这一章将介绍数据如何加载以及存储. 首先来 ...
- c# XML-Object对象 序列化-反序列化
using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Tex ...
- POJ 2063 Investment (完全背包)
A - Investment Time Limit:1000MS Memory Limit:30000KB 64bit IO Format:%I64d & %I64u Subm ...
- 51Nod 1515 明辨是非 —— 并查集 + 启发式合并
题目链接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1515 1515 明辨是非 题目来源: 原创 基准时间限制:1 ...
- 算法(Algorithms)第4版 练习 1.3.20
方法实现: //1.3.20 /** * delete the kth element in a linked list, if it exists. * * @param k the kth ele ...
- laravel基础课程---9、视图(lavarel的模板语法和tp相比怎样)
laravel基础课程---9.视图(lavarel的模板语法和tp相比怎样) 一.总结 一句话总结: lavarel的模板语法比thinkphp好用很多:和html代码配合的更好 lavarel比t ...
- 机器学习(九)—逻辑回归与SVM区别
逻辑回归详细推导:http://lib.csdn.net/article/machinelearning/35119 面试常见问题:https://www.cnblogs.com/ModifyRong ...
- linux 进程学习笔记-进程调度
在分时系统中,系统将CPU时间划分成无数个时间片(quantum)分配给不同的进程,一个时间片只执行一个进程,并且不停地切换,以让用户感觉到各个进程是在“同时运行”,这中间所需要的策略和算法便是进程调 ...
- sass与compass实战(读书笔记)
// compass create myproject // compass compile // compass compile --force 重新编译未改动的 // compass compil ...