MySQL-Amoeba读写分离
Amoeba是基于Java语言编写的软件,所以要首先构建Java环境
实验环境
前提:一主两从已经建立
192.168.4.111 主库
192.168.4.112 从库
192.168.4.115 从库
192.168.4.144 安装中间件amoeba
192.168.4.113 安装mysql客户端,登录amoeba测试
挂载挂载镜像文件
mount -o loop amoeba-n.iso /iso
cd iso && ll
-r-xr-xr-x 1 root root 3302165 6月 12 2015 amoeba-mysql-1.3.1-BETA.zip #amoeba软件包
-r-xr-xr-x 1 root root 138021223 6月 12 2015 jdk-7u40-linux-x64.gz #Java语言环境jdk软件包
安装Java环境
tar -zxvf jdk-7u40-linux-x64.gz -C /usr/local/ #解压并放到local路径下
mv /usr/local/jdk1.7.0_40 jdk #更改名称为jdk
vim /etc/profile #增加以下内容
JAVA_HOME=/usr/local/jdk
export JAVA_HOME
PATH=$JAVA_HOME/bin:$PATH
export PATH
CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar:$CLASSPATH
export CLASSPATH
. /etc/profile #刷新环境变量
java -version #查看java的版本
安装amoeba服务器
1.解压amoeba压缩包
unzip amoeba-mysql-1.3.1-BETA.zip -d /usr/local/amoeba #安装到/usr/local下
2.修改amoeba配置文件
配置文件结构
#配置文件其实就是三个区域
server>
这个区域声明的是客户端,如php连接amoeba中间件的用户名称、密码、访问端口
</server>
<dbServerList> #库列表
<dbServer name="server1"> #声明每一个库
这个区域声明的是一个主库/从库,包括数据库的ip、端口、数据库授权amoeba连接的用户及密码,以及共享的库名称。每个dbserver只声明一个库,如果有多个库,不论主从,则需要在声明多个dbserver,每一个dbserver的name值不能相同。
</dbServer>
<dbServer name="master/slave" virtual="true"> #声明主库池和从库池
这个区域声明的是主库池和从库池,每个库都是上边声明好的,主库写到一个池里,从库写到一个池里,为读写分离做分组准备
</dbServer>
</dbServerList>
<queryRouter class="com.meidusa.amoeba.mysql.parser.MysqlQueryRouter"> #查询的路由表信息
这里设置的是master(上边已经声的),执行的是写操作。slave(上边已经声明的),执行的是读操作,从而实现读写分离
</queryRouter>
配置文件解析
vim /usr/local/amoeba/conf/amoebaxml
<?xml version="1.0" encoding="gbk"?>
<!DOCTYPE amoeba:configuration SYSTEM "amoeba.dtd">
<amoeba:configuration xmlns:amoeba="http://amoeba.meidusa.com/">
<server>
<!-- proxy server�Ķ˿� -->
<property name="port">8066</property> #php连接amoeba中间件的端口,可以修改
<!-- proxy server��IP -->
<!--
<property name="ipAddress">127.0.0.1</property> #默认注释了,监听的地址,修改为amoeba端ip
-->
<!-- proxy server net IO Read thread size -->
<property name="readThreadPoolSize">20</property>
<!-- proxy server client process thread size -->
<property name="clientSideThreadPoolSize">30</property>
<!-- mysql server data packet process thread size -->
<property name="serverSideThreadPoolSize">30</property>
<!-- socket Send and receive BufferSize(unit:K) -->
<property name="netBufferSize">128</property>
<!-- Enable/disable TCP_NODELAY (disable/enable Nagle's algorithm). -->