什么是MyCat?MyCat是一个开源的分布式数据库中间件。它是一个实现MySQL协议的服务器。前端用户可以将其视为一个数据库代理,使用MySQL客户端工具和命令行访问,其后端可以使用MySQL原生协议与多个MySQL服务器通信,也可以使用JDBC协议与大多数主流数据库服务器通信。它的核心功能是分表分库,即将一个大表横向分成N个小表,存储在后端MySQL服务器或其他数据库中。MyCat通过定义表的分片规则来实现分片。每个表都可以绑定一个分片规则。每个分片规则指定一个分片字段并绑定一个函数来实现动态分片算法。Schema:逻辑库,对应MySQL中的Database(数据库),一个逻辑库定义了包含的Table。表:逻辑表,即存储在物理数据库中的表。与传统数据库不同的是,这里的表需要声明它存储的逻辑数据节点DataNode。在这里可以指定表的分片规则。DataNode:MyCat的逻辑数据节点,是存储表的具体物理节点,也称为分片节点,通过DataSource关联到具体的后端数据库。DataSource:定义一个物理库的访问地址,用于绑定Datanode。分片规则:前面提到过数据分片。一个大表被分成若干个分表,需要一定的规则。这样,按照一定的业务规则把数据分成一定的分片的规则就是分片规则。数据分片选择合适的分片规则非常重要,这将大大避免后续数据处理的困难。测试MySQL分布式集群架构测试环境部署的集群架构为MyCat1.6.5(2个节点)+MySQL8.0.11(5个节点)。MySQL节点安装配置首先,在五个数据库节点上安装MySQL8.0.11。参考MySQL官方文档。8.0.11的安装与5.7基本相同。MySQL软件安装完成后,会为每个MySQL数据库创建一个名为szabm的数据库。限于篇幅,这里略过MySQL的安装配置过程。但值得注意的是,使用常规方法安装数据库后,最重要的配置是“lower_case_table_names=1”,即不区分大小写。如果不配置这个参数,很容易因为大小写问题导致找不到表。安装Java1并下载软件从Java官网下载Java的二进制包。本次下载的版本为jdk-8u152-linux-x64.tar.gz。注意:需要JDK7或更高版本。2、解压软件使用tar命令对上传的二进制软件包进行解压。为了方便管理,创建一个Java软链接。tar-xzvfjdk-8u152-linux-x64.tar.gzln-sjdk1.8.0_152java3。配置Java环境变量参考实际Java安装目录配置环境变量。以下仅供参考。exportJAVA_HOME=/gpdb/javaexportPATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATHexportCLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$CLASSPATH安装MySQL客户端1、下载软件从MySQL官网下载二进制包的软件。这次因为后端需要部署MySQL数据库,所以直接下载服务器作为客户端使用。这次下载的是mysql-8.0.11-linux-glibc2.12-x86_64.tar.gz。2、解压软件使用tar命令对上传的MySQL二进制包进行解压。为了方便管理,创建了一个MySQL软链接。tar-xzvfmysql-8.0.11-linux-glibc2.12-x86_64.tar.gzln-smysql-8.0.11-linux-glibc2.12-x86_64mysql3、配置MySQL环境变量MySQL客户端环境变量,只需要配置bin目录路径就是这样。exportPATH=$PATH:$/gpdb/mysql/binMyCat软件安装1.下载软件从MyCat官网下载MyCat软件。这次我用的是很久以前下载的MyCat1.6.5版本。2.解压软件使用tar命令解压软件。解压后会直接在当前目录下生成一个MyCat目录。tar-xzvfMyCat-server-1.6.5-release-20180122220033-linux.tar.gz3。配置环境变量要运行MyCat,需要配置MYCAT_HOME环境变量和bin目录。exportMYCAT_HOME=/gpdb/MyCatexportPATH=$PATH:$MYCAT_HOME/bin4.启动MyCat1)启动MyCat使用MyCat启动命令启动MyCat服务。MyCat默认服务端口8066,管理端口9066。MyCat启动执行完成后,进入$MYCAT_HOME目录下的logs目录,查看wrapper.log日志文件,启动成功提示如下:STATUS|wrapper|2018/07/0218:20:04|LaunchingaJVM...INFO|jvm1|2018/07/0218:20:04|Wrapper(Version3.2.3)http://wrapper.tanukisoftware.orgINFO|jvm1|2018/07/0218:20:04|Copyright1999-2006TanukiSoftware,Inc.AllRightsReserved.INFO|jvm1|2018/07/0218:20:04|INFO|jvm1|2018/07/0218:20:06|log4j:WARNNoappenderscouldbefoundforlogger(io.MyCat.memory.MyCatMemory).INFO|jvm1|2018/07/0218:20:06|log4j:WARNP请正确初始化log4j系统。INFO|jvm1|2018/07/0218:20:06|log4j:WARNS见http:///logging.apache.org/log4j/1.2/faq.html#noconfigfororeinfo.INFO|jvm1|2018/07/0218:20:10|MyCatServerstartupsuccessfully.seelogsinlogs/MyCat.log2)启动遇到的问题本次测试MyCat无法启动,说明内存p有问题参数。于是进入$MYCAT_HOME/conf目录,找到wrapper.conf文件,找到内存的相关参数。2018-06-2914:53:02.257INFO[WrapperSimpleAppMain](io.MyCat.MyCatServer.startup(MyCatServer.java:329))-启动处理器...,处理器总数:32,aiothreadpoolsize:64eachprocessallocatedsocketbufferpoolbytes,apagesize:2097152apage'schunknumber(PageSize/ChunkSize)is:512bufferpage'snumberis:6402018-06-2914:53:02.257INFO[WrapperSimpleAppMain](io.MyCat.MyCatServer.startup(MyCatServer.java:330))-sysconfigparams:SystemConfig[processorBufferLocalPercent=100,frontSocketSoRcvbuf=1048576,frontSocketSoSndbuf=4194304,backSocketSoRcvbuf=4194304,backSocketSoSndbuf=1048576,frontSocketNoDelay=1,backSocketNoDelay=1,maxStringLiteralLength=65535,frontWriteQueueSize=2048,bindIp=0.0.0.0,serverPort=8066,managerprocess=8,Portsetor=9066,processorExecutor=64,timerExecutor=2,managerExecutor=2,idleTimeout=1800000,catletClassCheckSeconds=60,sqlExecuteTimeout=300,processorCheckPeriod=1000,dataNodeIdleCheckPeriod=300000,dataNodeHeartbeatPeriod=10000,clusterHeartbeatUser=_HEARTBEAT_USER_,clusterHeartbeatPass=_HEARTBEAT_PASS_,clusterHeartbeatPeriod=5000,clusterHeartbeatTimeout=10000,clusterHeartbeatRetry=10,txIsolation=3,parserCommentVersion=50148,sqlRecordCount=10,bufferPoolPageSize=2097152,bufferPoolChunkSize=4096,bufferPoolPageNumber=640,maxResultSet=524288,bigResultSizeSqlCount=10,bufferUsagePercent=80,flowControlRejectStrategy=0,clearBigSqLResultSetMapMs=600000,defaultMaxLimit=100,sequnceHandlerType=2,sqlInterceptor=io.MyCat.server.interceptor.impl.DefaultSqlInterceptor,sqlInterceptorType=select,sqlInterceptorFile=/gpdb/MyCat/logs/sql.txt,mutiNodeLimitType=0,mutiNodePatchSize=100,defaultSqlParser=druidparser,usingAIO=0,packetHeaderSize=4,maxPacketSize=16777216,MyCatNodeId=1]2018-06-2914:53:03.319ERROR[WrapperSimpleAppMain](io.MyStarCat..main(MyCatStartup.java:62))-2018-06-2914:53:03startuperrorjava.lang.NumberFormatException:Sizemustbespecifiedasbytes(b),kibibytes(k),mebibytes(m),gibibytes(g),tebibytes(t),orpebibytes(p).例如50b,100k,or250m.Failedtoparsebytestring:-375809638Batio.MyCat.memory.unsafe.utils.JavaUtils.byteStringAs(JavaUtils.java:223)~[MyCat-server-1.6.5-release.jar:?]通过查阅相关文档,多次尝试内存参数,最终启用如下两个参数,服务启动成功。#InitialJavaHeapSize(inMB)wrapper.java.initmemory=16#MaximumJavaHeapSize(inMB)wrapper.java。maxmemory=4096MyCat配置文件1.MyCat配置文件说明MyCat配置文件都存放在$MYCAT_HOME/conf目录下,主要是3个文件,都是用xml格式写的。server.xml:MyCat服务器参数调整和用户权限配置文件。schema.xml:逻辑库定义和表分片定义的配置文件。rule.xml:分片规则的配置文件,将分片规则的一些具体参数信息单独存储为一个文件。注意:修改配置文件需要重启MyCat或者通过9066端口重新加载。二、MyCat配置文件结构MyCat配置文件修改1、修改MyCat端口MyCat默认服务端口为8066,为了与配置文件保持一致MySQL常用端口,本次测试改端口为3306。特别注意的是在server.xml配置文件中,这一段的配置是有注释的,所以无论端口号怎么改,不去掉注释是不会生效的。本次测试,直接复制服务端口号,新加一行。这次在server.xml文件中新增一行参数配置。
