从前天到现在,终于是把amoeba的使用过程走了一边,用法是很简单只是需要我们进行简单的配置就可以。但是如果不知道它的工作原理的话,那就费劲了……
想起来从amoeba的安装,配置,调试真的是让人很揪心啊。为什么呢?下面是我从开始到最后所遇见的问题总结:
1,首先是在ubuntu下安装使用的,ubuntu也是这周才开始接触,有点儿陌生,处处遇到不懂的,jdk安装,mysql安装当然了都是源码的安装。这里对于我们的应用工具不推荐使用apt-get来自动的安装。由于不知道ubuntu这东西机制还是选择安装比较好啊。
2,jdk的环境变量,让我纠结一天的东西。明明配好了可是amoeba就是识别不了。报错……没有一点儿脾气啊。
3,amoeba的使用我
root@zhou:/home/zhouqian# $AMOEBA_HOME/bin/amoeba start
log4j:WARN log4j config load completed from file:/usr/local/amoeba/conf/log4j.xml
2011-11-18 09:11:42,489 INFO context.MysqlRuntimeContext - Amoeba for Mysql current versoin=5.1.45-mysql-amoeba-proxy-2.1.0-RC5
log4j:WARN ip access config load completed from file:/usr/local/amoeba/conf/access_list.conf
2011-11-18 09:11:56,770 INFO net.ServerableConnectionManager - Amoeba for Mysql listening on 0.0.0.0/0.0.0.0:8066.
2011-11-18 09:11:56,784 INFO net.ServerableConnectionManager - Amoeba Monitor Server listening on /127.0.0.1:4571.
不知道为什么必须是这个工作目录才能启动?很无解啊……
4,接着是让我最纠结的事,在水平分割时每次插入数据的时候总是插入两条(就是说每个服务器上面都插入了),整整一天的时间都没弄明白。结果在我哥们儿的协助下(又重新在他的上面安装了一边,不过这次快多了。10分钟的时间就搞定了,呵呵 小欣慰啊)为什么呢我怕是ubuntu的事儿,就换了个操作系统。结果还是那样,后来我哥们儿说让他试试结果通了。为什么额?????就是sql语句的:我的是
mysql> insert into test values(5,'c','c');
Query OK, 2 rows affected (0.12 sec)
ullnull
我哥们儿的是
mysql> insert into test(id,name,address) values(4,'c','c');
Query OK, 1 row affected (0.07 sec)
呵呵 发现了吧 原来是这里test(id,name,address)我当时还开玩笑的说:没必要那么麻烦写那么多。结果我就死在了这里……总结:为了省事儿结果费事儿。
查看了源码才知道原来它在判断的时候是通过传过来的值进行解析的:
<tableRule name="test" schema="db_amoeba" defaultPools="server1,server2">
<rule name="rule1" ruleResult="POOLNAME">
<parameters>ID</parameters>
<expression><![CDATA[
var division = ID % 2;
case division when 0 then 'server1';
when 1 then 'server2';
end case;
]]></expression>
</rule>