一. 准备工作:
1. 正确安装JDK1.7 ,
2.两台服务器192.168.0.100 和 192.168.0.101,
3.首先正确搭建两台mysql的master-slave关系. 搭建步骤参考 http://blog.csdn.net/helloznan/article/details/52371814
二. 下载安装
1.http://sourceforge.net/projects/amoeba/files/,下载后是压缩包形式,在电脑目录中创建一个文件夹命名为amoeba,将压缩包解压,解压后的文件如下图所示:
2.启动bin\launcher.bat启动amoeba,如果看到下图,说明成功
3.了解amoeba配置
Amoeba总共有7个配置文件,分别如下:
#/* Amoeba主配置文件($AMOEBA_HOME/conf/amoeba.xml),用来配置Amoeba服务的基本参数,如Amoeba主机地址、端口、认证方式、用于连接的用户名、密码、线程数、超时时间、其他配置文件的位置等。
#/* 数据库服务器配置文件($AMOEBA_HOME/conf/dbServers.xml),用来存储和配置Amoeba所代理的数据库服务器的信息,如:主机IP、端口、用户名、密码等。
#/* 切分规则配置文件($AMOEBA_HOME/conf/rule.xml),用来配置切分规则。
#/* 数据库函数配置文件($AMOEBA_HOME/conf/functionMap.xml),用来配置数据库函数的处理方法,Amoeba将使用该配置文件中的方法解析数据库函数。
#/* 切分规则函数配置文件($AMOEBA_HOME/conf/ruleFunctionMap.xml),用来配置切分规则中使用的用户自定义函数的处理方法。
#/* 访问规则配置文件($AMOEBA_HOME/conf/access_list.conf),用来授权或禁止某些服务器IP访问Amoeba。
#/* 日志规格配置文件($AMOEBA_HOME/conf/log4j.xml),用来配置Amoeba输出日志的级别和方式。
4. 配置dbServers.xml
再创建两个实际的server.都继承了相同的父类,唯一不同的是他们的IP
再配置一个虚拟的server,相当于自由组合实际server为一个server,这里命名为multiPool,名称可以自定义.
5.配置amoeba.xml
配置amoeba的连接端口,以及amoeba的登录帐号密码,与dbServers.xml中的帐号密码不同,dbServers.xml是配置后端mysql的帐号密码
设置默认数据库为master,以及读和写策略,这里读策略是从虚拟服务中轮询, 当对一条sql语句解析不出的时候,无法正确路由到writePool或readPool时,就会路由到defaultPool.所以defaultPool一般配置为主节点.
重启amoeba.xml
6. 测试
登录amoeba
cmd > mysql -uroot -padmin -P8066 -h127.0.0.1
a) 这里的帐号密码是在amoeba.xml中配置的登录密码,不是后端mysql的帐号密码
b) -P8066为amoba.xml的端口
c) 经测试, -h127.0.0.1不可缺少,否则就会路由到defaultPool中,只有制定了-h才能完成路由,不知道是什么原因.
由于已经配置了主从数据库,此时master库的数据变化,已经自动复制到slave中,所以手动修改slave表Student,把id为1的记录name值进行修改,只要与master中的值不一致即可.此时不可再修改master的student表的ID=1记录,不然又同步到slave中了,然后执行select * from Student where id=1看看是不是查询出了slave中的值.
可以修改虚拟服务,设置多个服务轮训.如
多次查询发现结果是不一样的. 至此,amoeba安装配置成功
=====================================================
问题:
1. 在使用amoeba时, 应用层spring+hibernate,通过JpaTransactionManager测试事务.
提交然后回滚.发现update语句是被回滚了,但是insert没有被回滚.所以是否采用amoeba作为读写分离方案, 还要慎重考虑. 有知道原因的朋友,请给我留言.或者其他解决方案否?