一、背景知識
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
五、參考文獻
