mysql(六)读写分离

这篇具有很好参考价值的文章主要介绍了mysql(六)读写分离。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

前言

一、概述

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

三、配置阿米巴

 四、测试

总结



前言

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

读写分离的原理是:

1. 主服务器(Master):负责处理所有的写操作(如INSERT、UPDATE、DELETE),保持数据的一致性。
2. 从服务器(Slaves):负责处理所有的读操作(如SELECT),提供数据的查询服务。

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

1. 配置主服务器:将所有写操作指向主服务器,确保主服务器是可写的。
2. 配置从服务器:将所有读操作指向从服务器,确保从服务器是只读的。
3. 同步数据:将主服务器上的数据同步到所有从服务器上,以保持数据的一致性。
4. 负载均衡:使用负载均衡器或代理服务器来分发读请求到多个从服务器,以提高读的性能和可伸缩性。
5. 监控与自动切换:监控主服务器的状态,如主机故障或网络故障,自动切换到另一个主服务器。

读写分离的好处包括:

1. 提高读的性能:通过将读操作分发到多个从服务器上,可以减轻主服务器的读压力,提高整体的读取性能。
2. 提高可用性:当主服务器发生故障时,可以快速切换到其他从服务器,保证系统的正常运行。
3. 分担主服务器的负载:将读操作分担到从服务器上,可以让主服务器更集中地处理写操作,从而提高整体的系统性能。

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


一、概述

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

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

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

  1. 基于程序代码内部实现

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

  1. 基于中间代理层实现

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

(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环境,我们查看下,发现不符合阿米巴的使用要求,我们给它删除mysql(六)读写分离,mysql,数据库,linux,运维,服务器

重新配置我们的Java环境,事先准备好的Java环境拖入终端,按照提示配置mysql(六)读写分离,mysql,数据库,linux,运维,服务器


 把Java环境放到/usr/local

mysql(六)读写分离,mysql,数据库,linux,运维,服务器

2.把准备好的阿米巴拖入终端安装并解压到/usr/local/amoebamysql(六)读写分离,mysql,数据库,linux,运维,服务器mysql(六)读写分离,mysql,数据库,linux,运维,服务器

赋予阿米巴权限chmod -R 755 /usr/local/amoeba/mysql(六)读写分离,mysql,数据库,linux,运维,服务器

 

 3.配置环境变量

chmod +x jdk-6u31-linux-x64.bin   

 ./jdk-6u31-linux-x64.bin

mysql(六)读写分离,mysql,数据库,linux,运维,服务器mysql(六)读写分离,mysql,数据库,linux,运维,服务器

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

mysql(六)读写分离,mysql,数据库,linux,运维,服务器

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

export JAVA_HOME=/usr/local/jdk1.6

export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib

export PATH=$PATH:$JAVA_HOME/lib:$JAVA_HOME/jre/bin:$HOME/bin

export AMOEBA_HOME=/usr/local/amoeba

export PATH=$PATH:$AMOEBA_HOME/bin

mysql(六)读写分离,mysql,数据库,linux,运维,服务器

 保存退出刷新配置使之生效source /etc/profile,随后验证我们的Java环境java -versionmysql(六)读写分离,mysql,数据库,linux,运维,服务器

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

三、配置阿米巴

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

1.在master、slave1、slave2上分别配置amoeba的访问权限,例如:mysql(六)读写分离,mysql,数据库,linux,运维,服务器

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

vim /usr/local/amoeba/conf/amoeba.xml需要修改的位置如下:mysql(六)读写分离,mysql,数据库,linux,运维,服务器

mysql(六)读写分离,mysql,数据库,linux,运维,服务器

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

vim /usr/local/amoeba/conf/dbServers.xml需要修改如下位置:mysql(六)读写分离,mysql,数据库,linux,运维,服务器mysql(六)读写分离,mysql,数据库,linux,运维,服务器mysql(六)读写分离,mysql,数据库,linux,运维,服务器

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

后台启动/usr/local/amoeba/bin/amoeba start &

mysql(六)读写分离,mysql,数据库,linux,运维,服务器

  查看netstat -lnpt | grep 8066

mysql(六)读写分离,mysql,数据库,linux,运维,服务器

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

1.在客户机机1上安装mysql mysql-server,通过代理访问mysql注意:此处的IP是阿米巴的IP,账户密码则是我们之前在配置文件中设置的mysql(六)读写分离,mysql,数据库,linux,运维,服务器

输入mysql -ameoba -p123456.Com -p 192.168.73.5 -P 8006mysql(六)读写分离,mysql,数据库,linux,运维,服务器

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

2.主服务器上创建一个hello的库,在库中建一个student的表mysql(六)读写分离,mysql,数据库,linux,运维,服务器

 

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

slave1中

mysql(六)读写分离,mysql,数据库,linux,运维,服务器

 slave2中:

mysql(六)读写分离,mysql,数据库,linux,运维,服务器

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

master中:mysql(六)读写分离,mysql,数据库,linux,运维,服务器

 slave1中:mysql(六)读写分离,mysql,数据库,linux,运维,服务器

 slave2中:mysql(六)读写分离,mysql,数据库,linux,运维,服务器

 3.在客户机上进行查看

第四次查看,发现他是在slave1和slave2上轮流读取,这体现了负载均衡mysql(六)读写分离,mysql,数据库,linux,运维,服务器

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

mysql(六)读写分离,mysql,数据库,linux,运维,服务器

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

mysql(六)读写分离,mysql,数据库,linux,运维,服务器

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

 5.好的现在我们分别开启两台从服务器上的slave功能mysql(六)读写分离,mysql,数据库,linux,运维,服务器

mysql(六)读写分离,mysql,数据库,linux,运维,服务器

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

mysql(六)读写分离,mysql,数据库,linux,运维,服务器


总结

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

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

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

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

4.测试阶段可以通过slave功能的启停来理解什么事读写分离、负载均衡。文章来源地址https://www.toymoban.com/news/detail-618991.html

到了这里,关于mysql(六)读写分离的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • MySQL数据库 主从复制与读写分离

    读写分离,基本的原理是让主数据库处理事务性增、改、删操作(INSERT、UPDATE、DELETE),而从数据库处理SELECT查询操作。数据库复制被用来把事务性操作导致的变更同步到集群中的从数据库。 因为数据库的“写”(写10000条数据可能要3分钟)操作是比较耗时的。 但是数据库

    2024年02月10日
    浏览(48)
  • 【数据库七】MySQL主从复制与读写分离

    读写分离,基本的原理是让主数据库处理事务性增、改、删操作 (insert、update、delete),而 从数据库处理select查询操作 。 数据库复制被用来把事务性操作导致的变更同步到集群中的从数据库 。 因为数据库的“写”(写10000条数据可能要3分钟)操作是比较耗时的。 但是数据

    2024年02月11日
    浏览(59)
  • 看!MySQL 8.2 数据库支持读写分离啦!

    MySQL 8.2.0创新版本已于2023-10-17发布,MySQL Router 8.2 支持数据库的读/写分离,这里将在InnoDB Cluster集群中演示数如何进行读写分离,本篇内容包括:MySQL Server数据库安装、MySQL Shell安装、MySQL Router安装、InnoDB Cluster安装与读写分离演示,若您只关注读写分离的演示,可直接跳至最

    2024年02月05日
    浏览(165)
  • 华为云数据库 RDS for MySQL 的读写分离,凭什么打破企业数据瓶颈?

    随着云2.0时代的到来,众多企业发现人工智能、大数据算法能为企业发展带来巨大的利润,人工智能、大数据算法等计算机算法被应用于企业的生产和发展,云+业务逐渐成为现代化企业发展的潮流,对传统数据库模式提出了挑战。 企业的业务从线下发展到线上,这就使得服

    2024年02月22日
    浏览(51)
  • spring boot shardingsphere mybatis-plus druid mysql 搭建mysql数据库读写分离架构

    ##关于window mysql主从搭建简单教程 传送门 window mysql5.7 搭建主从同步环境-CSDN博客 ##父pom.xml ##模块pom.xml ##yml配置 ##mapper.xml ##TestMapper ##TestService ##TestController ##浏览器访问 ##数据库

    2024年01月21日
    浏览(67)
  • java项目实现读写分离,项目连接Linux部署的数据库异常javax.net.ssl.SSLHandshakeException: No appropriate protocol

    1、对项目进行优化实现读写分离,项目启动时报错如下: Caused by: javax.net.ssl.SSLHandshakeException: No appropriate protocol (protocol is disabled or cipher suites are inappropriate) 原因:javax.net.ssl.SSLHandshakeException:没有适当的协议(协议被禁用或密码套件不合适) 2、bug解决:     注意: useSSL=f

    2024年02月04日
    浏览(52)
  • 数据库:mycat实现读写分离

    目录 一、mycat 1、mycat实现读写分离原理 2、mycat应用场景 3、mycat作用 4、mycat实现读写分离实战 1、mycat实现读写分离原理 ①用户进行读操作则由mycat转给配置的从数据库。 ②用户进行写操作则由mycat转给配置的主数据库。 ③转发规则由mycat配置文件中定义,那台是读那台是写

    2024年02月07日
    浏览(42)
  • 数据库应用:Mycat实现读写分离

    目录 一、理论 1.Mycat 2.Mycat安装启动 3.Mycat搭建读写分离 4.垂直分库 5.水平分表 6.Mycat高可用 7.Mycat安全设置 8.Mycat监控工具 二、实验 1.Mycat读写分离 2.Mycat监控安装 三、问题 1.Mycat命令无法补全 2.Mycat启动失败 3.zookeeper启动报错 四、总结 (1)概念 MyCAT是一款由阿里Cobar演变而来

    2024年02月15日
    浏览(45)
  • 如何正确使用数据库的读写分离

    在应用系统发展的初期,我们并不知道以后会发展成什么样的规模,所以一开始不会考虑复杂的系统架构,复杂的系统架构费时费力,开发周期长,与系统发展初期这样的一个定位是不吻合的。所以,我们都会采用简单的架构,随着业务不断的发展,访问量不断升高,我们再

    2024年02月02日
    浏览(61)
  • 项目练习:构建读写分离的数据库集群

    目录 一、目标实现 二、项目准备 三、项目实施 1.配置基础环境 1.1修改主机名 1.2配置3台群集虚拟机的/etc/hosts文件 1.3.配置网卡 1.4.配置本地yum源 2.部署Mycat中间件服务 2.1安装KDJ环境 3.部署MariaDB主从数据库集群服务 3.1安装MariaDB服务 3.2初始化MariaDB数据库 3.3配置数据库集群主

    2024年02月02日
    浏览(54)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包