mysql(六)读写分离

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
传统型负载均衡 CLB,每月750个小时 15LCU
简介: MySQL读写分离是一种常见的数据库架构设计模式,旨在提高系统的性能和可用性。它通过将读操作和写操作分离到不同的MySQL实例上来实现。

前言

MySQL读写分离是一种常见的数据库架构设计模式,旨在提高系统的性能和可用性。它通过将读操作和写操作分离到不同的MySQL实例上来实现。


读写分离的原理是:


1. 主服务器(Master):负责处理所有的写操作(如INSERT、UPDATE、DELETE),保持数据的一致性。

2. 从服务器(Slaves):负责处理所有的读操作(如SELECT),提供数据的查询服务。


具体实施读写分离主要包括以下步骤:


1. 配置主服务器:将所有写操作指向主服务器,确保主服务器是可写的。

2. 配置从服务器:将所有读操作指向从服务器,确保从服务器是只读的。

3. 同步数据:将主服务器上的数据同步到所有从服务器上,以保持数据的一致性。

4. 负载均衡:使用负载均衡器或代理服务器来分发读请求到多个从服务器,以提高读的性能和可伸缩性。

5. 监控与自动切换:监控主服务器的状态,如主机故障或网络故障,自动切换到另一个主服务器。


读写分离的好处包括:


1. 提高读的性能:通过将读操作分发到多个从服务器上,可以减轻主服务器的读压力,提高整体的读取性能。

2. 提高可用性:当主服务器发生故障时,可以快速切换到其他从服务器,保证系统的正常运行。

3. 分担主服务器的负载:将读操作分担到从服务器上,可以让主服务器更集中地处理写操作,从而提高整体的系统性能。


需要注意的是,读写分离不是完美的解决方案,它也存在一些局限性和挑战,例如数据同步延迟、数据一致性问题、复杂的配置和维护等。因此,在设计和实施读写分离时,需要根据具体的应用场景和业务需求进行综合考量和权衡。

一、概述


在实际的生产环境中,如果对数据库的读和写都在同一个数据库服务器中操作,无论是安全性,高可用还是并发等各个方面都不能完全满足实际需求的,因此一般来说都是通过主从复制的方式来同步数据,再通过读写分离来提供数据的高并发负载能力这样的方案来进行部署。


简单来说,读写分离就是只在主服务器上写,只在从服务器上读,基本的原理是让主数据库处理事务性查询,而从数据库处理select查询,数据库复制被用来把事务性查询导致的改变更新同步到集群中的从数据库。


目前最常见的MySQL读写分离方案有两种:


基于程序代码内部实现

在代码中根据select,insert进行路由分类,这类方法也是目前大型生产环境应用最广泛的,优点是性能最好,因为在程序代码中实现,不需要增加额外的设备作为硬件开支,缺点是需要开发人员来实现,运维人员无从下手


基于中间代理层实现

代理一般位于客户端和数据库服务器之间,代理服务器接到客户端请求后通过判断转发到后端数据库,代表性程序:


(1)mysql-proxy为mysql开发早期开源项目,通过其自带的lua脚本进行SQL判断,虽然是mysql的官方产品,但是mysql官方不建议将其应用到生产环境。


(2)Amoeba(变形虫)该程序由java语言及逆行开发,阿里巴巴将其应用于生产环境,它不支持事物和存储过程。


Amoeba(变形虫)项目开源框架于2008年发布一款Amoeba for mysql软件,这个软件致力于mysql的分布式数据库前端代理层,主要为应用层访问mysql的时候充当SQL路由功能,并具有负载均衡,高可用性,SQL过滤,读写分离,可路由到相关的目标数据库,可并发请求多台数据库,通过Amoeba能够完成多数据源的高可用,负载均衡,数据切片的功能,目前Amoeba已经在很多企业的生产线上使用。


二、配置JAVA环境及安装阿米巴


Java环境下载地址(仅供参考)Java Archive Downloads - Java SE 6


amoeba 下载地址(仅供参考)amoeba - Browse Files at SourceForge.net

1、在主机Amoeba上安装java环境。因为Amoeba是基于jdk1.5版本开发的,所以官方推荐使用1.5或者1.6版本,高版本不建议使用。

我这有个Java环境,我们查看下,发现不符合阿米巴的使用要求,我们给它删除


重新配置我们的Java环境,事先准备好的Java环境拖入终端,按照提示配置


把Java环境放到/usr/local


2.把准备好的阿米巴拖入终端安装并解压到/usr/local/amoeba


赋予阿米巴权限


 

3.配置环境变量

改个名字方便我们后续操作

修改配置文件vim /etc/profile配置Java和阿米巴的全局变量,在文末插入:

export JAVA_HOME=/usr/local/jdk1.6
export CLASSPATH=CLASSPATH:CLASSPATH:JAVA_HOME/lib:$JAVA_HOME/jre/lib
export PATH=PATH:PATH:JAVA_HOME/lib:JAVAHOME/jre/bin:JAVA_HOME/jre/bin:HOME/bin
export AMOEBA_HOME=/usr/local/amoeba
export PATH=PATH:PATH:AMOEBA_HOME/bin


/

保存退出刷新配置使之生效source /etc/profile,随后验证我们的Java环境java -version

好的Java版本符合amoeba的使用要求

三、配置阿米巴


要求:配置amoeba读写分离,两个slave读负载均衡(在这里我基于上篇博客中的mysql主从进行)

1.在master、slave1、slave2上分别配置amoeba的访问权限,例如:

2.编辑amoeba的配置文件amoeba.xml

vim /usr/local/amoeba/conf/amoeba.xml

需要修改的位置如下:

3.编辑amoeba的配置文件dbSeryer.xml

vim /usr/local/amoeba/conf/dbServers.xml

需要修改如下位置:

4. 配置无误后,启动Amoeba软件,默认端口是TCP协议8066

后台启动

/usr/local/amoeba/bin/amoeba start &

查看

四、测试(读写分离、负载均衡)


1.在客户机机1上安装mysql mysql-server,通过代理访问mysql注意:此处的IP是阿米巴的IP,账户密码则是我们之前在配置文件中设置的

输入

mysql -ameoba -p123456.Com -p 192.168.73.5 -P 8006

验证的步骤就是在master上创建一个列表,master会把表同步到slave上,然后就是关闭slave的功能,通过插入内容来验证。

2.主服务器上创建一个hello的库,在库中建一个student的表

分别在两台slave中查看是否有表student,随后关闭slave服务:

slave1中



slave2中:


3.分别在master、slave的student表中插入数据

master中:



slave1中:


slave2中:


3.在客户机上进行查看

第四次查看,发现他是在slave1和slave2上轮流读取,这体现了负载均衡

4.在客户机上插入一条语句,发现客户机是读不到刚插入的语句的

我们回到master上查看表student,发现客户机是写到了master上了。最终只有在Master上才能看到这条语句内容,说明写操作在master服务器上(体现了读写分离

由此验证,已经实现了MySQL读写分离,目前所有的写操作都在Master主服务器上,用来避免数据的不同步,所有的读操作都平分给了Slave从服务器,用来分担数据库压力。

5.好的现在我们分别开启两台从服务器上的slave功能

现在我们回到客户端查看表的内容,这次我们可以看到了master的全部内容但是slave1、slave2的内容还是轮流出现。又一次体现出了负载均衡


总结

在本次实验中有几个需要注意的地方:


1.在配置阿米巴是要注意我们的Java环境是否符合,然后就是安装阿米巴,不论是哪个都需要注意路径,在两者操作结束后修改配置文件/etc/profile然后输入source /etc/profile使之生效。


2.然后我们注意要去每个主从服务器里为阿米巴授权


3.配置阿米巴的文件(要细心),确认无误后启动服务。


4.测试阶段可以通过slave功能的启停来理解什么事读写分离、负载均衡。


相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
6月前
|
存储 关系型数据库 MySQL
MySQL 读写分离原理
MySQL 读写分离原理
101 0
MySQL 读写分离原理
|
6月前
|
关系型数据库 MySQL Java
MySQL的主从复制 && SpringBoot整合Sharding-JDBC解决读写分离
MySQL的主从复制 && SpringBoot整合Sharding-JDBC解决读写分离
129 0
|
6月前
|
SQL 关系型数据库 MySQL
Mycat【Mycat部署安装(核心配置及目录结构、安装以及管理命令详解)Mycat高级特性(读写分离概述、搭建读写分离、MySQL双主双从原理)】(三)-全面详解(学习总结---从入门到深化)
Mycat【Mycat部署安装(核心配置及目录结构、安装以及管理命令详解)Mycat高级特性(读写分离概述、搭建读写分离、MySQL双主双从原理)】(三)-全面详解(学习总结---从入门到深化)
559 0
|
30天前
|
负载均衡 监控 关系型数据库
MySQL 官宣:支持读写分离了!!
【10月更文挑战第8天】MySQL的读写分离功能显著提升了数据库性能、可用性和可靠性。通过将读写操作分配至不同服务器,有效减轻单个服务器负载,提高响应速度与吞吐量,并增强系统稳定性。此外,它还支持便捷的扩展方式,可通过增加只读服务器提升读操作性能。实现读写分离的方法包括软件层面(如使用数据库中间件)和硬件层面(使用独立服务器)。使用时需注意数据一致性、负载均衡及监控管理等问题。
|
6月前
|
SQL 关系型数据库 MySQL
mysql 主从复制与读写分离
mysql 主从复制与读写分离
|
2月前
|
关系型数据库 MySQL Java
MySQL主从复制实现读写分离
MySQL主从复制(二进制日志)、 Sharding-JDBC实现读写分离
MySQL主从复制实现读写分离
|
3月前
|
SQL 关系型数据库 MySQL
(二十五)MySQL主从实践篇:超详细版读写分离、双主热备架构搭建教学
在上篇《主从原理篇》中,基本上把主从复制原理、主从架构模式、数据同步方式、复制技术优化.....等各类细枝末节讲清楚了,本章则准备真正对聊到的几种主从模式落地实践,但实践的内容通常比较枯燥乏味,因为就是调整各种配置、设置各种参数等步骤。
479 2
|
3月前
|
关系型数据库 MySQL PHP
开发者必看:MySQL主从复制与Laravel读写分离的完美搭配
开发者必看:MySQL主从复制与Laravel读写分离的完美搭配
68 2
|
3月前
|
SQL 关系型数据库 MySQL
mysql读写分离,主从同步
本文介绍了如何在Laravel项目中配置数据库读写分离,并实现MySQL主从同步。主要步骤包括:在`config/database.php`中设置读写分离配置;为主机授予从机访问权限;配置各MySQL服务器的`/etc/my.cnf`文件以确保唯一的`server-id`;以及通过SQL命令设置主从关系并启动从服务。文章还针对一些常见错误提供了排查方法。最后通过验证确认主从同步是否成功。[原文链接](https://juejin.cn/post/6901581801458958344)。版权所有者为作者佤邦帮主,转载请遵循相关规定。
|
3月前
|
cobar 关系型数据库 MySQL
使用MyCat实现MySQL主从读写分离(一)概述
【8月更文挑战第11天】MySQL读写分离通过主从复制分散负载,主库负责写操作,从库承担读查询,以复制技术确保数据一致性。此策略有效缓解锁竞争,提升查询效能并增强系统可用性。实现方式包括应用层处理,简便快捷但灵活性受限;或采用中间件如MyCAT、Vitess等,支持复杂场景但需专业团队维护。
96 0