MyCat2 读写分离

 已经搭配好的主从数据库分别为:主:192.168.200.51:3306 从:mysql://192.168.200.53:3306

1.读写分离实验方案说明:

img

读写分离的基本原理是MyCat2将Update、Delete、Insert这一类写数据的请求转发到MySQL集群中的主节点,然后将Select类的读数据的请求转发到MySQL集群中的相关节点,主要是从节点。
而MySQL的主节点与从节点之间,通常会使用MySQL的主从同步机制来进行数据同步,从而保证读请求能够读取到最新的数据结果。
在这个过程中,MySQL的主从同步其实是与MyCat2无关的,接下来的实验,我们会把重点放在MyCat2的读写分离功能上,而不要太注重主从之间的数据一致性。

2、MyCat2读写分离规则配置

在新版本MyCat2中配置读写分离规则,相比MyCat会简单很多。按照以下几个步骤配置即可:

step1 登录数据客户端,配置真实数据源

真实数据源也就是实际存储数据的数据源,例如之前在prototypeDs.datasource.json文件中配置的prototypeDs也是一个真实数据源

使用注解方式添加数据源

/*+ mycat:createDatasource{ "name":"rwSepw", "url":"jdbc:mysql://192.168.200.51:3306/mysql?useSSL=false&characterEncoding=UTF-8&useJDBCCompliantTimezoneShift=true", "user":"root", "password":"123"} */;

/*+ mycat:createDatasource{ "name":"rwSepr", "url":"jdbc:mysql://192.168.200.53:3306/mysql?useSSL=false&characterEncoding=UTF-8&useJDBCCompliantTimezoneShift=true", "user":"root", "password":"123"} */;

疑问待验证: 是mysql://192.168.200.53:3306/mysql还是mysql://192.168.200.53:3306/mydatabase

img

查询配置数据源结果

/*+ mycat:showDataSources{} */;

img

查看/usr/local/mycat/conf/datasources文件夹,生成了对应的2个json配置文件

img
img

step2、 配置集群信息,添加dr0从节点.实现读写分离

使用注解方式添加集群信息

/*! mycat:createCluster{"name":"prototype","masters":["rwSepw"],"replicas":["rwSepr"]} */;

1、这样就创建一个名为prototype的集群,rwSepw指定主库,rwSepr指定从库。其中,replicas从库可以配置多个,表示有多个从库。masters也可以配置多个,第一个表示主库,后面的表示备用库。
2、配置集群后,MyCat2会在conf/cluster目录下创建对应的集群配置文件,rwSepr.cluster.json。里面包含了关于这个集群的详细配置信息。另外,也可以看到,MyCat2默认情况下也提供了一个名为prototype的集群。

img

查看配置集群信息

/*+ mycat:showClusters{} */;

img

查看集群配置文件

cat /usr/local/mycat/conf/clusters/prototype.cluster.json

img

配置文件中几个重要的配置:

readBalanceType 查询负载均衡策略
    可选值:
    BALANCE_ALL(默认值) #获取集群中所有数据源
    BALANCE_ALL_READ #获取集群中允许读的数据源
    BALANCE_READ_WRITE #获取集群中允许读写的数据源,但允许读的数据源优先
    BALANCE_NONE #获取集群中允许写数据源,即主节点中选择
    switchType
        NOT_SWITCH:不进行主从切换
        SWITCH:进行主从切换

step3、配置逻辑库

有了集群后,还需要在MyCat2中配置一个逻辑库,指向这个集群。这样,客户端就只需要操作这个逻辑库,由MyCat2去完成真实的读写分离逻辑。

-- 1、在mycat2的服务中声明一个逻辑库。

create database datacenter;

-- 2、在mycat2的部署目录下,找到生成的配置文件,conf/schema/datacenter.schema.json。在其中增加targetName:prototype属性。指向真实的集群。

{
        "customTables":{},
        "globalTables":{},
        "normalProcedures":{},
        "normalTables":{},
        "schemaName":"wrdb",
        "targetName":"prototype",
        "shardingTables":{},
        "views":{}
}


img

img

step4、重新启动 Mycat2,让配置文件生效

cd /usr/local/mycat/bin
./mycat restart 

step5、验证读写分离

51数据库的datacenter有一张block表 数据如下
img

53数据库作为从数据库,数据当然一样
img

登录mycat2 数据客户端,多次查询这张表,结果都是一样,因为主从表数据一样,我们没有办法证明从从表读了数据
img

我们手动把53的block表中Id为001005的这条数据pid改为002
img

然后再次登录mycat2 数据客户端,查询这张表
第一,二次查询
img
第三次查询
img

这就证明了mycat2 数据客户端即从主表读数据,也从从表读数据,如果想要其他策略,可以更改集群的readBalanceType参数

参考: https://juejin.cn/post/7146003021405618190

posted @ 2023-02-14 15:02  誓鼎  阅读(341)  评论(0编辑  收藏  举报