Mysql读写分离(Read/Write Splitting)
原理:让主数据库处理增、改、删操作(INSERT、UPDATE、DELETE),而从数据库处理SELECT查询操作。这样能有效地减轻数据库压力,也能减轻io压力。 实现方法: 1.通过更改PHP页面代码. 2.通过软件在数据库前面搭建一个分发器. 在这里主要介绍通过amoeba这款软件搭建分发器的方法. amoeba的工作原理 amoeba在apache与Mysql之间起到一个承上启下的作用 将apache发送过来的请求进行分类如果是增、删、改的操作则交给主Mysql服务器,如果是查询操作则交给从Mysql服务器. apache只会以为amoeba是Mysql服务器并将数据发给amoeba,并不知道后方真正的Mysql服务器的地址和帐号,那么这就需要amoeba为前端apache开通一个用户以便apache连接了. 同理amoeba还需要连接后方真实Mysql数据库,也需要每一台真实数据库为amoeba开通一个用户以便连接. 实验环境: 在此首先要搭建一个Mysql AB复制的环境.主服务器用来进行增、删、改的操作,从服务器用来进行查询操作 其次还需要一台机器安装amoeba作为Mysql读写分离的分发器. 另外需要一台apache服务器提供网页. 实验流程: Mysql的AB复制具体如何配置请参考我之前所写的文章<Mysql AB复制> http://kys1230.blog./990812/1184551 1.保证自己的JAVA版本在1.5.0以上 查看命令 [iyunv@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创建一个目录; [iyunv@localhost ~]# ls /usr/local/amoeba 将amoeba解压到指定目录中; [iyunv@localhost ~]# tar fvxz amoeba-mysql-binary-2.1.0-RC5.tar.gz -C /usr/local/amoeba/ 3.配置amoeba amoeba的两个配置文件amoeba.xml与dbServers.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的用户名密码以及Mysql的IP地址 <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的地址 用户名,密码使用amoeba在amoeba.xml文件中定义的即可. OK.到这里基本就完事了.. 附件我要去研究研究如何上传- -!会尽快发出相关软件包的.. 希望对大家有所帮助吧!
|