Mycat - 实现数据库的读写分离与高可用

MyCat实现MySQL读写分离(单主单从单库) 在数据库集群架构中,主数据库负责处理事务性查询(写入操作),而从数据库只负责处理select查询(读操作),这样可以提高数据库整体读写性能。主数据库另外一个功能就是负责将数据变更同步到从数据库中。 读写分离的作用 1)分摊服务器压力,提高机器的系统处理效率。 2)当写入操作不变时,就可以大大分摊读取操作的压力,提高系统性能。另外,当读取操作的压力被分摊后,又间接提高了写入的性能。因此,数据库整体读写性能提高了。 3)增加冗余,提高服务可用性。 阅读详情

mysql主从实现

Mycat不负责任何的数据同步问题,mysql的主从复制还得从mysql层面来实现;如果没有实现mysql的主从复制,后文就都成

如果想学习Java工程化、高性能及分布式、深入浅出。微服务、Spring,MyBatis,Netty源码分析的朋友可以加我的Java高级交流:854630135,群里有阿里大牛直播讲解技术,以及Java大型互联网技术的视频免费分享给大家。

 

Mycat - 实现数据库的读写分离与高可用

 

了。

mysql的主从复制是实现读写分离的基础,具体的搭建过程请参考:mysql5.7.18的安装与主从复制,本文就不展示详细的搭建过程了。我的mysql主从信息如下

master:192.168.1.210;slave:192.168.1.211; 需要复制的数据库:mycat_db

Mycat - 实现数据库的读写分离与高可用

 

 

Mycat搭建

Mycat是什么?是数据库中间件,介于数据库与应用之间,进行数据处理与交互的中间件服务,可以简单的理解成数据库代理,我们的应用只需要与数据库中间件交互,而无需关注复杂的数据库部署。

Mycat - 实现数据库的读写分离与高可用

 

 

如上图所示,数据被分到多个分片数据库后,应用如果需要读取数据,就需要处理多个数据源的数据。如果没有数据库中间件,那么应用将直接面对分片集群,数据源切换、事务处理、数据聚合都需要在应用层直接处理,原本该是专注于业务的应用,将会花大量的工作来处理分片后的问题,最重要的是每个应用处理将是完全的重复造轮子。所以有了数据库中间件,应用只需要关注业务处理,大量的通用的数据聚合、事务、数据源切换都由数据库中间件来处理。更多Mycat信息,请查阅《Mycat权威指南》。

192.168.1.212上搭建Mycat

JDK的安装

Mycat依赖jdk,我们需要先安装jdk,必须是JDK7或更高版本;具体安装过程就不做展示了,大家可参考:virtualBox安装centos,并搭建tomcat。

Mycat安装

安装包:Mycat-server-1.6.6.1-release-20181031195535-linux.tar,在/opt目录下

[root@centos212 opt]# cp Mycat-server-1.6.6.1-release-20181031195535-linux.tar.gz -C /usr/local

[root@centos212 local]# useradd mycat

[root@centos212 local]# chown -R mycat:mycat /usr/local/mycat

[root@centos212 local]# passwd mycat

修改mycat内存配置

如果想学习Java工程化、高性能及分布式、深入浅出。微服务、Spring,MyBatis,Netty源码分析的朋友可以加我的Java高级交流:854630135,群里有阿里大牛直播讲解技术,以及Java大型互联网技术的视频免费分享给大家。

 

我的linux虚拟机配置的内存大小是1GB,大家需要根据自己的实际情况进行配置

[root@centos212 local]# vi mycat/conf/wrapper.conf

wrapper.java.additional.10=-Xmx4G (大约在36行)
wrapper.java.additional.11=-Xms1G
改成
wrapper.java.additional.10=-Xmx1G
wrapper.java.additional.11=-Xms256M

配置hostname(若已配置则忽略)

[root@centos212 local]# vi /etc/sysconfig/network

追加一行:HOSTNAME=你的主机名(xxxx),我的主机名是centos212

[root@centos212 local]# vi /etc/hosts

在127.0.0.1和::1末尾追加你的主机名(xxxx),如下图所示,

Mycat - 实现数据库的读写分离与高可用

 

 

将MyCat配置到环境变量中

[root@centos212 local]# vi /etc/profile

增加如下内容

MYCAT_HOME=/usr/local/mycat

PATH=$MYCAT_HOME/bin:$PATH

Mycat - 实现数据库的读写分离与高可用

 

 

保存后退出,执行source命令使配置生效

[root@centos212 local]# source /etc/profile

配置mycat

server.xml和rule.xml先不修改,用默认的即可;只需要简单配置下schema.xml

<?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$0-743" dataHost="localhost1" database="db$0-743"
 /> -->
 <dataNode name="dn1" dataHost="localhost1" database="test_db" />
 <dataHost name="localhost1" maxCon="1000" minCon="10" balance="0"
 writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
 <heartbeat>select user()</heartbeat>
 <writeHost host="hostM1" url="192.168.1.210:3306" user="root" password="123456" />
 </dataHost>
</mycat:schema>

 

默认有两个账号可以连接mycat的TESTDB,root:123456和user:user(在server.xml中),user账号只有只读权限。

启动mycat

[root@centos212 local]# mycat start

搭建结果展示

Mycat - 实现数据库的读写分离与高可用

 

 

可以看到,通过mycat我们成功往192.168.1.210的test_db库中创建了一张tbl_user表。

mysql读写分离、高可用实现

本文不涉及复杂的数据库部署,只是简单的mysql主从部署(单主单从),Mycat实现mysql的读写分离与高可用;mysql主从复制已经搭建好,Mycat也已经搭建好,剩下的就是配置Mycat,将Mycat与我们的mysql整合起来,结构图如下

Mycat - 实现数据库的读写分离与高可用

 

 

如图所示,writeHost表示主节点,readHost表示从节点,Mycat内部定期对一个dataHost里所有的writeHost与readHost节点发起心跳检测(writeHost与readHost都可以配置多个,至于数据同步的问题则需要我们从mysql层面实现了,Mycat并不提供数据同步的支持,本文只讲mysql一主一从),正常情况下,Mycat会将第一个writeHost作为写节点,所有的DML SQL会发送给此节点,若Mycat开启了读写分离,则Select SQL会根据读写分离策略发往readHost(+writeHost)执行。当一个dataHost里面配置了多个writeHost时,如果第一个writeHost宕机,则Mycat会在默认的3次心跳检查失败后,自动切换到下一个可用的writeHost,以此类推。

这存在一个问题,就是当宕机的writeHost恢复后,怎么重新加入Mycat,要不要恢复为原来的写节点? 最佳建议方式是:保持现有状态不变,改旗易帜,恢复后的mysql节点作为从节点,跟随新的主节点,重新配置主从同步,原来跟随该节点做同步的从节点也同样换帅,重新配置同步源,这些节点的数据手工完成同步后,再加入Mycat里。

配置Mycat,实现mysql读写分离与高可用

此种需求下,Mycat的配置非常简单,不用针对每个表进行配置,只需要在schema.xml中的元素上增加dataNode="defaultDN"属性,并配置此dataNode对应的真实物理数据库的database,然后dataHost开启读写分离功能即可。具体配置如下,server.xml和rule.xml先不修改,用默认的即可;只需要简单配置下schema.xml

Mycat - 实现数据库的读写分离与高可用

 

View Code

重启mycat:[root@centos212 logs]# mycat restart,mycat数据库TESTDB内容如下

Mycat - 实现数据库的读写分离与高可用

 

 

测试结果展示

读写分离

一般情况,查询会走slave节点,其他走master节点,对master节点数据库的增、删、改操作最终会同步到slave节点,但这个同步所需要的时间不好掌握(网络延时等因素),如果延时太长,我们新增一条数据后立即去查询,很有可能会查询不到刚新增的的数据;如果对数据的实时性要求比较高的查询,我们可以强制查询走master节点,如下所示

强制走master:/*!mycat:db_type=master*/ select * from tbl_user;强制走slave:/*!mycat:db_type=slave*/ select * from tbl_user

另外我们可以配置mycat,根据主从延时时长来决定查询走master还是slave,具体配置可查阅《Mycat权威指南》。

读写分离示例如下:

Mycat - 实现数据库的读写分离与高可用

 

如果想学习Java工程化、高性能及分布式、深入浅出。微服务、Spring,MyBatis,Netty源码分析的朋友可以加我的Java高级交流:854630135,群里有阿里大牛直播讲解技术,以及Java大型互联网技术的视频免费分享给大家。

 

可以看到,一般查询走的是slave;增、删、改走master,然后同步到slave;我们也可以强制走master,还是slave。示例中我手动的将slave中的王五改成了王五_1,是为了更好的展示查询请求是走的master还是slave,真实情况是不会出现这种情况的。

高可用

我们手动停掉master上的mysql服务,看看mycat能不能自动的切换到下一个writeHost,示例如下

Mycat - 实现数据库的读写分离与高可用

 

 

mycat将master从hostM1切换到hostM2需要一定的时间,切换过程中如果强制从master操作,会抛出连接异常(java.net.ConnectException: 拒绝连接),这是属于正常情况。当切换完成之后,就可以正常操作mycat了,而我们的操作方式无需做任何改变(应用无需做任何变化,仍按之前的方式访问mycat即可)。

宕机的master节点修复后,如何重新加入mycat,这个问题在前面已经讲过,该节点及其readHost节点全部以slave的形式加入到其他writeHost的readHost中,修改schema.xml,而不要去修改dnindex.properties,另外还得从mysql层面修改同步源。

总结

1、数据的同步在mysql层面实现的,mycat不负责任何的数据库同步;

2、mycat的搭建比较简单,但也有一些注意点:依赖JDK以及其版本,hostname配置等等。期间如果遇到什么问题,尽量百度,就不要google了,Mycat是中国制造,百度搜索的资料更全;

3、数据库的读写分离是mycat最常用的场景之一,配置比较简单,细心一点,实现起来应该不难;

4、读写分离往往还伴随着高可用,同样mycat也支持mysql的高可用,能够自动的进行master的切换;

5、关于mycat自身的高可用与负载均衡,请上飞机:Mycat - 高可用与负载均衡实现,满满的干货!;

如果想学习Java工程化、高性能及分布式、深入浅出。微服务、Spring,MyBatis,Netty源码分析的朋友可以加我的Java高级交流:854630135,群里有阿里大牛直播讲解技术,以及Java大型互联网技术的视频免费分享给大家。

加群直通车:

Mycat读写分离搭建及配置超详细!!! MyCat 数据库中间件的出现是为了应对传统单体数据库在高并发、大数据量和复杂业务场景下面临的性能瓶颈和扩展性问题。通过分片、读写分离、事务支持、SQL 优化等技术,MyCat 提供了高性能、高可用和易扩展的数据库解决方案,帮助企业更好地管理和利用数据资源。 阅读详情

相关推荐

mysql集成Mycat,Mycat实现读写分离和高可用

mysql集成Mycat,Mycat实现读写分离和高可用一、下载Mycat1. 准备环境2. 下载3. 配置mycat4. 启动mycat5. mycat实现高可用(主mysql宕机,从mysql顶上)二、 验证Mycat是否读写分离和高可用1.读写分离验证2. 高可用验证 一、下载Mycat 1. 准备环境 现有两台虚拟机mysql版本都是5.7,并且已经配置好主从。 master(主): 192.168.23.133 slave(从): 192.168.23.134 mysql安装参考: https:

wangyue123com的专栏 1407

Mycat读写分离的简单实现

文章目录1、Mycat读写分离的配置1.1、Mycat是什么1.2、Mycat能干什么1.2.1、数据库的读写分离1.2.2、数据库读写分离图解1.2.3、数据库分库分表1.2.3.1、水平拆分(分库)1.2.3.2、垂直拆分(分表)1.3、Mycat的搭建1.3.1、前期准备1.3.2、搭建环境1.3.3、Mycat的安装启动关闭1.3.4、Mycat的配置文件1.3.5、server.xml文件的配置1.3.6、schema.xml文件的配置1.4、测试读写分离 1、Mycat读写分离的配置 1.1、M

yuwenS的博客 1448

使用Mycat实现数据库读写分离

本文作者:蓝雄威,叩丁狼高级讲师。原创文章,转载请注明出处。 01前言 在上一篇文章中,我们基于CentOS7实现了MySQL的主从复制,我们需要把DML操作放在MySQL的主节点执行,需要把DQL操作放在MySQL的从节点执行.那在应用程序中我们怎么控制这个逻辑呢? 下面是一种可行的方案: 1.在项目中配置两个数据源(一主一从),分别是A(主)和B(从)。 2.在程序中判断是不是select...

wolfcode_cn的博客 1342

MySQL之中间件Mycat实现读写分离

Mysql 作为目前世界上使用最广泛的免费数据库,相信所有从事系统运维的工程师都一定接触过。但在实际的生产环境中,由单台MySQL 作为独立的数据库是完全不能满足实际需求的,无论是在安全性, 高可用性以及高并发等各个方面。因此,一般来说都是通过主从复制(Master-Slave)的方式来同步数据,再通过读写分离(MySQL-Proxy/Amoeba)来提升数据库的并发负载能力,这样的方案来进行部署与实施的。基本的原理是让主数据库处理事务性增、改、删操作(INSERT、UPDATE、DELETE),而从

weixin_56270746的博客 1301

基于MyCat的MySQL高可用读写分离集群

基于MyCat的MySQL高可用读写分离集群

基于mysql+mycat搭建稳定高可用集群负载均衡主备复制读写分离操作

数据库性能优化普遍采用集群方式,oracle集群软硬件投入昂贵,今天花了一天时间搭建基于mysql的集群环境。 主要思路 简单说,实现mysql主备复制–>利用mycat实现负载均衡。 比较了常用的读写分离方式,推荐mycat,社区活跃,性能稳定。 测试环境 MYSQL版本:Server version: 5.5.53,到官网可以下载WINDWOS安装包。 注意:确保mysql版本为5.5以后,以前版本主备同步配置方式不同。 linux实现思路类似,修改my.cnf即可。 A主mysql。192.168.110.1:3306, 用户root,密码root。操作系统:win7 x64,内

Mycat 读写分离实战

主从复制,读写分离,Mycat中间件

chen2434159177的博客 2808

AD7920实战:从咪头到ADC的音频信号采集电路设计全解析(附电路图)

本文详细解析了基于AD7920 ADC芯片的音频信号采集电路设计全流程。从驻极体咪头的驱动、AD8542运放的两级增益与偏置设计,到关键的抗混叠滤波器配置,以及ADC接口的驱动缓冲与PCB布局要点,提供了完整的实战指南与电路图,帮助开发者实现高质量音频信号采集。

red88的博客 807

Mycat → 实现数据库的读写分离与高可用

Mycat → 实现数据库的读写分离与高可用

u012632105的博客 168

从理论到波形:NE555多谐振荡器设计与示波器实战验证

本文详细介绍了NE555多谐振荡器的设计原理与实战验证方法。从基础理论到电路参数计算,再到面包板搭建与示波器测量,全面解析如何利用NE555芯片实现稳定的方波输出。通过实际案例演示了频率调整、占空比优化等技巧,并提供了常见问题排查指南,帮助电子爱好者快速掌握这一经典电路设计。

weixin_29159613的博客 283

Jenkins测试详细使用教程(二):jenkins两种主要构建方法

Jenkins有两种定义构建作业的主要方法:(自由风格项目)和Pipeline(流水线项目)。

m0_62825058的博客 2435

MyCat实现数据库负载均衡/读写分离/高可用

1.MyCat介绍---特性---安装 2.数据库主从配置 3.数据库实现读写分离---负载均衡---高可用

小艺的博客 591

Win11下DCMTK的Visual Studio 2022配置教程

最近有个新需求,需要完成读取和解析DICOM数据相关的SDK

qq_45797625的博客 3262

HAProxy+Keepalived和MyCat实现MySQL数据库的高可用、负载均衡和读写分离

四、安装配置Keepalived(haproxy+keepalived1、haproxy+keepalived2)三、安装配置HAProxy(haproxy+keepalived1、haproxy+keepalived2)2、重启MySQL服务(MySQL主1、MySQL从1、MySQL从2)(1)连接haproxy的VIP(虚拟IP)查看数据(客户端)(1)连接haproxy查看数据(客户端)3、创建复制专用用户(MySQL主1)(2)连接mycat查看数据(客户端)(1)安装mysql客户端(客户端)

2402_88627342的博客 975

lvgl 实现表格table,并且固定表头

嵌入式实现table,lvgl 实现原生表格table组件

m0_61704502的博客 1273

用Python爬取政府采购信息的实战全流程

以 Playwright 自动采集政府采购信息结构化存储与查询可拓展关键词过滤与通知机制。

2201_76125261的博客 1150

MyCat2搭建读写分离,实现数据库高可用,负载均衡

主节点新增的数据会同步到从节点,从节点新增的数据不会同步到主节点,所以主节点新增的数据在从节点可以查到,从节点新增的数据在主节点查不到。注意:这里不要删除 prototype.cluster.json,否则启动 Mycat 时会报错(是啥就是啥,不要动它就行了)在主节点(主库)创建mycat数据库,供mycat内部使用,Mycat 在启动时,会自动在原型库下创建其运行时所需的数据表。从节点新增一条数据,再次使用select查询。主节点新增一条数据,使用select查询。mycat的默认信息。

LYQ 3278

【图像去噪】基于加权核范数最小化算法实现图像去噪附matlab代码

1 简介 WNNM是一种约束矩阵奇异值稀疏性的低秩算法,在NNM理论基础上增加了核范数权重,有效利用了自然图像的先验信息并提高了核范数的灵活性. 2 部分代码 ​clcclear allclose allnSig = 100;O_Img = double(imread('Monarch.png'));​randn('seed', 0);N_Img = O_Img + nSig* randn(size(O_Img)); ..

qq_59747472的博客 3118

应用集成mycat,实现mycat的高可用与mysql的读写分离

前情回顾通过前面的两篇博文:Mycat - 实现数据库的读写分离与高可用 和 Mycat - 高可用与负载均衡实现,满满的干货!,我们完成了如下图所示的组件部署组件结构图一SQL请求发给VIP,keepalived完成VIP的映射,并通过lvs将请求转发mycat,mycat根据SQL请求类型(DML SQL还是SELECT SQL,亦或是强制指定db节点)将SQL分发到具体...

cangxuyi2957的博客 168

【人工智能】在 cc-switch 中配置 AnyRouter 接入 Claude Code 完整指南

本文介绍了在cc-switch工具中配置AnyRouter中转服务以接入Claude Code的详细步骤。主要内容包括:1) 准备API令牌和端点地址;2) 填写基础信息和模型参数;3) 保存配置并重启终端生效;4) 常见问题排查方法。重点强调了API地址格式、模型ID准确性以及配置写入的必要性,帮助用户顺利完成中转服务配置,实现Claude 4.5版本的正常使用。

奶爸的编程之路,也就一周冷个三天 3107

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

mysql分库负载均衡_使用Mycat实现Mysql数据库的主从复制、读写分离、分表分库、负载均衡和高可用...

Mysql集群搭建使用Mycat实现Mysql数据库的主从复制、读写分离、分表分库、负载均衡和高可用(Haproxy+keepalived),总体架构: 说明:数据库的访问通过keepalived的虚拟IP访问HAProxy负载均衡器,实现HAProxy的高可用,HAProxy用于实现两台mycat服务器负载均衡和高可用,mycat连接了后台一主一从的mysql集群实现,通过mycat实现对mys...

weixin_34221330的博客 167

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

使用Mycat实现Mysql数据库的主从复制、读写分离、分表分库、负载均衡和高可用...

Mysql集群搭建 使用Mycat实现Mysql数据库的主从复制、读写分离、分表分库、负载均衡和高可用(Haproxy+keepalived),总体架构: 说明:数据库的访问通过keepalived的虚拟IP访问HAProxy负载均衡器,实现HAProxy的高可用,HAProxy用于实现两台mycat服务器负载均衡和高可用,mycat连接了后台一主一从的mysql集群实现,通过myc...

weixin_30840573的博客 185

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

上一篇: Mycat - 实现数据库的读写分离与高可用
下一篇: 被标记为事务的方法互相调用的坑(上)
javaQQ群 866865133
博客等级 码龄8年 59粉丝 309原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值