【中间件】mycat读写分离分析

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群版 2核4GB 100GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用版 2核4GB 50GB
简介: 【中间件】mycat读写分离分析

读写分离架构图

Mycat可以实现mysql读写分离,但是没有Mycat就不可以了吗?不是的,单纯Java程序可是可以的

如下图

你可以在Java程序中写判断逻辑,select的请求发到读数据库,update等发到写数据库,然后java程序连接两个数据源

但是你发现问题没有,这样读写分离和代码就紧紧的耦合在一起了,如果你要改变一些东西(比如增加库,修改库),就要改变很多配置

如果增加一个mycat,mysql做主从复制,然后java程序只要连接一个mycat就可以了,不需要管mycat连接了几个数据库,请求又如何分发,这样就实现了解耦

如何配置读写分离

<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">

        <schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1">
        </schema>
        <dataNode name="dn1" dataHost="host1" database="testdb" />
        <dataHost name="host1" maxCon="1000" minCon="10" balance="0"
                          writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
                <heartbeat>select user()</heartbeat>
                <!-- can have multi write hosts -->
                <writeHost host="hostM1" url="192.168.25.146:3306" user="root"
                                   password="123456">
                        <!-- can have multi read hosts -->
                        <readHost host="hostS2" url="192.168.25.148:3306" user="root" password="123456" />
                </writeHost>
        </dataHost>
</mycat:schema>

配置文件属性解释

修改的balance属性,通过此属性配置读写分离的类型

负载均衡类型,目前的取值有4 种:

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

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

( balance=“2”,所有读操作都随机的在 writeHost、 readhost 上分发。

balance=“3”,所有读请求随机的分发到 readhost 执行, writerHost 不负担读压力

如果mysql是一主一从那么设置为3,如果是双主双从设置为1

写策略:

writeType=“0”: 所有写操作发送到配置的第一个writeHost,第一个挂了切到还生存的第二个

writeType=“1”,所有写操作都随机的发送到配置的 writeHost, 1.5 以后废弃不推荐

writeHost,重新启动后以切换后的为准,切换记录在配置文件中:dnindex.properties 。

数据库主备切换策略

switchType=“1”:

1 默认值,自动切换。

-1 表示不自动切换

2 基于 MySQL 主从同步的状态决定是否切换。

配置文件标签解释

Schema:逻辑库,与MySQL中的Database(数据库)对应,一个逻辑库中定义了所包括的Table。

Table:逻辑表,即物理数据库中存储的某一张表,与传统数据库不同,这里的表格需要声明其所存储的逻辑数据节点DataNode。在此可以指定表的分片规则。

DataNode:MyCAT的逻辑数据节点,是存放table的具体物理节点,也称之为分片节点,通过DataSource来关联到后端某个具体数据库上

DataSource:定义某个物理库的访问地址,用于捆绑到Datanode上

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
9月前
|
关系型数据库 MySQL 中间件
企业实战(10)基于Maxscale中间件实现Mysql读写分离实战
企业实战(10)基于Maxscale中间件实现Mysql读写分离实战
100 0
|
9月前
|
消息中间件 NoSQL 关系型数据库
【Kubernetes部署Shardingsphere、Mycat、Mysql、Redis、中间件Rocketmq、Rabbitmq、Nacos】
【Kubernetes部署Shardingsphere、Mycat、Mysql、Redis、中间件Rocketmq、Rabbitmq、Nacos】
174 0
|
2月前
|
中间件 关系型数据库 MySQL
史上最详细Docker安装Mycat中间件 | 实现主从的读写分离
史上最详细Docker安装Mycat中间件 | 实现主从的读写分离
200 2
|
9月前
|
存储 中间件 数据处理
05MyCat - 概念 - 数据库中间件
05MyCat - 概念 - 数据库中间件
47 0
|
10月前
|
监控 中间件 关系型数据库
MyCAT、ShardingSphere和Mocc这三个中间件的优缺点对比
MyCAT、ShardingSphere和Mocc这三个中间件的优缺点对比
|
SQL 负载均衡 安全
MySQL-中间件mycat(三)
MySQL-中间件mycat(三)
244 0
|
存储 算法 中间件
MySQL-中间件mycat(二)(2)
MySQL-中间件mycat(二)
|
负载均衡 关系型数据库 MySQL
MySQL-中间件mycat(二)(1)
MySQL-中间件mycat(二)
108 0
|
存储 SQL cobar
MySQL-中间件mycat(一)
MySQL-中间件mycat(一)
381 0
|
SQL JavaScript 小程序
如何写一个读写分离中间件
如何写一个读写分离中间件