经过志愿者们几个月默默奋战,在大家热切的期盼中,Mycat1.5终于要面世了。那么Mycat1.5到底有哪些重大改进呢,下面就罗列几点重要特性与大家分享:
1、首次支持基于Galera 集群的状态检测同步切换机制,当集群节点有故障后,自动排查;
2、首次引入Zookeeper,可视化管理等重要功能;
3、IP白名单,SQL黑名单,数据库账号密码加密等;
4、修复重要缺陷:在LVS等前端负载均衡器模式下,与Mycat频繁建立连接和关闭,长期运行后,可能导致连接Id的整数越界,产生无法连接的问题 ;
5、心跳线程在遇到连接需要同步的情况下,发生连接同步错误,导致断开的异常,但不影响心跳检测结果 ;
6、SQL指定到分片执行;
7、改进reload @@config , Reload all config from file可能卡死BUG;
8、官方提供All-In-One镜像。。
总之,Mycat1.5带来性的改变,而且一直在改变。。
1.5 changelog
该文档记录的是 mycat-server 1.4(2015-10-19)->1.4.1(2015-12-07-1)版本
新增功能(命令/功能) --> 其中命令给出具体的命令参数说明,及应用场景;
--> 功能给出案例,使用方法步骤
新增 show @@sysparam指令(完成)
新增 load data 对转义字符的支持
新增 可以循环使用的日期分片规则
新增 慢 SQL 监控功能-- show @@sql.slow ; 命令
新增 归并监控的SQL
增加 远程查看日志的指令, 例:show @@syslog limit=10
该命令用于 9066 管理端口,用来在客户端显示系统日志信息;
limit 后接数值是用来限定最多显示日志的条数
新增 读写权重配置
增加 心跳曲线监控功能,并对心跳时间精度做出调整
新增 主从同步监控功能
新增 集群心跳检测功能
新增 syslog 指令说明的 help 显示
增加 用户(mycat user)服务降级的配置及测试功能
增加 prepare 记录
增加 记录 connection 前一次执行 sql 语句功能
新增功能 将 Zookeeper 上保存的数据写入本地 XML 文件中,XML 文件有 server.xml , schema.xml , rule.xml
新增功能 可在写服务操作挂掉之后,读服务依然可用
【eye--eye文档中有介绍】新增统计服务功能, 根据用户统计 SQL 的执行情况给出 {1, R/W ; 2, SLOW TOP 10 , 3. 时段,耗时 的直方图}
新增 命令 show @@sql @@sql.sum @@sql.slow 统计数据重置;
新增 reload@@user_stat 指令
新增 sql hint 通过 datanode 路由
新增 在 sql.sum 统计中增加了并发数,显示字段名重构
在 DTD 中新增加了 tempReadHostAvailable 定义
新增 Zookeeper 配置文件的上传下载功能
新增 explan2 命令,通过 datanode 获取物理节点的 SQL 解析
新增默认节点的 showtable 命令
新增提交 IP 白名单和密码加密功能
新增 table 级别的统计分析功能,如 R/W 关联表
新增 对 show @@help 指令支持
新增对 mysql jdbc 5.1.37 的支持
新增 sql 黑名单功能
新增 高频 SQL 分析功能
新增加 对无用的 SQL 语句进行过滤,仅支持 CURD 语句 功能
修复的 ISSUE -->重现出现问题场景
--> 给出修复之后的使用方法示例
修复并改进loaddata语句对不同字符集时的支持
修复 explain 显示缺陷
修复 tempSchema 空指针错误
修复 PHP 字符集设置错误, 如 set names 'utf8'
修复分析定位跨分片处理时,主动关闭后端导致的 bug
修复分页无效遍历
修复update别名路由错误的bug
修复 DDL路由BUG
修复执行 DDL 语句,中间件会将结构转为大写的方式执行的 BUG
修复 CREATE/DROP INDEX功能
(测试用例修复)修复测试用例 DDLRouteTest 2 个测试用例不通过的问题
修复优化 order 漏判断 limitsize=-1 功能
修复排序问题
修复集群中多主监控未获取到数据问题
修复 limit -1 返回控制 bug
修复 zkcreate 1.8 方法问题
修复 switchtype=-1 的时候,重启mycat 导致自动切换的问题
修复 5.1.35 show 语句误判问题
修改bufferpool的单位为long
1.5重要功能修复
修复并改进loaddata语句对不同字符集时的支持
修复 explain 显示缺陷
修复 tempSchema 空指针错误
修复 PHP 字符集设置错误, 如 set names 'utf8'
修复分析定位跨分片处理时,主动关闭后端导致的 bug
修复分页无效遍历
修复update别名路由错误的bug
修复 DDL路由BUG
修复执行 DDL 语句,中间件会将结构转为大写的方式执行的 BUG
修复 CREATE/DROP INDEX功能
(测试用例修复)修复测试用例 DDLRouteTest 2 个测试用例不通过的问题
修复优化 order 漏判断 limitsize=-1 功能
修复排序问题
修复集群中多主监控未获取到数据问题
修复 limit -1 返回控制 bug
修复 zkcreate 1.8 方法问题
修复 switchtype=-1 的时候,重启mycat 导致自动切换的问题
修复 5.1.35 show 语句误判问题
修改bufferpool的单位为long
1.5启动方式
1.5会支持本地xml启动,以及从zk加载配置转为本地xml的两种方式,conf下的zk.conf文件里设置loadfromzk参数默认为false
如果没有这个文件,或者没有loadfromzk为true的参数,即从本地加载。下面介绍从ZK启动相关配置。
1.5新特性
ZK启动
环境准备
1 JDK环境要求
Mycat,mycat eye依赖jdk1.7+环境,jdk下载地址为:
http://www.oracle.com/technetwork/java/javase/downloads/
2 Zookeeper环境要求
下载zookeeper-3.4.6.jar(http://zookeeper.apache.org/releases.html),上传到服务器,然后解压:tar zxvf zookeeper-3.4.6.tar.gz
之后进入zookeeper目录:cd zookeeper-3.4.6,配置zk启动文件:
Zk-create.yaml说明
1.5正式引入zookeeper(以下简称zk)管理Mycat-Server,启动server第一步是初始化zk数据,下面介绍初始化zk数据步骤,信息在zk-create.yaml。Mycat ZK配置文件详解:https://github.com/MyCATApache/Mycat-doc/blob/master/%E8%AE%BE%E8%AE%A1%E6%96%87%E6%A1%A3/2.0/Mycat%20ZK%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6%E8%AF%A6%E8%A7%A3.docx
1、zk-create总体结构
2、参数说明
2.1、zkURL,zk连接地址
2.2、mycat-cluster
2.3、mycat-hosts
2.4、mycat-zones
2.5、mycat-nodes
2.6、mycat-mysqls
2.7、mysql-reps
Zk初始化
1、进入MYCAT/bin目录
cd /data/test1/mycat/bin
2、修改MYCAT/conf/zk-create.yaml内容
3、启动ZK
启动ZK:bin/zkServer.sh start
登陆ZK:bin/zkCli.sh
4、初始化ZK数据
sh create_zookeeper_data.sh
等待执行结束后,检查ZK数据
5、检查ZK数据
OK,数据初始化成功。
可视化管理
1安装环境要求
1.1 JDK环境要求
Mycat,mycat eye依赖jdk1.7+环境,jdk下载地址为:
http://www.oracle.com/technetwork/java/javase/downloads/
1.2 Zookeeper环境要求
Mycat eye 需要Zookeeper作为配置中心
zookeeper-3.4.6.tar.gz
1.2 Zookeeper配置
1.解压 zookeeper-3.4.6.tar.gz;
2.zookeeper-3.4.6\\conf 目录下把 zoo_sample.cfg修改为 zoo.cfg;
3.启动zookeeper
Windowns操作系统启动命令:zookeeper-3.4.6\\bin\\zkServer.bat
Linux操作系统启动命令:zookeeper-3.4.6\\bin\\zkServer.sh start
2 Mycat eye环境部署
2.1 软件清单
Windowns版本:
Mycat-web-1.0-SNAPSHOT-20151208180035-win.zip
Linux版本:
Mycat-web-1.0-SNAPSHOT-20151208180035-linux.tar.gz
下载地址:https://github.com/MyCATApache/Mycat-download/tree/master/mycat-web-1.0
2.2 运行
1:解压
加压后生成mycat-web目录,目录结构如下:
2:先启动zookeeper;
3:然后启动mycat eye
Windowns版本:
start.bat
Linux版本:
start.sh
2.3 访问mycat eye
访问地址:http://localhost:8082/mycat/
2.3 mycat.properties配置
方法1:如果zookeeper连接不上
可以修改mycat-web\\mycat-web\\WEB-INF\\classes\mycat.properties配置文件
zookeeper=127.0.0.1:2181
配置下zookeeper的服务器和端口
方法2:访问http://localhost:8082/mycat/
点击注册中心-配置
输入Zookeeper的IP地址和端口即可。
3 Mycat配置说明
Mycat主要是维护mycat节点和mycat jmx信息,有四个菜单
3.1 Mycat服务管理
列表
显示所有管理的mycat服务,如下图所示:
新增
新增一个mycat服务,包括名称,IP,端口,数据库名称,用户名和密码
3.2 Mycat VM管理
列表
显示所有管理的mycatVM服务
新增
新增一个mycatVM服务,包括名称,IP,端口,用户名和密码
3.3 Mycat系统参数
查询mycat服务的系统参数
条件:选择3.1中的mycat服务
Mycat server命令行输入:
show @@sysparam
Mycat系统参数总共有1,如下图:
3.2 Mycat日志管理
查询Mycat最新的日志,默认显示50条
Mycat server命令行输入:
show @@syslog limit=50
4 Mycat监控
Mycat-eye中的mycat性能监控、JVM监控中的监控图是基于jrds实现;
1.实现步骤:
1.1通过mycat服务管理创建一个mycat监控服务。同时会基于freemark模板引擎生成
Jrds配置信息。目前默认指定路径为:WEB-INF\\jrdsconf\\hosts录下。
1.2在通过点击【mycat性能监控】菜单时,页面会调用jrds提供的/reload。加载WEB-INF\\jrdsconf\\hosts下的*.xml如:D_127.0.0.1_9066.xml文件。
通过调用/graph/hostMycatList?hostprefix=D 加载监控列表hostprefix为hosts下的文件名称前缀。
4.1 Mycat性能监控
条件:选择3.1中的mycat服务,包括:
Mycat流量分析
Mycat连接分析
Mycat活动线程分析
Mycat缓冲队列分析
MycatTPS分析
Mycat内存分析
如图所示:
4.2 Mycat JVM性能监控
1)JVM监控需要在Mycat Server中配置启动参数:
-XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:+UseCMSCompactAtFullCollection -XX:CMSFullGCsBeforeCompaction=0 -XX:CMSInitiatingOccupancyFraction=70 -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=99 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false
或者直接用配置好的startup_nowrap.bat
2)选择3.2中管理的JVM
4.2 Mycat 物理节点
1)选择3.1中管理的Mycat,自动查询出mysql节点信息
2)心跳曲线
4.2 Mycat 主从同步监控
1)选择3.1中管理的Mycat,自动查询出mysql主从节点信息
监控mysql的主从同步曲线
5 SQL监控
SQL监控,主要是监控和分析SQL语句
5.1 SQL统计
按用户统计SQL读写比例,时间分布耗时。
Mycat server命令行输入:
show @@sql.sum
如图所示:
5.2 SQL表统计
统计表的读写比例,表之间的关系;
Mycat server命令行输入:
show @@sql.sum.table
如图所示:
5.3 SQL监控
监控业务系统执行的SQL语句,默认50条;
Mycat server命令行输入:
show @@sql
如图所示:
5.4 高频SQL
SQL进过归并,统计执行频率高的SQL语句;
Mycat server命令行输入:
show @@sql.high
如图所示:
5.5 慢SQL统计
默认查询耗时1000ms的SQL语句,
Mycat server命令行输入:
show @@sql.slow
如图所示:
5.6 SQL解析
解析SQL语句,分2步执行;
第一步:explain
解析SQL语句的路由信息
第二步:explain2 datanode = dn1 sql =
制定节点,然后到mysql服务器执行
Explain命令
Mycat server命令行输入:
第一步:explain select * from t_sys_log;
第二步:explain2 datanode = dn1 sql = SELECT * FROM t_sys_log LIMIT 10000
如图所示:
权限管理--密码加密
在 Mycat-1.4.1 版本中为用户登录所使用的登录密码提供了加密功能;目前支持的加密方式有两种,分别是前段加密和后端加密。
在这简单介绍前段加密和后端加密的区别:
前段加密是对mycat用户登录到 Mycat-Server 所需要输入的密码进行加密 ;
而后端加密则是指,Mycat-Server 中的 dataHost {dataHost 是mycat逻辑库中最底层的,与具体的数据库实例一一对应}
访问后端数据库实例的时候的所需登录密码进行加密;
不过,无论是前段加密还是后端加密,加密功能的开启都与 usingDecrypt 这个属性值的设定相关;
如果将 usingDecrypt 属性值设定为 1 , 则说明开启前(或后)端加密;
如果将 usingDecrypt 属性值设定为 0 , 则说明关闭前(或后)端加密;
同样,无论前后端加密登录,基本流程都是,
开启密码加密功能; 执行 java 命令对密码进行加密操作; 将生成的加密序列拷贝到 server.xml ;
用户密码子标签中; 根据开启加密功能的用户名称和未加密密码来远程登录服务器端, 上述这几个步骤
1前端加密
这里我们设定用户名称为 userA ,因为对密码进行加密,所以,在这里不需要在 password ,仅需要设定用户名称和通过将 usingDecrypt 属性值置为 1 来开启加密功能即可: ### 配置文件 server.xml 的配置如下 ### 开启加密功能的 Mycat-Server 启动方式 2 后端加密 后端加密是对 dataHost 到后端数据库登录密码进行加密,所以,我们需要配置的是 schema.xml 这个配置文件 #1. 编写 schema.xml 配置文件,具体配置如下所示: 在上述的配置文件中,我们创建了一个名为 userB 向数据库实例执行写操作的 host ,并且该 host 连接到后端数据库实例的时候, 通过 usingDecrypt 参数设定为 1 来开启对密码加密的功能 #2. 运行 java 命令,来对密码加密生成加密序列数(目录路径同上为 ../mycat-1.4.1-dev/mycat/lib 路径下面) #3. 将生成的密文密码用来完善 schema.xml 配置文件,具体配置如下图所示: #4. 运行bin 目录下面的启动脚本来启动 Mycat-Server #5. 在成功启动 Mycat-Server 之后,开启新窗口,既可以前端加密的方式来登录,也可以设定明文密码的方式来登录, 权限管理—IP白名单 /SQL黑名单 IP白名单和SQL黑名单说明: ------------------- ip白名单------------------- ----------------------------黑名单允许的 权限 后面为默认-------------------------------------- 配置项 selelctAllow selectAllColumnAllow selectIntoAllow deleteAllow updateAllow insertAllow replaceAllow mergeAllow callAllow setAllow truncateAllow createTableAllow alterTableAllow dropTableAllow commentAllow noneBaseStatementAllow multiStatementAllow useAllow describeAllow showAllow commitAllow rollbackAllow 如果把selectIntoAllow、deleteAllow、updateAllow、insertAllow、mergeAllow都设置为false,这就是一个只读数据源了。 拦截配置-永真条件 配置项 selectWhereAlwayTrueCheck selectHavingAlwayTrueCheck deleteWhereAlwayTrueCheck deleteWhereNoneCheck updateWhereAlayTrueCheck updateWhereNoneCheck conditionAndAlwayTrueAllow conditionAndAlwayFalseAllow conditionLikeTrueAllow 其他拦截配置 配置项 selectIntoOutfileAllow selectUnionCheck selectMinusCheck selectExceptCheck selectIntersectCheck mustParameterized strictSyntaxCheck conditionOpXorAllow conditionOpBitwseAllow conditionDoubleConstAllow minusAllow intersectAllow constArithmeticAllow limitZeroAllow 禁用对象检测配置 配置项 tableCheck schemaCheck functionCheck objectCheck variantCheck readOnlyTables 新增IP登陆功能,与mysql账号授权指定IP段类似,下面介绍用法。 在server.xml添加信任IP /SQL黑名单 示例: 只允许xx IP的主机登陆,并且不允许执行SELECT *操作 使用指定主机登陆,执行SELECT *,被执行 使用主机列表以外IP登陆,被登陆 show系统参数 <所在端口号,功能,参数,示例> ++-- 命令: show @@sysparam 端口号:9066 功能: 该命令工作在 9066 端口,用来向用户展示处于工作状态的 Mycat-Server 的各项系统参数 参数: 无参数 示例: ### 使用 show @@help 可显示 show @@sysparam 使用说明 show系统日志 ++-- 命令: show @@syslog limit 端口号:该命令工作在 9066 端口,用来在客户端命令窗口显示系统日志信息, 参数: limit= 后接正整数,该数值用来限定每次最多显示的日志条数 示例: Sql/SlowSql/SqlNum 统计命令 1、清除缓存 命令: reload@@user_stat 端口号: 该命令工作在 9066 端口,用来将客户端执行 show @@sql ; show @@sql.sum ; show @@slow.success ; 命令之后所缓存的信息清空; 参数: 无参数 2、Sql 统计示例 示例: ++-- 命令: show @@sql ; 端口号: 该命令工作在 9066 端口,用来记录用户通过本地 8066 端口向 Mycat-Server发送的 SQL 请求执行信息 参数: 无参数 示例: ++-- 命令: show @@sql.slow ; 端口号: 该命令工作在 9066 端口,是用来将用户通过 8066 端口向Mycat-Server 发送的请求执行 SQL 语句中超过慢 SQL 时间阈值的 参数: 无参数 示例: ++-- 命令: show @@sql.sum ; 端口号: 该命令工作在 9066 端口,是用来向用户展示本地 8066 号端口上执行的 SQL 命令的统计信息数据 参数: 无参数 示例: 读写权重配置 后端jdbc设置事务隔离级别 写服务操作挂掉之后,读服务依然可用 新增 explan2 命令 Explain2 datanode=? Sql=? galara集群支持 负载均衡类型,目前的取值有3种: 1. balance="0", 不开启读写分离机制,所有读操作都发送到当前可用的writeHost上。 2. balance="1",全部的readHost与stand by writeHost参与select语句的负载均衡,简单的说,当双主双从模式(M1->S1,M2->S2,并且M1与 M2互为主备),正常情况下,M2,S1,S2都参与select语句的负载均衡。 3. balance="2",所有读操作都随机的在writeHost、readhost上分发。 4. balance="3",所有读请求随机的分发到wiriterHost对应的readhost执行,writerHost不负担读压力,注意balance=3只在1.4及其以后版本有,1.3没有。 writeType属性 负载均衡类型,目前的取值有3种: 1. writeType="0", 所有写操作发送到配置的第一个writeHost,第一个挂了切到还生存的第二个writeHost,重新启动后已切换后的为准,切换记录在配置文件中:dnindex.properties . 2. writeType="1",所有写操作都随机的发送到配置的writeHost。 3. writeType="2",没实现。 switchType属性 - -1 表示不自动切换 - 1 默认值,自动切换 - 2 基于MySQL主从同步的状态决定是否切换 心跳语句为 show slave status - 3基于MySQL galary cluster的切换机制(适合集群)(1.4.1) 心跳语句为show status like ‘wsrep%’