前言
上篇我们讲了mysql主从复制配置,这篇接着讲使用mycat实现读写分离。
环境准备
首先我们先去mycat官网下载最新的安装包,这边我下载的是这个
解压后我们会得到这样的目录结构
我们这边重点关注下conf文件夹里的东西。这里面有3个文件比较重要,分别是rule.xml、schema.xml和server.xml。其中rule.xml主要是分片规则,今天的读写分离不需要他,不再详细讲解,有兴趣可自行百度。
server.xml
server.xml是mycat对外的“虚拟数据库”配置文件,虚拟数据库”的意思是对于客户端程序来说,mycat跟mysql没什么两样,客户端访问mycat和访问mysql是一样的,客户端通过访问mycat,然后mycat分发到各个mysql节点。这样的好处是可以不用修改代码轻松实现读写分离。
我们打开server.xml文件,直接拉到最底下,可以发现有如下配置
这边我们可以看到这些主要是设置这个虚拟数据库的账号密码,我们设置成如下:
这边也可以设置防火墙白名单,具体注释都有,不再说明。
schema.xml
这个文件主要是逻辑库,表、分片节点及与物理库的映射关系,这边直接修改成如下内容:
<?xml version="1.0"?> <!DOCTYPE mycat:schema SYSTEM "schema.dtd"> <mycat:schema xmlns:mycat="http://io.mycat/"> <!-- name:定义逻辑库名字(通过mycat访问看到的数据库名。逻辑库名和后端物理库名可能不同,也可能对应后端多个物理库。同一个实例下的物理数据库名称不能重复。同样schema的逻辑库名也不能重复) sqlMaxLimit:限制每次查询数据所返回的最大行数(server.xml中的limit是整个mycat系统的默认值,这里则是当前逻辑库的默认值,默认先看schema.xml的限制数 -1表示不限制) dataNode:在schema里指定了dataNode后这个逻辑库就不能工作在分库分表模式下了,只能用来读写分离,此时<schema></schema>里不能配置任何逻辑表信息 注意这里的name需要对应server.xml里的schemas --> <schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="-1" dataNode="xxx_db"></schema> <!-- name对应上面dataNode名称 database对应物理数据库名 --> <dataNode name="xxx_db" dataHost="localhost1" database="xxx" /> <!--参数介绍--> <!--balance 0表示所有的读操作都会发往writeHost主机 1表示所有的读操作发往readHost和闲置的主节点中--> <!--writeType=0 所有的写操作都发往第一个writeHost主机 writeType=1 所有的写操作随机发往writeHost中--> <!--dbType 表示数据库类型 mysql/oracle--> <!--dbDriver="native" 固定参数 不变--> <!--switchType=-1 表示不自动切换, 主机宕机后不会自动切换从节点--> <!--switchType=1 表示会自动切换(默认值)如果第一个主节点宕机后,Mycat会进行3次心跳检测,如果3次都没有响应,则会自动切换到第二个主节点--> <!--并且会更新/conf/dnindex.properties文件的主节点信息 localhost1=0 表示第一个节点.该文件不要随意修改否则会出现大问题--> <dataHost name="localhost1" maxCon="1000" minCon="10" balance="1" writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100"> <heartbeat>select 1</heartbeat> <!--配置第一台主机主要进行写库操作,在默认情况下Mycat主要操作第一台主机,在第一台主机中已经实现了读写分离,因为默认写操作会发往 读的操作默认发往,如果节点比较忙,则主节点分担部分压力 --> <writeHost host="hostM1" url="192.168.1.5:3306" user="xxx" password="SjcNHZh3Thx5x5WZ"> <readHost host="hostS1" url="192.168.1.8:3306" user="xxx" password="mKGm4akSTGTnirzN" /> </writeHost> <!-- 配置mysql多主多从时可以继续往下面配置,当配置switchType=1时上面节点宕机了,可以自动切换下下面节点 <writeHost host="hostM2" url="192.168.1.5:3306" user="xxx" password="SjcNHZh3Thx5x5WZ"> <readHost host="hostS2" url="192.168.1.8:3306" user="xxx" password="mKGm4akSTGTnirzN" /> </writeHost> --> </dataHost> </mycat:schema>
测试
测试就不弄了,这边可以自行测试看看