高性能Mysql中间组件Mycat安装配置
由于公司项目需要使用到读写分离,但是官方版本的Mysql-proxy读写分离组件太不稳定且有很多BUG,最终决定使用Mycat作为中间组件,其实读写分离只是Mycat中的一个功能,Mycat中还有分区分表等功能特性非常实用,并且还能通过Mycat-WEB进行各种监控,还是非常方便的,下面是具体的安装配置步骤。
首先去Mycat的官网:http://www.mycat.io/ 下载最新版本的Mycat或者直接使用命令下载:wget
http://dl.mycat.io/1.6.5/Mycat-server-1.6.5-release-20180122220033-linux.tar.gz,然后解压:tar -zxvf Mycat-server-1.6.5-release-20180122220033-linux.tar.gz
其实Mycat最主要的两个配置文件就是conf目录下面的server.xml和scheam.xml文件,
- <user name="mycat">
- <property name="password">mycat</property>
- <property name="schemas">mycat</property>
- </user>
- <!-- baixiong,bxyd_activity,bxyd_log,open_platform -->
- <user name="mycat1">
- <property name="password">mycat</property>
- <property name="schemas">mycat</property>
- <property name="readOnly">true</property>
- </user>
上面转配置是server.xml中的,在需要读写分离的库中先把读写用户和只读用户创建出来,然后配置scheam.xml文件,
- <?xml version="1.0"?>
- <!DOCTYPE mycat:schema SYSTEM "schema.dtd">
- <mycat:schema xmlns:mycat="http://io.mycat/">
- <!-- 设置库属性 -->
- <schema name="db1" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1"></schema>
- <schema name="db2" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn2"></schema>
- <schema name="db3" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn3"></schema>
- <schema name="db4" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn4"></schema>
- <!-- 库分片管理的节点设置,按库设置 -->
- <dataNode name="dn1" dataHost="mycat_1" database="db1" />
- <dataNode name="dn2" dataHost="mycat_1" database="db2" />
- <dataNode name="dn3" dataHost="mycat_1" database="db3" />
- <dataNode name="dn4" dataHost="mycat_1" database="db4" /> <!-- 下面是读写分离的配置 -->
- <dataHost name="mycat_1" maxCon="1500" minCon="100" balance="2"
- writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="300">
- <heartbeat>select 1</heartbeat>
- <writeHost host="bxyd_master" url="10.29.25.149:3306" user="mycat" password="Kje09u230ifbhbhxc">
- <readHost host="bxyd_slave" url="172.19.53.6:3306" user="mycat1" password="Kje09u230ifbhbhxc" />
- </writeHost>
- </dataHost>
- </mycat:schema>
配置完成后启动Mycat:../bin/mycat start,查看启动状态:../bin/mycat status
接下去我们配置Mycat-WEB,进行WEB管理控制台的监控,首先下载客户端:wget http://dl.mycat.io/mycat-web-1.0/Mycat-web-1.0-SNAPSHOT-20170102153329-linux.tar.gz,然后解压:tar -zxvf Mycat-web-1.0-SNAPSHOT-20170102153329-linux.tar.gz
在启动Mycat-WEB前必须先安装Zookeeper,因为Zookeeper是Mycat-WEB的注册中心,下载Zookeeper:wget http://dl.mycat.io/zookeeper-3.4.6.tar.gz,解压:tar -zxvf zookeeper-3.4.6.tar.gz,然后进入conf文件夹,mv zoo_smaple.cfg zoo.cfg,然后启动zookeeper:../bin/zkServer.sh start
Zookeeper启动成功后,我们开始启动Mycat-WEB:./start.sh &,启动完成后看下监听端口是否正常,lsof -i tcp:8082
一切准备就绪后我们就可以访问Mycat-WEB了,但是先确保你开了外网的8082端口,访问地址:http://localhost:8082/mycat
下面是server.xml中优化配置项的说明:
<property name="charset">utf8</property>
字符集
<property name="processors">1</property>
处理线程数量,默认是cpu数量。
<property name="processorBufferChunk">4096</property>
每次读取留的数量,默认4096。
<property name="processorBufferPool">409600</property>
创建共享buffer需要占用的总空间大小。processorBufferChunk*processors*100。
<property name="processorBufferPoolType">0</property>
默认为0。0表示DirectByteBufferPool,1表示ByteBufferArena。
<property name="processorBufferLocalPercent">100</property>
二级共享buffer是processorBufferPool的百分比,这里设置的是百分比。
<property name="sequnceHandlerType">100</property>
全局ID生成方式。(0:为本地文件方式,1:为数据库方式;2:为时间戳序列方式;3:为ZK生成ID;4:为ZK递增ID生成。
<property name="useCompression">1</property>
是否开启mysql压缩协议。1为开启,0为关闭,默认关闭。
<property name="packetHeaderSize">4</property>
指定 Mysql 协议中的报文头长度。默认 4。
<property name="maxPacketSize">16M</property>
指定 Mysql 协议可以携带的数据最大长度。默认 16M。
<property name="idleTimeout">1800000</property>
指定连接的空闲超时时间。某连接在发起空闲检查下,发现距离上次使用超过了空闲时间,那么这个连接会被回收,就是被直接的关闭掉。默认 30 分钟,单位毫秒。
<property name="txIsolation">3</property>
前端连接的初始化事务隔离级别,只在初始化的时候使用,后续会根据客户端传递过来的属性对后端数据库连接进行同步。默认为 REPEATED_READ,设置值为数字默认 3。
READ_UNCOMMITTED = 1;
READ_COMMITTED = 2;
REPEATED_READ = 3;
SERIALIZABLE = 4;
<property name="sqlExecuteTimeout">300</property>
SQL 执行超时的时间,Mycat 会检查连接上最后一次执行 SQL 的时间,若超过这个时间则会直接关闭这连接。默认时间为 300 秒,单位秒。
<property name="processorCheckPeriod">1000</property>
清理 NIOProcessor 上前后端空闲、超时和关闭连接的间隔时间。默认是 1 秒,单
位毫秒。
<property name="dataNodeIdleCheckPeriod">300000</property>
对后端连接进行空闲、超时检查的时间间隔,默认是 300 秒,单位毫秒。
<property name="dataNodeHeartbeatPeriod">10000</property>
对后端所有读、写库发起心跳的间隔时间,默认是 10 秒,单位毫秒。
<property name="bindIp">0.0.0.0</property>
mycat 服务监听的 IP 地址,默认值为 0.0.0.0。
<property name="serverPort">8066</property>
定义 mycat 的使用端口,默认值为 8066。
<property name="managerPort">9066</property>
定义 mycat 的管理端口,默认值为 9066。
<property name="fakeMySQLVersion">5.6</property>
mycat 模拟的 mysql 版本号,默认值为 5.6 版本,如非特需,不要修改这个值,目前支持设置 5.5,5.6,5.7 版本,其他版本可能会有问题。
<property name="useSqlStat">0</property>
是否开启实时统计。1为开启;0为关闭 。
<property name="useGlobleTableCheck">0</property>
是否开启全局表一致性检测。1为开启;0为关闭 。
<property name="handleDistributedTransactions">0</property>
分布式事务开关。0为不过滤分布式事务;1为过滤分布式事务;2 为不过滤分布式事务,但是记录分布式事务日志。
<property name="maxStringLiteralLength">65535</property>
默认是65535。 64K 用于sql解析时最大文本长度
以上举例的属性仅仅是一部分,可以配置的变量很多,具体可以查看SystemConfig这个类的属性内容。
System标签下的属性,一般是上线后,需要根据实际运行的情况,分析后调优的时候进行修改。