2022-10-27 454
什么是MyCat
MyCat是一个开源的分布式数据库中间件,是一个实现了MySQL协议的服务器,前端用户可以把它看作是一个数据库代理,用MySQL客户端工具和命令行访问,而其后端可以用MySQL原生协议与多个MySQL服务器通信,也可以用JDBC协议与大多数主流数据库服务器通信,其核心功能是分表分库,即将一个大表水平分割为N个小表,存储在后端MySQL服务器里或者其他数据库里。
MyCat通过定义表的分片规则来实现分片,每个表格可以捆绑一个分片规则,每个分片规则指定一个分片字段并绑定一个函数,来实现动态分片算法。
测试MySQL分布式集群架构
本次测试环境部署集群架构为MyCat 1.6.5(2个节点)+MySQL 8.0.11(5个节点)。
MySQL节点安装与配置
首先在5个数据库节点中安装MySQL 8.0.11,参考MySQL的官方文档,8.0.11的安装与5.7安装基本上是一样的。安装MySQL软件后,每个MySQL数据库都创建一个数据库名称为szabm。篇幅所限,MySQL的安装和配置过程就此略过。
但是值得注意的是,使用参考常规方法安装完数据库,其中最重的一个配置是“lower_case_table_names=1”,表示不区分大小写。如果不配置该参数,容易由于大小写问题而找不到表。
安装Java
1、下载软件
从Java的官网下载Java的二进制包,本次下载的版本是jdk-8u152-linux-x64.tar.gz。
注:必须JDK7或更高版本。
2、解压软件
使用tar命令解压上传好的二进制软件包,为了方便管理,创建一个Java的软链接。
tar-xzvfjdk-8u152-linux-x64.tar.gz ln-sjdk1.8.0_152java
3、配置Java环境变量
参考实际的Java安装目录,配置环境变量,如下仅供参考。
exportJAVA_HOME=/gpdb/java exportPATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH exportCLASSPATH=.:$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.gz ln-smysql-8.0.11-linux-glibc2.12-x86_64mysql
3、配置MySQL环境变量
MySQL客户端的环境变量,只需要配置bin目录路径即可。
export PATH=$PATH:$/gpdb/mysql/bin
MyCat软件安装
1、下载软件
从MyCat的官网下载MyCat软件,本次使用的是很久之前下载的MyCat 1.6.5版本。
2、解压软件
使用tar命令解压软件,解压之后,直接在当前目录生成一个MyCat的目录。
tar -xzvf MyCat-server-1.6.5-release-20180122220033-linux.tar.gz
3、配置环境变量
运行MyCat需要配置MYCAT_HOME环境变量,和bin目录。
exportMYCAT_HOME=/gpdb/MyCat exportPATH=$PATH:$MYCAT_HOME/bin
4、启动MyCat
1)启动MyCat
使用MyCat start命令启动MyCat服务。MyCat默认为服务端口是8066,管理端口是9066。
MyCat start
执行完成在$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.org INFO|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:WARNPleaseinitializethelog4jsystemproperly. INFO|jvm1|2018/07/0218:20:06|log4j:WARNSeehttp://logging.apache.org/log4j/1.2/faq.html#noconfigformoreinfo. INFO|jvm1|2018/07/0218:20:10|MyCatServerstartupsuccessfully.seelogsinlogs/MyCat.log
2)启动遇到的问题
本次测试中遇到启动MyCat失败,提示内存参数存在问题。于是进入到$MYCAT_HOME/conf目录下,找到wrapper.conf文件,找到内存的相关参数。
2018-06-2914:53:02.257INFO[WrapperSimpleAppMain](io.MyCat.MyCatServer.startup(MyCatServer.java:329))-Startupprocessors...,totalprocessors:32,aiothreadpoolsize:64 eachprocessallocatedsocketbufferpoolbytes,apagesize:2097152apage'schunknumber(PageSize/ChunkSize)is:512bufferpage'snumberis:640 2018-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,managerPort=9066,charset=utf8,processors=32,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.MyCat.MyCatStartup.main(MyCatStartup.java:62))-2018-06-2914:53:03startuperror java.lang.NumberFormatException:Sizemustbespecifiedasbytes(b),kibibytes(k),mebibytes(m),gibibytes(g),tebibytes(t),orpebibytes(p).E.g.50b,100k,or250m. Failedtoparsebytestring:-375809638B atio.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=4096
MyCat配置文件
1、MyCat配置文件说明
MyCat的配置文件全部存储在$MYCAT_HOME/conf目录下,主要是3个文件,全部采用xml格式编写。
注:配置文件修改,需要重启MyCat或者通过9066端口reload。
2、MyCat配置文件架构
MyCat配置文件变更
1、变更MyCat端口
MyCat的默认服务端口是8066,为了保证与MySQL的常用端口保持一致,本次测试中将端口变更为3306。特别注意的是在server.xml配置文件,这一段的配置是注释的,因此无论如何更改端口号,不除掉注释是不会生效的。本次测试中直接将服务端口号复制出来新增一行。
<!-- <propertyname="serverPort">3306</property><propertyname="managerPort">9066</property> <propertyname="idleTimeout">300000</property><propertyname="bindIp">0.0.0.0</property> <propertyname="frontWriteQueueSize">4096</property><propertyname="processors">32</property>-->
本次采用在server.xml文件新增一行参数配置。
<propertyname="serverPort">3306</property><propertyname="managerPort">9066</property>
2、增加MyCat用户
登陆MyCat的用户都是存储在server.xml配置文件的尾部,最好的办法是直接复制一个用户,然后进行相关变更。
参考如下:
<username="test"> <propertyname="password">123456</property> <propertyname="schemas">szabm</property> <propertyname="readOnly">false</property> </user>
本次新增了个test用户,密码是“123456”,能够访问的数据库是“szabm”,具有读写权限。这里用户访问的数据库必须在schema.xml文件中配置。
3、增加MyCat数据库
MyCat中的数据库一般通称为逻辑数据库,一般建议与后端的MySQL数据库实际名称保持一致。server.xml用户配置的逻辑数据库必须与schema.xml中的逻辑数据库保持一致。在启动MyCat是会自动进行检查,必须保持一致。
本次在测试在schema.xml配置了1个szabm的逻辑数据库,包含4个测试表(abm_acct_balance,abm_counter,abm_realtime_fee,abm_resource_present,表名必须与后端的MySQL数据库实际表名保持一致)。每个表存储在5个数据节点(ceph3,ceph4,ceph5,ceph6,ceph7),每个表一个分片规则。
<schemaname="szabm7"checkSQLschema="false"sqlMaxLimit="100"> <!--autoshardingbyid(long)--> <tablename="abm_acct_balance"dataNode="ceph3,ceph4,ceph5,ceph6,ceph7"rule="abm_acct_balance-rule"/> <tablename="abm_counter"dataNode="ceph3,ceph4,ceph5,ceph6,ceph7"rule="abm_counter_rule"/> <tablename="abm_realtime_fee"dataNode="ceph3,ceph4,ceph5,ceph6,ceph7"rule="abm_realtime_fee_rule"/> <tablename="abm_resource_present"dataNode="ceph3,ceph4,ceph5,ceph6,ceph7"rule="abm_resource_present_rule"/> </schema>
4、增加MyCat数据节点
MyCat中的数据节点就是逻辑的数据存储节点,表与数据节点之间为1对多的关系。每个逻辑节点对应一个后端的逻辑主机和实际数据库,即逻辑节点,逻辑主机,实际数据库之间全部为一一对应的关系,数据库名称为同一个,是后端MySQL数据库的实际数据库名称。
本次的测试参考节点如下:
<dataNodename="ceph3"dataHost="ceph3db"database="szabm"/> <dataNodename="ceph4"dataHost="ceph4db"database="szabm"/> <dataNodename="ceph5"dataHost="ceph5db"database="szabm"/> <dataNodename="ceph6"dataHost="ceph6db"database="szabm"/> <dataNodename="ceph7"dataHost="ceph7db"database="szabm"/>
本次配置了5个逻辑数据节点,对应5个逻辑主机,对应的是后端同一个数据库szabm7。
5、增加MyCat分片规则
MyCat的分片规则,表明该表按什么算法规则进行分节点数据存储。现在MySQL支持多种的分片规则,本次的分片规则采用最简单的求模取余。
<tableRulename="abm_acct_balance-rule"> <rule> <columns>ACCT_BALANCE_ID</columns> <algorithm>mod-long_abm</algorithm> </rule> </tableRule> <tableRulename="abm_counter_rule"> <rule> <columns>COUNTER_ID</columns> <algorithm>mod-long_abm</algorithm> </rule> </tableRule> <tableRulename="abm_realtime_fee_rule"> <rule> <columns>SUBSID</columns> <algorithm>mod-long_abm</algorithm> </rule> </tableRule> <tableRulename="abm_resource_present_rule"> <rule> <columns>RESOURCE_ID</columns> <algorithm>mod-long_abm</algorithm> </rule> </tableRule> <functionname="mod-long_abm"class="io.MyCat.route.function.PartitionByMod"> <!--howmanydatanodes--> <propertyname="count">5</property> </function>
MyCat服务验证
1、检查MyCat服务的端口状态
在使用MySQL客户端登陆验证之前,可以先检查MyCat的服务端口和管理端口是否存在。
参考命令如下:
netstat-an|grep8066 netstat-an|grep9066
2、使用MySQL客户端连接MyCat服务
可以使用MySQL客户端连接MyCat服务,特别注意端口是8066。
参考命令如下:
mysql-uuser-puser-h127.0.0.1-P8066
原文链接:https://77isp.com/post/10598.html
=========================================
https://77isp.com/ 为 “云服务器技术网” 唯一官方服务平台,请勿相信其他任何渠道。
数据库技术 2022-03-28
网站技术 2022-11-26
网站技术 2023-01-07
网站技术 2022-11-17
Windows相关 2022-02-23
网站技术 2023-01-14
Windows相关 2022-02-16
Windows相关 2022-02-16
Linux相关 2022-02-27
数据库技术 2022-02-20
抠敌 2023年10月23日
嚼餐 2023年10月23日
男忌 2023年10月22日
瓮仆 2023年10月22日
簿偌 2023年10月22日
扫码二维码
获取最新动态