Mycat实现读写分离

概述

通过Mycat和MySQL的主从复制配合搭建数据库的读写分离,实现MySQL的高可用性。我们将搭建:一主一从、双主双从两种读写分离模式。

一主一从模式

一主一从模式是指一个主机用于处理所有写请求,一台从机负责所有读请求,架构图如下

在这里插入图片描述

1、搭建 MySQL 数据库主从复制

具体实现过程,MySQL主从复制配置过程

2、修改Mycat的配置文件schema.xml

之前的配置已分配了读写主机,是否已实现读写分离?

验证读写分离

(1)在写主机插入:insert into uservalues (1,@@hostname);

主从主机数据不一致了

(2)在Mycat里查询:select * from user;

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

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

balance取值类型说明
0不开启读写分离机制,所有读操作都发送到当前可用的 writeHost 上
1全部的 readHost 与 stand by writeHost 参与 select 语句的负载均衡,简单的说,当双主双从模式(M1->S1,M2->S2,并且 M1 与 M2 互为主备),正常情况下,M2,S1,S2 都参与 select 语句的负载均衡
2所有读操作都随机的在 writeHost、readhost 上分发
3所有读请求随机的分发到 readhost 执行,writerHost 不负担读压力

为了能看到读写分离的效果,把balance设置成2,会在两个主机间切换查询

在这里插入图片描述

3、启动Mycat

4、验证读写分离

(1)在写主机数据库表mytbl中插入带系统变量数据,造成主从数据不一致

insert into user(name,source) values('C0055',@@hostname);

在这里插入图片描述

(2)在Mycat里查询user表,可以看到查询语句在主从两个主机间切换

在这里插入图片描述

双主双从模式

一个主机m1用于处理所有写请求,它的从机s1和另一台主机m2还有他的从机s2负责所有读请求。

当m1主机宕机后,m2主机负责写请求,m1、m2互为备机。架构图如下

在这里插入图片描述

角色IP地址节点名称
Master1192.168.67.140CentOS01
Slave1192.168.67.130CentOS02
Master2192.168.67.180CentOS04
Slave2192.168.67.190CentOS05

1、搭建 MySQL 数据库主从复制(双主双从模式)

具体实现过程,MySQL主从复制配置过程(双主双从模式)

2、修改Mycat的配置文件schema.xml

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

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

balance取值类型说明
0不开启读写分离机制,所有读操作都发送到当前可用的 writeHost 上
1全部的 readHost 与 stand by writeHost 参与 select 语句的负载均衡,简单的说,当双主双从模式(M1->S1,M2->S2,并且 M1 与 M2 互为主备),正常情况下,M2,S1,S2 都参与 select 语句的负载均衡
2所有读操作都随机的在 writeHost、readhost 上分发
3所有读请求随机的分发到 readhost 执行,writerHost 不负担读压力

为了能看到读写分离的效果,把balance设置成1

  • balance=“1”: 全部的readHost与stand by writeHost参与select语句的负载均衡。
  • writeType=“0”: 所有写操作发送到配置的第一个writeHost,第一个挂了切到还生存的第二个
  • writeType=“1”,所有写操作都随机的发送到配置的 writeHost,1.5 以后废弃不推荐
  • writeHost,重新启动后以切换后的为准,切换记录在配置文件中:dnindex.properties
  • switchType=“1”: 1 默认值,自动切换。
    • -1 表示不自动切换
    • 2 基于 MySQL 主从同步的状态决定是否切换。
<dataNode name="dn1" dataHost="host1" database="testdb" />
<dataHost name="host1" maxCon="1000" minCon="10" balance="1"
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.67.140:3306" user="root" password="123456">
<!-- can have multi read hosts -->
<readHost host="hostS1" url="192.168.67.130:3306" user="root"
password="123456" />
</writeHost>
<writeHost host="hostM2" url="192.168.67.180:3306" user="root" password="123456">
<!-- can have multi read hosts -->
<readHost host="hostS2" url="192.168.67.190:3306" user="root"
password="123456" />
</writeHost>
</dataHost>

3、启动Mycat

mysql -umycat -p123456 -P8066 -h 192.168.67.140

4、验证读写分离

(1)在写主机Master1数据库表userl中插入带系统变量数据,造成主从数据不一致

insert into user(name,source) values('test',@@hostname);

在这里插入图片描述

(2)在Mycat里查询user表,可以看到查询语句在Master2、Slave1、和Slave2主从三个主机之间切换

在这里插入图片描述

5、抗风险能力

停止数据库Master1

在这里插入图片描述

在Mycat里插入数据依然成功,Master2自动切换为写主机

insert into user(name,source) values('dead',@@hostname);

在这里插入图片描述

启动数据库Master1

在这里插入图片描述

在Mycat里查询user表,可以看到查询语句在Master1、Slave1和Slave2主从三个主机间切换

在这里插入图片描述

Master1、Master2互做备机,负责写的主机宕机,备机切换负责写操作,保证数据库读写分离高可用性

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:深蓝海洋 设计师:CSDN官方博客 返回首页
评论 2

打赏作者

慢就是【快】

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值