MySQL读写分离

前言:

上一篇博客记录了主从复制,现在在主从复制的基础上实现读写分离,之前做主从复制只用了一主一从,为了更好的看出效果,这里用了一主二从,另外的一台从服务器再加上就好了,一共用了四台服务器,详情如下:

IP 作用
192.168.110.150 master
192.168.110.151 slave1
192.168.110.148 slave2
192.168.110.146 客户端

一、主从复制原理

1.主服务器处理事务性查询,从服务器处理select查询,即在主服务器上写,在从服务器上读
2.安装软件amoeba,客户端的读写操作由amoeba来调度执行,从而实现读写分离

二、搭建读写分离

1.安装jdk

amoeba是基于jdk1.5开发的,在amoeba主机上安装jdk1.5或1.6版本,这里用的是.bin的包
1.1 查看是否已经安装jdk,已安装就卸载

rpm -qa | grep jdk

1.2 安装jdk
下载地址

chmod +x jdk-6u14-linux-x64.bin
./jdk-6u14-linux-x64.bin 
mv  jdk1.6.0_14 /usr/local/java

1.3 添加环境变量

vim /etc/profile
export JAVA_HOME=/usr/local/java
export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export PATH=$JAVA_HOME/lib:$JAVA_HOME/jre/bin:$PATH:$HOME/bin
刷新环境变量
source /etc/profile

1.4 查看jdk版本,看jdk是否安装成功

java -version

在这里插入图片描述

2.安装amoeba

下载路径
2.1 创建amoeba的安装目录

mkdir /usr/local/amoeba

2.2 解压

tar zxf amoeba-mysql-binary-2.2.0.tar.gz -C /usr/local/amoeba/

2.3 添加环境变量

vim /etc/profile
export AMOEBA_HOME=/usr/local/amoeba/
export PATH=$PATH:$AMOEBA_HOME/bin
刷新环境变量
source /etc/profile

2.4 修改amoeba配置文件

vim /usr/local/amoeba/bin/amoeba

在这里插入图片描述
2.5 测试是否安装成功

/usr/local/amoeba/bin/amoeba
若出现amoeba start|stop表示成功
3.MySQL主从服务器给amoeba授权用户
grant all on *.* to 'amoeba'@'%' identified by '1234Aa..';
刷新
flush privileges;
4.修改amoeba配置文件
vim /usr/local/amoeba/conf/amoeba.xml

设置客户端登录MySQL的用户名和密码
在这里插入图片描述
定义默认登录的服务器池名称、写服务器池名称、读服务器池名称,注意删除注释
在这里插入图片描述

5.修改dbServers.xml配置文件
vim /usr/local/amoeba/conf/dbServers.xml

设置登录mysql的用户名和密码
在这里插入图片描述
设置mysql各节点的ip和名称
在这里插入图片描述
定义从服务器池名称和池中各从服务器名称
在这里插入图片描述

6.启动amoeba
amoeba start
7.在客户机上安装mysql客户端进行测试

7.1 客户端登录MySQL

mysql -uamoeba -p1234Aa.. -h192.168.110.150 -P8066(amoeba端口)

7.2 测试读写分离
7.2.1 在master上创建测试库和表

create database test;
use test;
create table ergou (id int(10),name varchar(20));
show tables;  
三台数据库结果相同

在这里插入图片描述
7.2.2 停掉两台从服务器的从服务

 stop slave;

7.2.3 在主服务器上插入

insert into ergou values('1','this is master');

7.2.4 在从服务器1上插入

insert into ergou values('2','this is slave1');

7.2.5 在从服务器2上插入

insert into ergou values('3','this is slave2');

7.2.6 在客户端上测试读数据, 两台服务器交替显示数据
在这里插入图片描述
7.2.7 在客户端插入数据

 insert into ergou values('4','this is write test');

7.2.8 客户端上查看,依旧是交替显示,没有刚才插入的数据
在这里插入图片描述
7.2.9 分别在两台从服务器上查看,也都没有刚才插入的数据
在这里插入图片描述 在这里插入图片描述
7.2.10 再在主服务器上查看,则有刚才插入的数据
在这里插入图片描述

8.结论

上述操作在主从同步的基础上实现了mysql的读写分离,而amoeba充当代理服务器,负责将客户的请求进行转发,分配到相应的服务器。

发布了21 篇原创文章 · 获赞 5 · 访问量 518
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 书香水墨 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览