概述

通过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地址 节点名称
Master1 192.168.67.140 CentOS01
Slave1 192.168.67.130 CentOS02
Master2 192.168.67.180 CentOS04
Slave2 192.168.67.190 CentOS05

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互做备机,负责写的主机宕机,备机切换负责写操作,保证数据库读写分离高可用性

Mycat实现读写分离相关推荐

  1. SpringBoot 整合 MyCat 实现读写分离

    作者:颜不喜 cnblogs.com/muycode/p/12603037.html MyCat一个彻底开源的,面向企业应用开发的大数据库集群.基于阿里开源的Cobar产品而研发.能满足数据库数据大量 ...

  2. 基于mycat的mysql_MySQL基于Mycat实现读写分离

    基于Mycat实现读写分离 环境:mariadb主:192.168.200.129 Mariadb从:192.168.200.114 Mycat    :192.168.200.112 (1) 安装j ...

  3. mycat 实现读写分离

    1. mycat简介 mycat是一个开源数据库中间件:它可以管理你的所有数据库,并对他们进行读写分离,分库分表等. 使用起来的话Mycat就是一个近似于MySQL的数据库服务器,你可以用连接MySQ ...

  4. MySQL 集群(三):MySQL + Mycat 实现读写分离,主备切换集群

    MySQL 集群(三):MySQL + Mycat 实现读写分离,主从切换集群 下载 Mycat Mycat 主要文件 端口 Mycat 命令 配置文件 server.xml schema.xml 配 ...

  5. MyCat配置读写分离

    分布式核心问题系列目录 分布式核心问题 - SSO单点登录 分布式核心问题 - 分布式锁 分布式核心问题 - 分布式接口幂等性设计 分布式核心问题 - MyCat实现读写分离 ------------ ...

  6. MySQL 案例实战--MySQL 基于Mycat实现读写分离

    MySQL 基于Mycat实现读写分离 前言 一.什么是读写分离? 二.MySQL 读写分离解决方案 三.MySQL 基于Mycat实现读写分离 四.Mycat-web 管理部署 前言 本环境是基于 ...

  7. 【mycat】读写分离

    在此之前,我们需要安装双主双从的mysql数据库 https://blog.csdn.net/wangyunzhao007/article/details/107330124 还需要安装mycat 一 ...

  8. MyCat实战--读写分离/数据分片/mycat集群/haproxy负载均衡

    目录 简介 优势 关键特性 读写分离 安装mycat 配置mycat server.xml schema.xml rule.xml 启动mycat 停止mycat 连接mycat 测试 数据分片 配置 ...

  9. 用mycat做读写分离:基于 MySQL主从复制

    mycat是最近很火的一款国人发明的分布式数据库中间件,它是基于阿里的cobar的基础上进行开发的 搭建之前我们先要配置mysql的主从复制,这个过程很长,我这里就不写了,有兴趣的可以看看我写的这篇文 ...

最新文章

  1. 分布式服务框架 Zookeeper -- 管理分布式环境中的数据
  2. stdio.h头文件中申明的基本函数
  3. session_onend,你到底什么时候才能激发?
  4. UNIX再学习 -- 记录锁
  5. linux线程基础篇----线程同步与互斥
  6. WCF rest 的帮助页面和缓存机制
  7. Cocos2dx坐标转换
  8. cpuid linux,Linux下获取CPUID、硬盘序列号与MAC地址(2)
  9. YAM将于明日在DegenerativeFinance上发布uSTONKS
  10. 安卓9 怎么运行老程序_PLC怎么连接电脑?怎么把在电脑编程好的程序放入PLC运行?...
  11. 打开android studio项目,为什么我们没有一个文件来打开Android Studio项目?
  12. 猫眼(门镜)中的光学
  13. stc12c5a60s2制作4*4*4,光立方c语言程序怎么写,基于STC12c5a60s2单片机的3D显示屏设计...
  14. 实现流程管理的五个步骤
  15. Windows MinWG 编译 thrift
  16. 谷歌浏览器打开CSDN老是弹出安卓网页
  17. SQL 如何查询时竖着的数据横着显示
  18. matlab分析总谐波失真THD,运放参数的详细解释和分析-part21,总谐波失真(THD)
  19. java树莓派温度传感器_怎样使用树莓派读取传感器上的温度和湿度
  20. 查询rssi指令_RSSI测量方法及网络设备、终端设备与流程

热门文章

  1. 分享如何在Ubuntu 16.04下CUDA8.0
  2. 多个勒索软件团伙利用VMware的Log4Shell漏洞
  3. gin 获取post请求的json body操作详解
  4. JavaScript初学者编程题(22)
  5. mysql数据库导出mdf文件_数据库 导出mdf
  6. 线性基+树上倍增 ---- BZOJ4568[线性基+树上倍增]
  7. php数独游戏开发,使用vue如何开发数独游戏
  8. java redis 下载_redis Java源代码 redis.rar - 下载 - 搜珍网
  9. java 配置文件书写_配置文件的写法(properties类型)
  10. 2017 ACM ICPC Asia Shenyang Regional Contest 题解(10 / 13)【每日亿题2 / 16】