Mysql -- 读写分离
admin
2023-01-23 23:02:04
0

文章目录

一、Mysql 读写分离原理

二、关于 Amoeba

三、配置实例

第一步:配置 Amoeba 服务器

第二步:在三台 mysql 服务器上添加权限,开放给 amoeba 访问(即三台mysql允许amoeba对它们进行访问)

第三步:在 amoeba 服务器上配置读写分离功能

第四步:客户端测试

四、总结

一、Mysql 读写分离原理

读写分离就是只在主服务器上写,只在从服务上读;
主数据库处理事务性查询,从数据库处理 select 查询;
数据库复制被用来把事务性查询导致的变更同步到集群中的从数据库

二、关于 Amoeba

(1)Amoeba是一个以MySQL为底层数据存储,并对应用提供MySQL协议接口的proxy。它集中地响应应用的请求,依据用户事先设置的规则,将SQL请求发送到特定的数据库上执行。基于此可以实现负载均衡、读写分离、高可用性等需求。
(2)Amoeba相当于一个SQL请求的路由器,目的是为负载均衡、读写分离、高可用性提供机制,而不是完全实现它们。需要结合使用MySQL的 Replication等机制来实现副本同步等功能。

三、配置实例

环境说明:
准备三台 Mysql服务器(一台为主服务器,其余两台为从服务器);
一台 Amoeba,用来实现读写分离,写的操作交给主服务器,读的操作发给两台从服务器;
实验验证:在客户机上执行写的操作,在主、从服务器上验证。

Mysql -- 读写分离

说明:Mysql 主从复制与读写功能是密切相关的,通过主从复制来实现数据同步,再通过读写分离来提升数据库的并发负载能力。
应用客户端 192.168.220.131
Amoeba 192.168.220.129
主服务器 192.168.220.141
从服务器 1 192.168.220.140
从服务器 2 192.168.220.136

第一步:配置 Amoeba 服务器

(1)关闭防火墙:
 systemctl stop firewalld.service
 setenforce 0
(2)安装管理 jdk:
1、安装 jdk
 cp jdk-6u14-linux-x64.bin  /usr/local/     //复制

./jdk-6u14-linux-x64.bin                    
//安装jdk ,注意这一步,一路按回车到最后,提示输入yes,等待安装

Mysql -- 读写分离

2、方便管理,将jdk包重新命名:
mv jdk1.6.0_14/ /usr/local/jdk1.6
3、修改 profile 文件
export JAVA_HOME=/usr/local/jdk1.6
export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export PATH=$JAVA_HOME/lib:$JAVA_HOME/jre/bin/:$PATH:$HOME/bin
export AMOEBA_HOME=/usr/local/amoeba
export PATH=$PATH:$AMOEBA_HOME/bin
使环境变量生效:
source /etc/profile
(3)解压 amoeba包:
1、先创建一个文件
mkdir /usr/local/amoeba
2、解压
tar zxvf amoeba-mysql-binary-2.2.0.tar.gz -C /usr/local/amoeba/
3、赋权,并验证是否安装成功
chmod -R 755 /usr/local/amoeba/
输入:/usr/local/amoeba/bin/amoeba ,按回车检查是否成功

Mysql -- 读写分离

第二步:在三台 mysql 服务器上添加权限,开放给 amoeba 访问(即三台mysql允许amoeba对它们进行访问)
进入数据库,输入以下命令:
grant all on *.* to test@'192.168.220.%' identified by '123.com';
//允许ip为192.168.220网段从任意终端通过123.com的密码进行访问
第三步:在 amoeba 服务器上配置读写分离功能
1、cd /usr/local/amoeba
vim conf/amoeba.xml

第30行:amoeba
第32行:123456

117行去掉注释:
 master
 slaves

Mysql -- 读写分离

Mysql -- 读写分离

2、vim conf/dbServers.xml
26-29行:去掉注释,设置登录用户名和密码
test
123.com

找到主服务器和从服务器模块,修改好名称和对应IP地址:
主服务器:

192.168.220.141

第一台从服务器:

192.168.220.140

第二台从服务器:

192.168.220.136

指定从服务器池:

slave1,slave2

Mysql -- 读写分离
Mysql -- 读写分离
Mysql -- 读写分离

3、启动 amoeba
/usr/local/amoeba/bin/amoeba start&        //&表示将进程放到后台,时间较长,稍等待
1

第四步:客户端测试

1、客户端虚拟机,可以直接用yum安装一个mysql服务
yum install -y mysql
2、连接 amoeba 服务器
(1)指定密码和端口连接 amoeba
mysql -u amoeba -p 123456 -h 192.168.220.129 -P8066
(2)创建一个 名为 school 的库,再创建一个叫 info 的表
MySQL [school]> create table info (
    -> id int(4) not null primary key,      //指定id号,为primary key,不为空
    -> name varchar(10) not null,           //名字
    -> score decimal(4,1) not null);        //成绩
Query OK, 0 rows affected (0.03 sec)

Mysql -- 读写分离

3、三台mysql服务器验证实验结果
首先验证写的操作是否分离:
(1)此时,我们在主服务器上,直接进入数据库,就会发现也多了一个名为 info的表

Mysql -- 读写分离

(2)但是,两台从服务器上并没有:

Mysql -- 读写分离

所以,我们在客户端写入的语句,在主服务器上会查询到,但是两台从服务器上并没有,此时写的操作就直接交给了主服务器。
接下来是验证读的操作:
(1)在两台从服务器上的各自也创建一个 info 表,也都各自写入两条信息。

Mysql -- 读写分离

Mysql -- 读写分离

(2)客户端查询 info 表的内容,因为做了读写分离操作,所以查询的内容应该是 两台从服务器上 info表的内容。

Mysql -- 读写分离

因此,用户读取数据,同时通过从服务器,这样就减轻了主服务器的并发量。

四、总结

这篇博客,为了展示读写分离的实验效果,并没有同时做主从同步,在企业网中,主从同步和读写分离是密不可分的。这样,客户对数据库进行写的操作时,就由主服务器承担;进行读取,查询等操作时,就由从服务器来承担(由于做了主从同步,每台从服务器的数据和主服务器是一样的)
在高并发请求时,实现了负载均衡,保证数据的安全性,服务器的高效运行

相关内容

热门资讯

德国总理:美国正在被伊朗羞辱 德国之声4月27日报道,德国总理默茨在访问一所学校时表示,在当前的持续冲突中,伊朗领导层正试图羞辱美...
理响中国|“长”歌以行,风云激... 光阴如梭,东方潮阔。这里是中国的长三角,世界的长三角。无论过去、现在还是未来,这片土地都因时代而生,...
白宫:特朗普及其国安团队开会讨... 新华社华盛顿4月27日电 美国白宫新闻秘书莱维特27日在记者会上证实,总统特朗普及其国家安全团队当天...
人民日报刊文:日本放开杀伤性武... 日本放开杀伤性武器出口推高地缘冲突风险(国际论坛)常思纯《人民日报》(2026年04月28日 第 0...
医疗保障法草案二审:明确生育保... 满足多样化健康保障需求本报记者 彭 波4月27日,医疗保障法草案二审稿提请十四届全国人大常委会第二十...
天津一景区发生自转旋翼机事故1... 澎湃新闻记者 吕新文中国民用航空华北地区管理局4月22日公布《豪客通航“10•1”天津长芦汉盐旅游区...
卡塔尔埃米尔与美国总统特朗普通... 当地时间24日,卡塔尔埃米尔塔米姆与美国总统特朗普通电话,重点就中东地区局势以及伊朗与美国谈判问题交...
男子30年前被扣押2859克黄... 澎湃新闻记者 王鑫家住辽宁省大连市的潘永嘉近日向澎湃新闻反映称,三十年前,他在大连周水子机场被盖州市...
商务部:取消反制欧盟两家金融机... 中华人民共和国商务部令二〇二六年 第1号鉴于欧盟已取消对中国两家金融机构的制裁措施,现公布《关于取消...
过去24小时共有5艘船只通过霍... 总台记者当地时间24日获悉,过去24小时内,共有5艘船只通过霍尔木兹海峡,其中包括一艘伊朗油轮。(总...