基于 Mycat 实现读写分离

深渊向深渊呼唤

之前配置了MySql的主从同步,但是如果我们程序还没实现读写分离。现在可以基于Mycat实现读写分离,Mycat是一个数据库中间件,提供了Mysql分表分库和读写分离等解决方案,下面仅记录Mycat读写分离

首先Linux下载MyCat

用wget命令下载 wget http://dl.mycat.io/1.6.7.3/20190927161129/Mycat-server-1.6.7.3-release-20190927161129-linux.tar.gz

下载后解压 tar -zxvf Mycat-server-1.6.7.3-release-20190927161129-linux.tar.gz

下面是解压后的目录

进入conf文件夹可以看到下面的文件,配置读写分离我们主要使用到了schema.xml与server.xml 文件

server.xml: 主要配置Mycat服务的参数,例如端口号,Myact用户名和密码使用的逻辑数据库等

schema.xml: 主要配置数据库的信息,例如逻辑数据库名称,物理上真实的数据源以及表和数据源之间的对应关系和路由策略等。

server.xml 配置

找到user节点配置,配置用户信息,说明如下:

--name 登录Mycat的用户名

--password 登录Mycat的密码

--schemas 逻辑数据库名,用于客户端连接时候使用的数据库名,这里会和schema.xml中的配置关联,多个用逗号分开,例如需要这个用户需要管理两个数据库db01,db02,则配置db01,db02

schema.xml 配置

schema.name:关联 server.xml的 schema

schema.dataNode:Mycat的分片,可以自定义,多个用逗号隔开,有多少个dataNode 下面的dataNode标签就有多少个,且必须对应上名称

dataNode节点: 定义分片信息

dataNode.name: 当前分片的名称

dataNode.dataHost:当前分片名称,可以自定义,下面的dataHost标签的name就是该分片的dataHost

dataHost节点:当前分片物理数据库信息,就是配置我们mysql的信息

dataHost.name:当前分片的物理数据库名称

dataHost.sqlMaxLimit配置默认查询数量

dataHost.database为真实数据库名

dataHost.balance="0", 不开启读写分离机制,所有读操作都发送到当前可用的writeHost 上。

dataHost.balance="1",全部的 readHost 与 stand by writeHost 参与 select 语句的负载均衡,简单的说,当双主双从模式(M1 ->S1 , M2->S2,并且 M1 与 M2 互为主备),正常情况下, M2,S1,S2 都参与 select 语句的负载均衡。

dataHost.balance="2",所有读操作都随机的在 writeHost、 readHost 上分发。

dataHost.balance="3", 所有读请求随机的分发到 readHost 对应的 readHost 执行,writerHost 不负担读压力,

dataHost.writeType="0", 所有写操作发送到配置的第一个 writeHost,第一个挂了切到第二个writeHost,重新启动后已切换后的为准,切换记录在配置文件中:dnindex.properties .

dataHost.writeType="1",所有写操作都随机的发送到配置的 writeHost。

dataHost.writeType="2",没实现。 -1 表示不自动切换 1 默认值,自动切换 2 基于MySQL 主从同步的状态决定是否切换

因为这次只配置读写分配,不配置分表分库,所以用一个dataNode就可以了

启动Mycat

然后用Java连接Mycat,8066是Mycat的默认端口

然后用Java程序添加一条数据

主库和从库都插入了一条数据

接下来试试查询,我们先把从库的名称改一下

然后再执行Java代码,因为我上面的 dataHost.balance="3" ,所以每次读都是读取从库

以上就是这次使用Mycat实现读写分离的全部内容

栏目