一、背景知识
Amoeba 是阿里巴巴的技术陈思儒开始的一个开源项目,它是分布式数据库Proxy解决方案。Amoeba框架是基于Java SE 1.5开发的,在安装Amoeba之前需要先安装Java环境。经验证,Amoeba在Java SE 1.5和Java SE 1.6上能正常运行。
(一) Amoeba包括3个产品:Amoeba From Sourceforge
1. Amoeba for MySQL是Amoeba开源社区发布的一款MySQL数据库中间层代理软件,致力于数据库的切分整合、负载均衡、高可用性等;
2. Amoeba for Aladdin支持所有提供jdbc驱动的数据库(Oracle、SQL Server、MySQL等) ;
3. Amoeba for MongoDB支持NoSQL数据库MongoDB;
(二) 其他的MySQL分布式数据库系统的中间层软件还有MySQL Proxy,HiveDB。Amoeba for MySQL相较于其他软件有以下优势:
1. 基于XML的配置文件,用SQLJEP语法编写规则,配置比较简单(MySQL Proxy需要编写大量Lua脚本才能实现),有比较完善的使用帮助文档
2. 同时支持水平切分和垂直切分(HiveDB只支持水平切分)
3. 目前的版本已经比较稳定,已有很多企业用于生产环境
4. 支持HA机制、支持活动连接数均衡、支持权重配置
相较于其他软件有以下劣势:
1. Amoeba for MySQL不支持事务:其实,分布式事务的问题是所有数据库中间层普遍面临的问题,不是Amoeba独有的问题;目前通常的解决办法是,将事务拆分成几个单数据库内的小事务,由应用程序进行总控。
2. Amoeba for MySQL不支持跨节点JOIN:同样,这个问题也不是Amoeba独有的,通常的解决办法是由应用程序先从一个节点取出数据,然后由应用程序去其他节点JOIN。
3. Amoeba for MySQL不支持跨节点排序:这个问题也不是Ameoba独有的,通常的解决办法是由应用程序从多个节点中取出数据,然后进行排序。
4. Amoeba for MySQL不适合返回大量(超过10万)数据的查询。
5. Amoeba for MySQL不支持分库分表,只能做到分数据库实例。
二、配置过程
下面是Amoeba for MySQL的基础搭建(不包含读写分离和数据分片):
(一) 下载JDK:jdk-6u30-linux-i586.bin(解压版安装)
(二) 安装和验证JDK:Ubuntu10下安装JAVA JDK
(三) 下载Amoeba for MySQL:amoeba-mysql-binary-2.1.0-RC5.tar.gz
(四) 安装和验证Amoeba for MySQL:
1. 拷贝文件到/tmp目录:E:\>pscp.exe amoeba-mysql-binary-2.1.0-RC5.tar.gz chen@192.168.1.147:/tmp/
2. 在/usr/local创建文件夹:#mkdir amoeba
3. 进入文件夹:#cd amoeba
4. 解压文件到/usr/local/amoeba:
#tar -zxvf /tmp/amoeba-mysql-binary-2.1.0-RC5.tar.gz
5. 验证Amoeba是否安装成功的命令(如下图):/usr/local/amoeba/bin/amoeba
(图1:安装成功)
6. 启动amoeba:/usr/local/amoeba/bin/amoeba start
(图2:启动成功)
7. 修改/usr/local/amoeba/conf/dbServers.xml文件:(需要根据自己的情况)
<property name="schema">mysql</property>
<property name="user">gaizai</property>
<property name="password">123456</property>
<property name="ipAddress">192.168.1.145</property>
8. 只要上面的参数对了,amoeba.xml是不需要修改的,直接输入下面的命令,密码为空(默认为空),直接回车就可以进入了:
#mysql -u root -p -h 192.168.1.147 -P 8066
或者#mysql -u root -p -h 127.0.0.1 -P 8066
如果开启的amoeba的终端没有报错,恭喜你,搭建amoeba for mysql成功了!!下面是对配置的一些不错测试:
9. 使用SQLyog进行测试:
(图3:测试空密码)
10. 可以尝试修改amoeba.xml:
<property name="user">testuser</property>
<property name="password">password</property>
登陆应该改为:#mysql -u testuser -p -h 192.168.1.147 -P 8066,密码为password,这样一样能登陆成功。
11. 可以尝试使用SQLyog进行登陆
(图4:测试帐号密码)
三、注意事项
(一) 验证Amoeba是否安装成功的命令:/usr/local/amoeba/bin/amoeba 要全部输入,如果是进入到bin执行amoeba是不行的。
(二) #mysql -u root -p -h 127.0.0.1 -P 8066其中root和密码表示的是在amoeba.xml中配置的帐号密码。
(三) Amoeba主要配置文件:#/usr/local/amoeba/conf/*.xml
1. amoeba.xml用来配置Amoeba服务的基本参数,如Amoeba主机地址、端口、认证方式、用于连接的用户名、密码、线程数、超时时间、其他配置文件的位置等。
2. dbServers.xml用来存储和配置Amoeba所代理的数据库服务器的信息,如:主机IP、端口、用户名、密码等。
3. rule.xml用来配置切分规则。
4. ruleFunctionMap.xml用来配置切分规则中使用的用户自定义函数的处理方法。
5. functionMap.xml用来配置数据库函数的处理方法,Amoeba将使用该配置文件中的方法解析数据库函数。
6. access_list.conf用来授权或禁止某些服务器IP访问Amoeba。
7. log4j.xml,用来配置Amoeba输出日志的级别和方式。
(四) dbServers.xml中的loadbalance标签选项的3个定义:
1=ROUNDROBIN round robin
2=WEIGHTBASED weight based
3=HA high availability
四、错误与疑问
1. amoeba start之后,再用终端连接上mysql,出现了下面的错误:
(图5:错误信息)
这个错误是dbServers.xml中配置的mysql的连接存在问题,可以先使用里面的帐号测试登陆,进一步排除问题。
2. 下面两个图是启动amoeba的不同界面,为什么会有区别呢?用于调试:
(图6:有及时信息输出)
(图7:回到命令行了)
3. Amoeba的启动用户,需要是root嘛?
4. 如果你修改了配置,不要以为重启amoeba就可以了,如果你还是使用之前遗留的链接到MySQL的操作界面,那么你修改的文件是不会生效的,需要重新登录数据库,比如我是在IP147的机器上搭建amoeba的,如果是在本机打开终端的就需要关掉终端,重新打开,如果还是使用SQLyog的,那就需要断开,重新链接。
5. Amoeba Monitor Server的使用?
6. 什么是tar.gz?
解压:$ tar zxvf FileName.tar.gz
压缩:$ tar zcvf FileName.tar.gz DirName
五、参考文献