环境介绍,Alvin.zeng
master--IP:192.168.100.206
slave---IP:192.168.100.214
Amoeba--IP:192.168.100.215


一.安装.JDK
#:wgethttp://download.oracle.com/otn-pub/java/jdk/7u40-b43/jdk-7u40-linux-x64.tar.gz?AuthParam=1380445567_a84768e3a5d3481661dc1d57002eedae
#:tar-xvfjdk-7u40-linux-x64.tar.gz
#:vim/etc/profile
JAVA_HOME=/Amoeba/jdk1.7.0_40
exportJAVA_HOME

PATH=$JAVA_HOME/bin:$PATH
exportPATH

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

二.安装:Amoeba
#:wgethttp://nchc.dl.sourceforge.net/project/amoeba/Amoeba%20for%20mysql/amoeba-mysql-1.3.1-BETA.zip
#:mkdir/usr/local/amoeba
#:unzipamoeba-mysql-1.3.1-BETA.zip-d/usr/local/amoeba
#:chmod-R+x/usr/local/amoeba/bin/

三:主从都需要执行建立用户授权
mysql-->grantallprivilegeson*.*toamoeba@'%'identifiedby'amoeba123';
mysql-->flushprivileges;

四.配置:Amoeba
配置文件位于conf目录下,执行文件位于bin目录下,解压后发现bin目录下的启动文件没有可执行权限,请执行:chmod-R+x/usr/local/amoeba/bin/

AmoebaForMySQL的使用非常简单,所有的配置文件都是标准的XML文件,总共有四个配置文件。分别为:

◆amoeba.xml:主配置文件,配置所有数据源以及Amoeba自身的参数设置;实现主从的话配置这个文件就可以了;

◆rule.xml:配置所有Query路由规则的信息;

◆functionMap.xml:配置用于解析Query中的函数所对应的Java实现类;

◆rullFunctionMap.xml:配置路由规则中需要使用到的特定函数的实现类;


下面我们就来通过更改amoeba.xml配置文件实现mysql主从读写分离,我的配置如下:




9006


192.168.100.215





20


30


30


128


true


root


123456



60





com.meidusa.amoeba.net.AuthingableConnectionManager













defaultManager


3306


192.168.100.206

test


amoeba



amoeba123






200
200
10
600000
600000
true
true







defaultManager


3306


192.168.100.214


test


amoeba



amoeba123






200
200
10
600000
600000
true
true









1


server1






1


server1,server2






${amoeba.home}/conf/rule.xml
${amoeba.home}/conf/functionMap.xml
${amoeba.home}/conf/ruleFunctionMap.xml
1500

master
master
slave

true


五:启动Amoeba
#:cd/usr/local/amoeba/bin

这种启动方便看nohup.log日志.防止提示溢出
#:nohupbash-xamoeba&


六:测试Amobea负载
(1)在zytest里面临时新建一个alvin表.
mysql-->mysql
mysql-->createtablealvin(idint(10),namechar(10));

(2)在从上stopslave用来临时验证测试.测试成功后在startslave;
mysql-->stopslave;

(3)在主(master)操作.插入一条数据.
mysql-->insertintoalvinvalues(1,'master');

(4)在从(slave)操作,插入一条数据.
mysql-->insertintoalvinvalues(2,'slave');

(5)在安装amoeba的机器登陆验证.
mysql-uroot-p123456-h192.168.100.215-P9006

amoeba@zytest13:10>usetest;

amoeba@zytest13:10>select*fromalvin;
+------+--------+
|id|name|
+------+--------+
|1|master|
+------+--------+
1rowinset(0.02sec)

amoeba@zytest13:40>select*fromalvin;
+------+-------+
|id|name|
+------+-------+
|2|slave|
+------+-------+
1rowinset(0.00sec)
主从各读一次.OK

(6)验证写入数据.
amoeba@zytest13:40>insertintoalvinvalues(3,'masterupdate');
QueryOK,1rowaffected,1warning(0.01sec)

amoeba@zytest13:42>select*fromalvin;
+------+------------+
|id|name|
+------+------------+
|1|master|
|3|masterupda|
+------+------------+
2rowsinset(0.01sec)

amoeba@zytest13:42>select*fromalvin;
+------+-------+
|id|name|
+------+-------+
|2|slave|
+------+-------+
1rowinset(0.00sec)
OK.验证成功.

七:常见错误.
说明:如果出现协议栈大小错误.最少不小于.228k
解决如下:
#:vimamobea
DEFAULT_OPTS="-server-Xms256m-Xmx256m-Xss228k"-->将此处变量的最后一个.128k改成.228K在重新启动脚本.


八:常用配置写法.
(1)如果负载多个库,软件会根据你用户授权来决定对哪些库有权限.
grantallprivilegeson*.*toamoeba@'%'identifiedby'amoeba123';这里写的是all那么就是对所有的库有权限(会自动负载所有的库).
上面配置文件的库名test.根据这个语句来决定.如果是all.那么直接用写test来测试.方便一点.


(2)一主一从的负载写法一:
主只写.server1
从只读.server2

(3)一主一从的负载写法:
主负写:server1
主也负责读,从也负责读.比例1:1第一读.从.第二次读住.循环写的话,只能写主.server1,server2

(4)一主多从的负载写法:
比如.一台主.3台从.在最上面定义了.server1(master)server2(slave1)server3(slave2)server4(slave3)
1主只写:server1
3从负载读server2,server3,server4
权重:1:13台轮询各一次.持续循环

(5)比如我想要.slave1权重高一点.其它的.2台从.每次读一次.slave1读.2次.
server2,server2,server3,server4