Amoeba for MySQL致力於MySQL的分佈式數據庫前端代理層,它主要在應用層訪問MySQL的時候充當query 路由功能,專注 分佈式數據庫 proxy 開發。座落與Client、DB Server(s)之間。對客戶端透明。具有負載均衡、高可用性、Query過濾、讀寫分離、可路由相關的query到目標數據庫、可併發請求多臺數據庫合併結果。 在Amoeba上面你能夠完成多數據源的高可用、負載均衡、數據切片的功能。目前在很多企業的生產線上面使用。
www.centos.bz這裏使用Amoeba for mysql來實現mysql的讀寫分離,起到緩解主數據庫服務器的壓力,下面是實現這一方案的架構圖:
mysql主從複製配置
因爲讀寫分離,所以一臺負責mysql的寫操作,另一臺負責mysql的讀操作,所以我們這裏使用mysql的主從複製再合適不過了。關於這一配置,請移步:
http://www.centos.bz/2011/07/linux-mysql-replication-sync-configure/
java環境配置
Amoeba框架是基於Java SE1.5開發的,建議使用Java SE 1.5版本。目前Amoeba經驗證在JavaTM SE 1.5和Java SE 1.6能正常運行,(可能包括其他未經驗證的版本)。
Java SE 1.6下載地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk-6u32-downloads-1594644.html
我這裏下載jdk-6u32-linux-i586-rpm.bin。
下載完成後執行sh jdk-6u32-linux-i586-rpm.bin開始安裝,將會安裝到/usr/java/jdk1.6.0_32目錄。
Amoeba的安裝
Amoeba下載地址:http://sourceforge.net/projects/amoeba/
下面是安裝步驟:
- cd /tmp
- mkdir /usr/local/amoeba
- wget http://softlayer.dl.sourceforge.net/project/amoeba/Amoeba%20for%20mysql/2.x/amoeba-mysql-binary-2.1.0-RC5.tar.gz
- tar xzf amoeba-mysql-binary-2.1.0-RC5.tar.gz -C /usr/local/amoeba
配置用戶環境變量
- vi ~/.bash_profile
設置爲:
- PATH=$PATH:$HOME/bin:/usr/local/amoeba/bin
- JAVA_HOME=/usr/java/jdk1.6.0_32
- export JAVA_HOME
- export PATH
立即生效:
- source ~/.bash_profile
Amoeba for mysql配置
配置Amoeba for mysql的讀寫分離主要涉及兩個文件:
1、/usr/local/amoeba/conf/dbServers.xml
此文件定義由Amoeba代理的數據庫如何連接,比如最基礎的:主機IP、端口、Amoeba使用的用戶名和密碼等等。
2、/usr/local/amoeba/conf/amoeba.xml
此文件定義了Amoeba代理的相關配置。
dbServers.xml文件配置
abstractServer配置:
- <dbServer name="abstractServer" abstractive="true">
- <factoryConfig class="com.meidusa.amoeba.mysql.net.MysqlServerConnectionFactory">
- <property name="manager">${defaultManager}</property>
- <property name="sendBufferSize">64</property>
- <property name="receiveBufferSize">128</property>
- <!-- mysql port -->
- <property name="port">3306</property>
- <!-- mysql schema -->
- <property name="schema">dbname</property>
- <!-- mysql user -->
- <property name="user">root</property>
- <!-- mysql password -->
- <property name="password">root</property>
- </factoryConfig>
- <poolConfig class="com.meidusa.amoeba.net.poolable.PoolableObjectPool">
- <property name="maxActive">500</property>
- <property name="maxIdle">500</property>
- <property name="minIdle">10</property>
- <property name="minEvictableIdleTimeMillis">600000</property>
- <property name="timeBetweenEvictionRunsMillis">600000</property>
- <property name="testOnBorrow">true</property>
- <property name="testWhileIdle">true</property>
- </poolConfig>
- </dbServer>
此部分定義真實mysql服務器的端口,數據庫名稱,mysql用戶及密碼。
主從數據庫定義:
- <dbServer name="Master" parent="abstractServer">
- <factoryConfig>
- <!-- mysql ip -->
- <property name="ipAddress">192.168.0.1</property>
- </factoryConfig>
- </dbServer>
- <dbServer name="Slave1" parent="abstractServer">
- <factoryConfig>
- <!-- mysql ip -->
- <property name="ipAddress">192.168.0.2</property>
- </factoryConfig>
- </dbServer>
- <dbServer name="Slave2" parent="abstractServer">
- <factoryConfig>
- <!-- mysql ip -->
- <property name="ipAddress">192.168.0.3</property>
- </factoryConfig>
- </dbServer>
- <dbServer name="virtualSlave" virtual="true">
- <poolConfig class="com.meidusa.amoeba.server.MultipleServerPool">
- <!-- Load balancing strategy: 1=ROUNDROBIN , 2=WEIGHTBASED , 3=HA-->
- <property name="loadbalance">1</property>
- <!-- Separated by commas,such as: server1,server2,server1 -->
- <property name="poolNames">Slave1,Slave2</property>
- </poolConfig>
- </dbServer>
此部分定義主服務器,從服務器,及從服務器連接池。這裏只定義數據庫地址,它們的用戶及密碼就是上面的abstractServer裏的設置。注意用來連接真實mysql服務器的用戶必須擁有遠程連接權限。
amoeba.xml配置
amoeba連接驗證配置:
- <property name="authenticator">
- <bean class="com.meidusa.amoeba.mysql.server.MysqlClientAuthenticator">
- <property name="user">root</property>
- <property name="password">root</property>
- <property name="filter">
- <bean class="com.meidusa.amoeba.server.IPAccessController">
- <property name="ipFile">${amoeba.home}/conf/access_list.conf</property>
- </bean>
- </property>
- </bean>
- </property>
這裏定義連接amoeba時用來驗證的用戶及密碼。
讀寫分離配置:
- <property name="defaultPool">Master</property>
- <property name="writePool">Master</property>
- <property name="readPool">virtualSlave</property>
defaultPool:配置了默認的數據庫節點,一些除了SELECTUPDATEINSERTDELETE的語句都會在defaultPool執行。
writePool :配置了數據庫寫庫,通常配爲Master,如這裏就配置爲之前定義的Master數據庫。
readPool :配置了數據庫讀庫,通常配爲Slave或者Slave組成的數據庫池,如這裏就配置之前的virtualSlave數據庫池。
amoeba啓動
啓動命令:
- amoeba start
此命令以前臺的方式啓動,會輸出啓動時的信息,檢查沒有錯誤信息後,中斷,並後臺運行:
- amoeba start &
FAQ
1、無法正常連接?
首先根據執行amoeba start輸出的信息排除配置文件沒有問題,之後確認mysql用戶是否有遠程連接的權限,然後檢查網站的數據庫配置文件是否設置正確。
2、如何配置網站數據庫連接文件?
默認的端口應該爲8066,用戶及密碼在amoeba.xml裏設置。
參考:http://docs.hexnova.com/amoeba/single-dbserver.html
http://docs.hexnova.com/amoeba/rw-splitting.html
轉載請註明《文章來源:http://www.centos.bz/2012/05/amoeba-for-mysql/》