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环境,我们查看下,发现不符合阿米巴的使用要求,我们给它删除

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


 把Java环境放到/usr/local

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

赋予阿米巴权限chmod -R 755 /usr/local/amoeba/

 

 3.配置环境变量

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

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

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

 修改配置文件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

 保存退出刷新配置使之生效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 &

  查看netstat -lnpt | grep 8066

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

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功能的启停来理解什么事读写分离、负载均衡。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/57594.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

一文说清楚支付架构

作者:陈斌 支付的技术架构是为了保障能够顺利处理支付请求而设计的结构体系。从系统的角度看,它包括了计算机系统的软件、硬件、网络和数据等。从参与的主体角度来看,它涉及交易的付款方、收款方、支付机构、银行、卡组织和金融监管机构等。要…

图解系列 DNS查找过程和DNS缓存

DNS 充当地址簿。它将人类可读的域名 (google.com) 转换为机器可读的 IP 地址 (142.251.46.238)。 开局一张图 来自:https://xiaolishen.medium.com/the-dns-lookup-journey-240e9a5d345c 寻址流程 查询浏览器缓存:当你输入一个域名后,浏览…

本地mvn仓库清理无用jar包

背景 开发java时间久了,本地的m2仓库就会产生很多过期的jar包,不清理的话比较占空间。 原理 是通过比较同一目录下,对应jar包的版本号的大小,保留最大版本号那个,删除其他的。 脚本 执行脚本见文章顶部 执行方式 …

LeetCode--剑指Offer75(2)

目录 题目描述:剑指 Offer 58 - II. 左旋转字符串(简单)题目接口解题思路1代码解题思路2代码 PS: 题目描述:剑指 Offer 58 - II. 左旋转字符串(简单) 字符串的左旋转操作是把字符串前面的若干个字符转移到…

opencv rtsp 硬件解码

讨论使用opencv的reader 硬件解码的方案有太多种,如果使用ffmpeg硬件解码是最方便的,不方便的是把解码过后的GPU 拉到 CPU 上,再使用opencv的Mat 从cpu 上上载到gpu上,是不是多了两个过程,应该是直接从GPU mat 直接去…

思科单臂路由、lacp链路聚合、NAT实验

实验拓扑图: 实验目的: 如图所示配置相应IP地址和VLAN,并通过在AR1上配置单臂路由,实现VLAN10和VLAN20的主机能够在VLAN间通信;在SW1和SW2的三条链路实施链路聚合,使用静态LACP模式,使一条链…

《零基础入门学习Python》第075讲:GUI的终极选择:Tkinter12

Tkinter 的基本组件我们已经介绍得七七八八了,剩下的一些我们在这节课全部都会讲解完毕。 (一)Message组件 Message(消息)组件是 Label 组件的变体,用于显示多行文本消息。众所周知,我们的Lab…

13.7 CentOS 7 环境下大量创建帐号的方法

13.7.1 一些帐号相关的检查工具 pwck pwck 这个指令在检查 /etc/passwd 这个帐号配置文件内的信息,与实际的主文件夹是否存在等信息, 还可以比对 /etc/passwd /etc/shadow 的信息是否一致,另外,如果 /etc/passwd 内的数据字段错…

机器学习---线性回归、多元线性回归、代价函数

1. 线性回归 回归属于有监督学习中的一种方法。该方法的核心思想是从连续型统计数据中得到数学模型,然后 将该数学模型用于预测或者分类。该方法处理的数据可以是多维的。 回归是由达尔文的表兄弟Francis Galton发明的。Galton于1877年完成了第一次回归预测&…

【话题】感觉和身边其他人有差距怎么办?也许自我调整很重要

每个人能力有限,水平高低不同,我们身在大环境里,虽然在同一个起跑线上,但是时间久了,你会发现,并越来越感觉到和身边其他人有了差距,慢慢的会有一定的落差感,怎么办呢!通…

接口请求(get、post、head等)详解

一.接口请求的六种常见方式: 1、Get 向特定资源发出请求(请求指定页面信息,并返回实体主体) 2、Post 向指定资源提交数据进行处理请求(提交表单、上传文件),又可能导致新的资源的建…

使用docker 搭建nginx + tomcat 集群

创建3个Tomcat容器,端口分别映射到 8080,8081,8082,使用数据卷挂载,分别将宿主机目录下的 /opt/module/docker/tomcat3/ROOT1/,/opt/module/docker/tomcat3/ROOT2/,/opt/module/docker/tomcat3/ROOT2/ 挂载到 容器内部…

【腾讯云 Cloud studio 实战训练营】搭建Next框架博客——抛开电脑性能在云端编程(沉浸式体验)

文章目录 ⭐前言⭐进入cloud studio工作区指引💖 注册coding账号💖 选择cloud studio💖 cloud studio选择next.js💖 安装react的ui框架(tDesign)💖 安装axios💖 代理请求跨域&#x…

网站无法访问的常见原因

有多种问题可能会阻止用户访问您的网站。本文将解决无法访问网站,且没有错误消息指示确切问题的情况,希望对您有所帮助。 无法访问网站的常见原因有: (1)DNS 设置不正确。 (2)域名已过期。 (3)空白或没有索引文件。 (4)网络连接问题。 DNS 设…

【Spring】(二)从零开始的 Spring 项目搭建与使用

文章目录 前言一、Spring 项目的创建1.1 创建 Maven 项目1.2 添加 Spring 框架支持1.3 添加启动类 二、储存 Bean 对象2.1 创建 Bean2.1 将 Bean 注册到 Spring 容器 三、获取并使用 Bean 对象3.1 获取Spring 上下文3.2 ApplicationContext 和 BeanFactory 的区别3.3 获取指定的…

Python web实战之 Django 的 MVC 设计模式详解

技术栈:Python、Django、HTML、CSS、JavaScript。 概要 在 Web 开发中,MVC(Model-View-Controller)模式是一种非常常见的设计模式,它可以帮助我们更好地管理代码,提高代码的可维护性。今天就介绍如何使用 …

无人机巢的作用及应用领域解析

无人机巢作为无人机领域的创新设备,不仅可以实现无人机的自主充电和电池交换,还为无人机提供安全便捷的存放空间。为了帮助大家更好地了解无人机巢,本文将着重解析无人机巢的作用和应用领域。 一、无人机巢的作用 无人机巢作为无人机技术的重…

卷积神经网络【图解CNN】

文章目录 1.卷积运算2.池化3.全连接层 卷积神经网络可以看作一个函数或者黑箱,输入就是图片的像素阵列,输出就是这个图片是什么? 图片是X,那么就输出‘x’,图片是‘O’,那么就输出O; 在计算机眼中&#xff…

MySQL索引1——基本概念与索引结构(B树、R树、Hash等)

目录 索引(INDEX)基本概念 索引结构分类 BTree树索引结构 Hash索引结构 Full-Text索引 R-Tree索引 索引(INDEX)基本概念 什么是索引 索引是帮助MySQL高效获取数据的有序数据结构 为数据库表中的某些列创建索引,就是对数据库表中某些列的值通过不同的数据结…

C语言笔试题训练【第一天】

目录 第一题 第二题 第三题 第四题 第五题 大家好,我是纪宁。 从今天开始博主会日更一些经典的C语言笔试题,持续20天左右。题目类型为5道选择题加2道编程题,希望能和大家一起进步。 第一题 1.读程序,下面程序正确的输出是&…