Mysql数据库下的读写分离

Mysql读写分离Read/Write Splitting

原理:让主数据库处理增、改、删操作(INSERTUPDATEDELETE),而从数据库处理SELECT查询操作。这样能有效地减轻数据库压力,也能减轻io压力。

实现方法:

1.通过更改PHP页面代码.

2.通过软件在数据库前面搭建一个分发器.

在这里主要介绍通过amoeba这款软件搭建分发器的方法.

 

amoeba的工作原理

amoebaapacheMysql之间起到一个承上启下的作用

         apache发送过来的请求进行分类如果是增改的操作则交给主Mysql服务器,如果是查询操作则交给从Mysql服务器.

         apache只会以为amoebaMysql服务器并将数据发给amoeba,并不知道后方真正的Mysql服务器的地址和帐号,那么这就需要amoeba为前端apache开通一个用户以便apache连接了.

         同理amoeba还需要连接后方真实Mysql数据库,也需要每一台真实数据库为amoeba开通一个用户以便连接.

 

实验环境:

在此首先要搭建一个Mysql AB复制的环境.主服务器用来进行增改的操作,从服务器用来进行查询操作

其次还需要一台机器安装amoeba作为Mysql读写分离的分发器.

另外需要一台apache服务器提供网页.

 

实验流程:

MysqlAB复制具体如何配置请参考我之前所写的文章<Mysql AB复制>

http://kys1230.blog.51cto.com/990812/1184551  

1.保证自己的JAVA版本在1.5.0以上

查看命令

[root@localhost amoeba]# java -version

java version "1.5.0"

如果不是1.5.0则需要升级.

安装以后需要重新配置JAVA路径等参数

#vim /etc/profile

export JAVA_HOME=/usr/java/jdk1.5.0/

export PATH=$JAVA_HOME/bin:$PATH:$HOME/bin

export CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar

export PATH JAVA_HOME CALSSPATH

/etc/profile文件修改后立即生效,可以使用以下命令

#. /etc/profile  

: ./etc/profile中间有空格.

 

2.安装amoeba软件

我所使用的是一个绿色软件解压即可使用.

所以先为amoeba创建一个目录;

[root@localhost ~]# ls /usr/local/amoeba

amoeba解压到指定目录中;

[root@localhost ~]# tar fvxz amoeba-mysql-binary-2.1.0-RC5.tar.gz -C /usr/local/amoeba/

 

3.配置amoeba

amoeba的两个配置文件amoeba.xmldbServers.xml

  3.1需要在amoeba.xml文件中定义端口以及前端apache连接amoeba的用户名密码与地址,还需要告诉amoeba哪台用来进行增改的操作,哪些用来进行查询的操作.

<property name="port">3306</property>

#设置端口

<property name="ipAddress">192.168.18.53</property>

#设置本机IP地址

<property name="k1">root</property>

#设置前端apache连接所用的用户名

<property name="123"></property>

#设置前端apache连接所用的密码

 

<property name="defaultPool">Master</property>

#设置默认池为Master

<property name="writePool">Master</property>

#设置写入池为Master

<property name="readPool">SlavePool</property>

#设置读取池为SlavePool

 

  3.2需要在db Servers.xml文件中定义连接后方真是Mysql的用户名密码以及MysqlIP地址

<property name="k2">root</property>

#设置amoeba连接后端Mysql所用的用户名

<property name="123">password</property>

#设置amoeba连接后端Mysql所用的密码

 

<dbServer name="Master"  parent="abstractServer">

         <factoryConfig>

                   <property name="ipAddress">192.168.18.51</property>

         </factoryConfig>

</dbServer>

#设置Master服务器IP地址为192.168.18.51

 

<dbServer name="Slave1"  parent="abstractServer">

         <factoryConfig>

                   <property name="ipAddress">192.168.18.52</property>

         </factoryConfig>

</dbServer>

#设置Slave1服务器IP地址为192.168.18.52

 

<dbServer name=" SlavePool " virtual="true">

         <poolConfig class="com.meidusa.amoeba.server.MultipleServerPool">

                   <property name="loadbalance">1</property>

                  <property name="poolNames">Slave1</property>

         </poolConfig>

</dbServer>

#建立一个SlavePool池其中包含Slave1这台服务器

##此功能用于多台Mysql群集提供读取操作可以设置多个Slave服务器并且添加到SlavePool池中.

例如:

<dbServer name=" SlavePool " virtual="true">

         <poolConfig class="com.meidusa.amoeba.server.MultipleServerPool">

                   <property name="loadbalance">1</property>

                  <property name="poolNames">Slave1,Slave2,Slave3</property>

         </poolConfig>

</dbServer>

 

4.启动amoeba

/usr/local/amoeba/bin/amoeba start

 

5.配置apache服务器的PHP页面

将所有需要连接数据库的PHP代码修改一下

连接地址改成amoeba的地址

用户名,密码使用amoebaamoeba.xml文件中定义的即可.

 

OK.到这里基本就完事了..

希望对大家有所帮助吧!

附件1:jdk1.5.0安装包

http://down.51cto.com/data/765329

附件2:amoeba

http://down.51cto.com/data/765330

 

 

你可能感兴趣的:(mysql,amoeba,Mysql读写分离)