Windows中使用MyCat实现读写分离
一、关于MyCat
什么是MyCat?
- 一个彻底开源的,面向企业应用开发的大数据库集群 。
- 支持事务、ACID、可以替代MySQL的加强版数据库。
- 一个可以视为MySQL集群的企业级数据库,用来替代昂贵的Oracle集群。
- 一个融合内存缓存技术、NoSQL技术、HDFS大数据的新型SQL Server。
- 结合传统数据库和新型分布式数据仓库的新一代企业级数据库产品。
- 一个新颖的数据库中间件产品。
MyCat能做什么,有什么用途?
- 分库分表,把一个数据库切分成多个部分放到不同的数据库(server)上,从而缓解单一数据库的性能问题。
- 读写分离,线性的提升数据库的读性能,消除读写锁冲突从而提升数据库的写性能。
MyCat官方链接:
GitHub:https://github.com/MyCATApache/Mycat-Server
下载路径:https://github.com/MyCATApache/Mycat-download
具体下载哪个版本以发布为准,官方推荐1.4,1.5。
二、使用教程
注意:mycat不负责任何数据同步问题,因此需提前配置好mysql的主从复制数据自动同步。
MyCat三个主要配置文件,rule.xml表示分片规则、schema.xml是最主要的配置项,可配置物理数据库连接与分片等、server.xml可配置连接用户名与密码等。
1.在server.xml添加用户
在mycat:server标签下添加user
<user name="admin">
<property name="password">admin</property>
<property name="schemas">api</property>
</user>
name表示连接时用户名称,password表示连接密码,api表示schema.xml中名为api的schema标签配置,同时也是数据库名称。
2.在schema.xml中配置'api'
<!-- 数据库配置,与server.xml中的数据库对应 -->
<schema name="api" checkSQLschema="false" dataNode="apiNode"></schema>
<!-- 分片配置 -->
<dataNode name="apiNode" dataHost="apiHost" database="api" />
<!-- 物理数据库配置 -->
<dataHost name="apiHost" maxCon="1000" minCon="10" balance="1" writeType="0" dbType="mysql" dbDriver="native">
<heartbeat>select user();</heartbeat>
<writeHost host="apiWriteHost" url="127.0.0.1:3306" user="root" password="root">
<readHost host="apiReadHost" url="127.0.0.1:3307" user="root" password="root"></readHost>
</writeHost>
</dataHost>
schema中的name是数据库名称
sqlMaxLimit配置默认查询数量 。
database为真实数据库名 。
balance="0", 不开启读写分离机制,所有读操作都发送到当前可用的writeHost 上。
balance="1",全部的 readHost 与 stand by writeHost 参与 select 语句的负载均衡。
balance="2",所有读操作都随机的在 writeHost、 readhost 上分发。
balance="3", 所有读请求随机的分发到 wiriterHost 对应的 readhost 执行,writerHost 不负担读压力,注意 balance=3 只在 1.4 及其以后版本有, 1.3 没有。
writeType="0", 所有写操作发送到配置的第一个 writeHost,第一个挂了切到还生存的第二个writeHost,重新启动后已切换后的为准,切换记录在配置文件中:dnindex.properties 。
writeType="1",所有写操作都随机的发送到配置的 writeHost。
3.Mycat启动
点击bin/mycat.bat,安装mycat服务
启动服务,默认端口8066。
4.用Mysql客户端连接Mycat,并写入数据
用户名和密码就是在server.xml中配置的数据。
在MyCat连接中插入一条数据:
查看3306库中的api_user表:
查看3307库中的api_user表:
有一个需要注意的是,主节点(写库)宕机时,读节点也不能读。