MyCat数据库读写分离尝鲜

236

Mycat的读写分离试用

背景

目前项目数据采用了阿里云的RDS,同时采用了他的读写实例。因此原有的项目没有支持程序上的读写分离,因此只能采用中间件来过渡

资源下载:

访问MyCat官网:www.mycat.io/

下载当前最新稳定版本Mycat,地址为:dl.mycat.io/1.6-RELEASE…

dl.mycat.io/1.6-RELEASE…

可以直接在您所在的服务器执行以下下载命令:

wget dl.mycat.io/1.6-RELEASE…

image.png 解压文件:

tar zxf Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz

配置实操

读写分离配置:(主要需要修改两个配置文件schema.xml和server.xml )

cd mycat/conf/

image.png

可以使用nano 编辑配置文件

1、schema.xml 配置

nano schema.xml

最终配置如下:

<mycat:schema xmlns:mycat="http://io.mycat/">
 <schema name="test" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1” />
 <schema name="ice" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn2” />
 <dataNode name="dn1" dataHost="localhost1" database="test" /> 
 <dataNode name="dn2" dataHost="localhost1" database="ice" /> 
 <dataHost name="localhost1" maxCon="500" minCon="100" balance="0" writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
 <heartbeat>select user();<heartbeat>
 <writeHost host="hostM1" url="172.16.0.104:3306" user="root" password="root"> 
 <readHost host="hostS1" url="172.16.0.15:3306" user="root" password="root" /> <writeHost> <dataHost> 
 <mycat:schema>

以上配置重点说明:

主要有三个标签: dataHost、dataNode、schema

dataHost 主要用来配置数据库连接的配置参数,属性解释如下

name:数据节点的名称,可以根据需要自定义,不能重复

maxCon:mycat模拟的mysql最大连接数,类似mysql的最大连接参数

minCon:最小连接数据

balance:负载均衡类型

  • balance="0", 不开启读写分离机制,所有读操作都发送到当前可用的writeHost 上。
  • balance="1",全部的 readHost 与 stand by writeHost 参与 select 语句的负载均衡,简单的说,当双主双从模式(M1 ->S1 , M2->S2,并且 M1 与 M2 互为主备),正常情况下,M2,S1,S2 都参与 select 语句的负载均衡。
  • balance="2",所有读操作都随机的在 writeHost、 readhost 上分发。
  • balance="3", 所有读请求随机的分发到 wiriterHost 对应的 readhost 执行,writerHost 不负担读压力

注意 balance=3 只在 1.4 及其以后版本有, 1.3 没有。

wroteType:属性,负载均衡类型,目前的取值有 3 种:

  • writeType="0", 所有写操作发送到配置的第一个 writeHost,第一个挂了切到还生存的第二个writeHost,重新启动后已切换后的为准,切换记录在配置文件中:dnindex.properties
  • writeType="1",所有写操作都随机的发送到配置的 writeHost。
  • writeType="2",没实现。

switchType:切换类型,

-1 表示不切换 1 默认值,自动切换 2 基于MySQL主从同步的状态决定是否切换

dataHost 的子节点writeHost(写节点,主节点),readHost 只读节点

dataNode,数据节点配置,注意说明

name:数据节点定义,不多说,自己命名就行,不能重复

dataHost:对应的数据节点,就是上面dataHost 标签的name

database: 数据库名称,注意,这里的数据库名称需要与server.xml配置的 schemas 一致

schema 标签配置属性说明

name:自定义

checkSQLschema: 是否检验SQL,如果只是用于读写分离,直接配置为false

sqlMaxLimit:默认由mycat发起的或是转接的SQL默认最大分页数据行数,默认100,如果执行执行一条select * from tb_user的SQL语句,经过mycat 会自动添加分页参数,select * from tb_user limit 100

dataNode: 对应的数据节点,这个必须与上面的dataNode 所配置的name 一致,多个以“,”分割

2、server.xml 配置

文件中主要是两个标签的配置,

在system首先需要打开mycat的端口配置,如下几行

  <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>

user配置

<user name="mycat"> 
  <property name="password">mycat</property> 
  <property name="schemas">test,ice</property>
  <property name="readOnly">true</property> 
</user>

上面配置,user标签可以配置多个,用户名不能重复,schemas 可以配置多个,以逗号分割即可.配置好后就可以收工了

接下来直接启动mycat就可以访问了

通过cd 命令进入到mycat的启动脚本目录 cd ../bin/

image.png

在此目录直接执行 ./mycat --help 查看支持的命令

image.png 运行mycat 直接执行 ./mycat start

image.png

mycat有两个端口,一个是8066,一个是9066,其中9066是管理端口,8066是数据端口,我之前一直登录管理端口,show tables;时不能成功执行,后来才发现登录8066才行。

使用客户端工具连接:

image.png

image.png

接下来就可以做与访问mysql一样的SQL执行操作了,可以自己验证下读写分离是否生效