注:
本文是自己写给自己的,主要是为了整理过段时间面试时所需要的项目思路!!
有欠缺的或不对的地方,请各位帮忙指正!
话不多说,先上图!!!
1、读写分离是什么?
说简单点,就是将数据库的读,写两个操作分开实现。由一台Master服务器来实现MySQL写的操作,由另一台slave服务器来实现MySQL读的操作。
2、读写分离解决的问题:
因为在对数据库进行“写”的操作是比较耗时的,但数据库的“读”操作只需要很短的时间,数据库的写入就会很大
程度上影响查询的效率。那么此时就需要通过将数据库的“写”和“读”分开,来减轻数据库的压力,提高性能。
3、项目实施:
上面架构图基本和我们实验时的架构图相差无几。
在这里client要想获取数据库的信息,首先client将请求发送到amoeba中,由amoeba来实现读写分离的操作,将用户不同的操作请求发送到不同的数据库上,再由数据库调取相应的信息来反馈给client 。这就是整个读写分离所要实现的流程,
(1)那么首先在这里要考虑到的一个问题,因为读写分离,使得一台服务器实现MySQL读的操作,另一台服务器实现MySQL写的操作。那么如何来保证不管amoeba将client的操作请求转发到那一台数据库服务器上,client都能获取到自己想要的信息呢? 换句话来说就是如何将两台MySQL服务器上的信息实现同步呢?
对!主从复制。。在这里使用MySQL的主从复制再合适不过了。
(2)amoeba
在整个实验中,真正来实现MySQL数据库读写分离的就是amoeba。所以说这是一个重点。
amoeba主要是在应用层访问MySQL的时候充当query 路由功能。位于Client、DB Server(s)之间。对客户端透明。具有负载均衡、高可用性、Query过滤、读写分离、可路由相关的query到目标数据库、可并发请求多台数据库合并结果。 在Amoeba上面你能够完成多数据源的高可用、负载均衡、数据切片的功能。目前在很多企业的生产线上面使用。
4、具体配置:
一、准备工作
1、防火墙
2、看代理服务器和主从服务器是否能ping通
3、完成主从复制给用户权限
二、在代理服务器上安装java环境
1、上传jdk1.6版本jdk-6u14-linux-x64.bin
2、 chmod +x jdk-6u14-linux-x64.bin (给执行权限)
./jdk-6u14-linux-x64.bin(执行)
mv jdk1.6.0_14/ /usr/local/jdk1.6(将执行文件拷贝到/usr/local/jdk1.6)
vim /etc/profile (改变环境变量)
export JAVA_HOME=/usr/local/jdk1.6
export CLASSPATH=
C
L
A
S
S
P
A
T
H
:
CLASSPATH:
CLASSPATH:JAVA_HOME/bin:
J
A
V
A
H
O
M
E
/
j
r
e
/
l
i
b
e
x
p
o
r
t
P
A
T
H
=
JAVA_HOME/jre/lib export PATH=
JAVAHOME/jre/libexportPATH=JAVA_HOME/lib:
J
A
V
A
H
O
M
E
/
j
r
e
/
b
i
n
:
JAVA_HOME/jre/bin:
JAVAHOME/jre/bin:PATH:
H
O
M
E
/
b
i
n
e
x
p
o
r
t
A
M
O
E
B
A
H
O
M
E
=
/
u
s
r
/
l
o
c
a
l
/
a
m
o
e
b
a
/
e
x
p
o
r
t
P
A
T
H
=
HOME/bin export AMOEBA_HOME=/usr/local/amoeba/ export PATH=
HOME/binexportAMOEBAHOME=/usr/local/amoeba/exportPATH=PATH:$AMOEBA_HOME/bin(在配置文件末尾添加)
source /etc/profile(使环境变量生效)
三、安装Amoeba软件
grant all privileges on . to ‘zhao’@‘192.168.8.109’ identified by ‘zgszgs’;
(给代理服务器访问主从服务器的权限)
mkdir /usr/local/amoeba
tar zxf amoeba-mysql-binary-2.2.0.tar.gz -C /usr/local/amoeba/
#chmod -R 755 /usr/local/amoeba/
四、配置Amoeba读写分离,两个Slave读负载均衡
mysql> grant all on . to ‘zhao’@‘192.168.8.107’ identified by ‘zgszgs’;
#vim /usr/local/amoeba/conf/amoeba.xml (代理服务器)
zgs (此处用户是外界连接代理服务器) zgszgsmaster
master
slaves
vim /usr/local/amoeba/conf/dbServers.xml
zhao
zgszgs(此处用户是用来让主从服务器允许代理服务器访问)
slave
启动amoeba
/usr/local/amoeba/bin/amoeba start
五、验证
连接MySQL数据库。创建一个表,检查是否可以正常查询,添加。
关闭slave服务器(读)此时进行查询是无法查询表的内容,但可以正常向表内添加信息。
同理关闭masert服务器(写),则无法向表内添加信息。