window下使用MyCat实现简单的读写分离
参考文档
MyCat权威指南
MyCat项目主页
学会数据库读写分离、分表分库——用Mycat,这一篇就够了!
MyCat安装
Java SDK下载(必须JDK7或更高版本)
MYSQL下载 (MyCat支持多种数据库接入 如:MYSQL、SQLService、Oracle、MongDB等)
MyCat下载(选择稳定版且适合自己系统的压缩包)
MyCat目录介绍
目录 | 说明 |
---|---|
bin | 封装成服务的命令 |
catlet | mycat扩展功能 |
conf | 配置信息 |
lib | 引用的jar包 |
log | 日志文件,包括mycat启动和运行日志 |
其中着重说明下conf目录下的配置文件信息
文件 | 说明 |
---|---|
server.xml | 定义用户以及系统相关变量 |
schema.xml | 定义逻辑库,表,分片节点 |
rule.xml | 定义分片规则 |
前置
服务器 | IP | 说明 |
---|---|---|
MyCat | 127.0.0.1 | mycat服务器 |
MYSQL DB 1 | 127.0.0.1:3306 | mysql数据库 |
MYSQL DB 2 | 127.0.0.1:3307 | mysql数据库 |
mycat服务端口8806,可以通过shell或者sql管理工具来直接连接。
mycat管理端口9906,连接后可以根据命令查看mycat的运行情况。可以使用mycat-web来配置一个可视化的UI管理后台。
DB1和DB2先建立主从同步功能,DB1为主DB2为从,具体配置请参考上一节随笔。
配置信息
server.xml
<!-- 用户节点配置 -->
<!-- name:连接mycat的用户名 -->
<user name="root" defaultAccount="true">
<!-- password:连接mycat的密码 -->
<property name="password">123456</property>
<!-- 数据库名,与schema.xml中的配置关联,多个用逗号分开 -->
<property name="schemas">TESTDB</property>
<!-- 表级 DML 权限设置 -->
<!--
<privileges check="false">
<schema name="TESTDB" dml="0110" >
<table name="tb01" dml="0000"></table>
<table name="tb02" dml="1111"></table>
</schema>
</privileges>
-->
</user>
schema.xml
<!-- 数据库配置,与server.xml中的数据库对应 -->
<!--
name:逻辑数据库名,与server.xml中的schema对应
checkSQLschema:数据库前缀相关设置
sqlMaxLimit:查询时默认limit,避免全表查询
-->
<schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1">
</schema>
<!-- 分片配置 -->
<dataNode name="dn1" dataHost="localhost1" database="db01" />
<!-- 物理数据库配置 -->
<!--
minCon:指定每个读写实例连接池的最小连接,初始化连接池的大小
maxCon:指定每个读写实例连接池的最大连接。也就是说,标签内嵌套的 writeHost、readHost 标签都会使用这个属性的值来实例化出连接池的最大连接数。
dbDriver:指定连接后端数据库使用的 Driver,目前可选的值有 native 和 JDBC。从 1.6 版本开始支持 postgresql 的 native 原始协议。
balance:均衡负载方式
0:不开启读写分离机制,所有读操作都发送到当前可用的 writeHost 上
1:全部的 readHost 与 stand by writeHost 参与 select 语句的负载均衡
2:所有读操作都随机的在 writeHost、readhost 上分发
3:所有读请求随机的分发到 wiriterHost 对应的 readhost 执行,writerHost 不负担读压力
writeType:均衡负载方式
0: 所有写操作发送到配置的第一个 writeHost,第一个挂了切到还生存的第二个writeHost,重新启动后已切换后的为准,切换记录在配置文件中:dnindex.properties .
1:所有写操作都随机的发送到配置的 writeHost,1.5 以后废弃不推荐
switchType:切换方式
-1: 表示不自动切换
1:默认值,自动切换
2:基于 MySQL 主从同步的状态决定是否切换
3:基于 MySQL galary cluster 的切换机制(适合集群),心跳语句为 show status like ‘wsrep%’.
-->
<dataHost name="localhost1" maxCon="1000" minCon="10" balance="1"
writeType="0" dbType="mysql" dbDriver="native" switchType="0" slaveThreshold="100">
<!--心跳检测-->
<heartbeat>select user()</heartbeat>
<writeHost host="hostMaster" url="127.0.0.1:3306" user="root"
password="123456">
<readHost host="hostSlave" url="127.0.0.1:3307" user="root" password="123456" />
</writeHost>
</dataHost>
预期效果
开启MYSQL3306和3307服务,启动MyCat(mycat安装目录bin下,点击startup_nowrap.bat即可),使用Navicat Premium可视化管理工具,连接三者。在mycat服务端下,为表CRUD时,可看到相应的效果。
在查询时,查看mycat运行日志mycat
.log可以看到连接的是配置的读数据库3307。
INFO [$_NIOREACTOR-3-RW] (io.mycat.backend.mysql.nio.handler.NewConnectionRespHandler.connectionAcquired(NewConnectionRespHandler.java:44)) - connectionAcquired MySQLConnection [id=17, lastTime=1526867502288, user=root, schema=db01, old shema=db01, borrowed=true, fromSlaveDB=true, threadId=34, charset=utf8, txIsolation=3, autocommit=true, attachment=null, respHandler=null, host=127.0.0.1, port=3307, statusSync=null, writeQueue=0, modifiedSQLExecuted=false]
非查询语句时则操作的是数据库3306。
可使用@@port来追踪操作的是哪个库
如果您认为这篇文章还不错或者有所收获,您可以点击右下角的【推荐】按钮【精神支持】,因为这种支持是我继续写作,分享的最大动力!
作者:warren
声明:原创博客请在转载时保留原文链接或者在文章开头加上本人博客地址,如发现错误,欢迎批评指正。凡是转载于本人的文章,不能设置打赏功能,如有特殊需求请与本人联系!