之前配置了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实现读写分离的全部内容
来源:oschina
链接:https://my.oschina.net/u/2925037/blog/3217119