mysql读写分享_Mysql——读写分离

内容要点:

一、Mysql 读写分离原理

二、关于 Amoeba

三、配置实例

第一步:配置 Amoeba 服务器

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

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

第四步:客户端测试

四、总结

一、Mysql 读写分离原理读写分离就是只在主服务器上写,只在从服务上读;

主数据库处理事务性查询,从数据库处理 select 查询;

数据库复制被用来把事务性查询导致的变更同步到集群中的从数据库

二、关于 Amoeba(1)Amoeba是一个以MySQL为底层数据存储,并对应用提供MySQL协议接口的proxy。它集中地响应应用的请求,依据用户事先设置的规则,将SQL请求发送到特定的数据库上执行。基于此可以实现负载均衡、读写分离、高可用性等需求。

(2)Amoeba相当于一个SQL请求的路由器,目的是为负载均衡、读写分离、高可用性提供机制,而不是完全实现它们。需要结合使用MySQL的 Replication等机制来实现副本同步等功能。

三、配置实例

环境说明:

准备三台 Mysql服务器(一台为主服务器,其余两台为从服务器);

一台 Amoeba,用来实现读写分离,写的操作交给主服务器,读的操作发给两台从服务器;

实验验证:在客户机上执行写的操作,在主、从服务器上验证。

0ea309e6c36fe6cdc547b42f7c48e963

说明:Mysql 主从复制与读写功能是密切相关的,通过主从复制来实现数据同步,再通过读写分离来提升数据库的并发负载能力。

应用客户端192.168.220.131

Amoeba192.168.220.129

主服务器192.168.220.141

从服务器 1192.168.220.140

从服务器 2192.168.220.136

第一步:配置 Amoeba 服务器

(1)关闭防火墙:systemctl stop firewalld.service

setenforce 0

(2)安装管理 jdk:

1、安装 jdkcp jdk-6u14-linux-x64.bin  /usr/local/     //复制

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

//安装jdk ,注意这一步,一路按回车到最后,提示输入yes,等待安装

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 ,按回车检查是否成功

9ec14d21f321e61770ad45b6cc603262.png

第二步:在三台 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

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

test

123.com

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

主服务器:

192.168.220.141

第一台从服务器:

192.168.220.140

第二台从服务器:

192.168.220.136

指定从服务器池:

slave1,slave2

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

第四步:客户端测试

1、客户端虚拟机,可以直接用yum安装一个mysql服务yum install -y mysql

2、连接 amoeba 服务器

(1)指定密码和端口连接 amoebamysql -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)

3、三台mysql服务器验证实验结果

首先验证写的操作是否分离:

(1)此时,我们在主服务器上,直接进入数据库,就会发现也多了一个名为 info的表

c16f7bce5d9b91f660aa353429a9163c

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

b01df863de719621775bc1790100ffee

所以,我们在客户端写入的语句,在主服务器上会查询到,但是两台从服务器上并没有,此时写的操作就直接交给了主服务器。

接下来是验证读的操作:

(1)在两台从服务器上的各自也创建一个 info 表,也都各自写入两条信息。

2ffa233429a5c31178d245cf20864e35

7c83aa6eb0188285ebde8b3d5968e429

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

71e51158dff5971b86d614084dc81521

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

四、总结

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

在高并发请求时,实现了负载均衡,保证数据的安全性,服务器的高效运行。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值