Mycat的读写分离试用
背景
目前项目数据采用了阿里云的RDS,同时采用了他的读写实例。因此原有的项目没有支持程序上的读写分离,因此只能采用中间件来过渡
资源下载:
访问MyCat官网:www.mycat.io/
下载当前最新稳定版本Mycat,地址为:dl.mycat.io/1.6-RELEASE…
可以直接在您所在的服务器执行以下下载命令:
解压文件:
tar zxf Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz
配置实操
读写分离配置:(主要需要修改两个配置文件schema.xml和server.xml )
cd mycat/conf/
可以使用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/
在此目录直接执行 ./mycat --help 查看支持的命令
运行mycat 直接执行 ./mycat start
mycat有两个端口,一个是8066,一个是9066,其中9066是管理端口,8066是数据端口,我之前一直登录管理端口,show tables;时不能成功执行,后来才发现登录8066才行。
使用客户端工具连接:
接下来就可以做与访问mysql一样的SQL执行操作了,可以自己验证下读写分离是否生效