Linux系统下MySQL读写分离

news/2024/12/22 3:22:22/

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 


目录

一、基于Amoeba读写分离

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

2.基于中间代理层实现

三、操作步骤

1.在主机Amoeba上安装java环境

2.安装并配置Amoeba

3.配置Amoeba读写分离,两个Slave读负载均衡

3.1在Master、Slave1、Slave2服务器中配置Amoeba的访问授权

master

slave1

slave2

3.2编辑amoeba.xml配置文件

3.3编辑dbServer.xml配置文件

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

3.5在Client上进行访问测试

3.6然后可以通过代理访问MySQL

4.主服务器

5.分别在两台从服务器上


一、基于Amoeba读写分离

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

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

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

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

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

2.基于中间代理层实现

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

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

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

           MySQL Master IP:192.168.200.111

           MySQL Slave1 IP:192.168.200.112

           MySQL Slave2 IP:192.168.200.113

           MySQL Amoeba IP:192.168.200.114

           MySQL Client IP:192.168.200.115

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

三、操作步骤

1.在主机Amoeba上安装java环境

检查java环境—java version

查找Java路径—which Java

若版本不对 rm 删除Java 从新安装java

2.安装并配置Amoeba

3.配置Amoeba读写分离,两个Slave读负载均衡

3.1在Master、Slave1、Slave2服务器中配置Amoeba的访问授权

master

 grant all on *.* to 'test'@'192.168.200.%' identified by '123.com';

flush privileges;

slave1

 grant all on *.* to 'test'@'192.168.200.%' identified by '123.com';

flush privileges;

slave2

grant all on *.* to 'test'@'192.168.200.%' identified by '123.com';

flush privileges;

3.2编辑amoeba.xml配置文件

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

第一处

第二处

3.3编辑dbServer.xml配置文件

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

第一处

 第二处

第三处

 

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

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

 netstat -lnpt | grep 8066

netstat -anpt | grep 3306

3.5在Client上进行访问测试

# yum -y install mariadb mariadb-devel

 mysql -uamoeba -p123456 -h 192.168.200.114 -P 8066

3.6然后可以通过代理访问MySQL

在MySQL主服务器上创建一个表,会自动同步到各个从服务器上,然后关掉各个服务器上的Slave功能,在分别插入语句测试。

4.主服务器

create database lsq;

use lsq

create table student (id int(10),name varchar(10),address varchar(20));

5.分别在两台从服务器上

 5.1master

use lsq;

 insert into student values('1','Rich','this_is_master');

5.2 slave1

use lsq;

 insert into student values('1','Rich','this_is_slave1');

5.3 slave2

use lsq

 insert into student values('1','Rich','this_is_slave2');

6.操作测试

1.1在客户机上第1次查询结果

1.2在客户机上第2次查询结果

  

1.3在客户机上第3次查询结果

2.测试写操作

客户端:insert into student values ('4','Rich','write_test')

查看:select * from student

       但在Client上查询不到,最终只有在Master上才能看到这条语句内容,说明写操作在master服务器上

 

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

分别在两台从服务器上启用slave功能

现在在Client测试机上查看

 


http://www.ppmy.cn/news/1001905.html

相关文章

Doris比MySQL快的原因

简介 在数据存储和数据分析领域,MySQL和Doris是比较流行的数据库管理系统的代表。 在如今的大数据时代,数据量和数据分析的速度是很重要的。 在数据分析和数据处理中,Doris比MySQL快,这个问题一直是许多人关心的问题。 Doris的数…

【C++】初阶 --- 引用(超级详细版!!!)

文章目录 🍪一、引用的概念🍪二、引用的特性🍿1、引用在定义时必须初始化🍿2、一个变量可以有多个引用🍿3、引用一旦引用一个实体,再不能引用其他实体 🍪三、常引用(被const 修饰的引用)&#x…

链表(二) 双链表操作详解

文章目录 四、双向带头循环链表的实现List.hList.c创建返回链表的头结点双向链表打印双向链表尾插双向链表尾删双向链表头插双向链表头删双向链表查找双向链表在pos的前面进行插入双向链表删除pos位置的节点 五、单链表与双链表比较 什么是链表及单链表的实现请跳转&#xff1a…

【leetcode】203. 移除链表元素(easy)

给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val val 的节点,并返回 新的头节点 。 /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode() {}* Lis…

垃圾回收机制和常用的算法

一.什么是垃圾回收? 垃圾回收主要针对堆和方法区(非堆),程序计数器,虚拟机栈,本地方法栈这三个区域属于线程私有,随着线程的销毁,自然就会雄安会了,因此不需要堆着三个区域进行垃圾…

【UE5】UE5与Python Socket通信中文数据接收不全

最近在使用UE的Socket模块与Python服务器进行通信时遇到了一些坑&#xff0c;特此记录一下。 先来复现一下问题&#xff0c;这里只截取关键代码。 UE端&#xff1a; bool ASoc::SendMsg(const FString& Msg) {TSharedRef<FInternetAddr> TargetAddr ISocketSubsy…

【NLP概念源和流】 04-过度到RNN(第 4/20 部分)

接上文 【NLP概念源和流】 03-基于计数的嵌入,GloVe(第 3/20 部分) 一、说明 词嵌入使许多NLP任务有了显著的改进。它对单词原理图的理解以及将不同长度的文本表示为固定向量的能力使其在许多复杂的NLP任务中非常受欢迎。大多数机器学习算法可以直接应用于分类和回归任务的…

iframe跨域解决方案

在 Web 开发中&#xff0c;跨域是指在一个域&#xff08;例如&#xff0c;https://www.example.com&#xff09;的页面中请求了另一个域&#xff08;例如&#xff0c;https://api.example.com&#xff09;的资源&#xff0c;浏览器出于安全考虑会阻止这样的请求。为了解决 ifra…