使用Amoeba for mysql實現mysql讀寫分離

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/
下面是安裝步驟:

  1. cd /tmp
  2. mkdir /usr/local/amoeba
  3. wget http://softlayer.dl.sourceforge.net/project/amoeba/Amoeba%20for%20mysql/2.x/amoeba-mysql-binary-2.1.0-RC5.tar.gz
  4. tar xzf amoeba-mysql-binary-2.1.0-RC5.tar.gz -C /usr/local/amoeba

配置用戶環境變量

  1. vi ~/.bash_profile

設置爲:

  1. PATH=$PATH:$HOME/bin:/usr/local/amoeba/bin
  2. JAVA_HOME=/usr/java/jdk1.6.0_32
  3.  
  4. export JAVA_HOME
  5. export PATH

立即生效:

  1. 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配置:

  1. <dbServer name="abstractServer" abstractive="true">
  2. <factoryConfig class="com.meidusa.amoeba.mysql.net.MysqlServerConnectionFactory">
  3. <property name="manager">${defaultManager}</property>
  4. <property name="sendBufferSize">64</property>
  5. <property name="receiveBufferSize">128</property>
  6.  
  7. <!-- mysql port -->
  8. <property name="port">3306</property>
  9.  
  10. <!-- mysql schema -->
  11. <property name="schema">dbname</property>
  12.  
  13. <!-- mysql user -->
  14. <property name="user">root</property>
  15.  
  16. <!-- mysql password -->
  17. <property name="password">root</property>
  18.  
  19. </factoryConfig>
  20.  
  21. <poolConfig class="com.meidusa.amoeba.net.poolable.PoolableObjectPool">
  22. <property name="maxActive">500</property>
  23. <property name="maxIdle">500</property>
  24. <property name="minIdle">10</property>
  25. <property name="minEvictableIdleTimeMillis">600000</property>
  26. <property name="timeBetweenEvictionRunsMillis">600000</property>
  27. <property name="testOnBorrow">true</property>
  28. <property name="testWhileIdle">true</property>
  29. </poolConfig>
  30. </dbServer>

此部分定義真實mysql服務器的端口,數據庫名稱,mysql用戶及密碼。
主從數據庫定義:

  1. <dbServer name="Master" parent="abstractServer">
  2. <factoryConfig>
  3. <!-- mysql ip -->
  4. <property name="ipAddress">192.168.0.1</property>
  5. </factoryConfig>
  6. </dbServer>
  7. <dbServer name="Slave1" parent="abstractServer">
  8. <factoryConfig>
  9. <!-- mysql ip -->
  10. <property name="ipAddress">192.168.0.2</property>
  11. </factoryConfig>
  12. </dbServer>
  13. <dbServer name="Slave2" parent="abstractServer">
  14. <factoryConfig>
  15. <!-- mysql ip -->
  16. <property name="ipAddress">192.168.0.3</property>
  17. </factoryConfig>
  18. </dbServer>
  19. <dbServer name="virtualSlave" virtual="true">
  20. <poolConfig class="com.meidusa.amoeba.server.MultipleServerPool">
  21. <!-- Load balancing strategy: 1=ROUNDROBIN , 2=WEIGHTBASED , 3=HA-->
  22. <property name="loadbalance">1</property>
  23.  
  24. <!-- Separated by commas,such as: server1,server2,server1 -->
  25. <property name="poolNames">Slave1,Slave2</property>
  26. </poolConfig>
  27. </dbServer>

此部分定義主服務器,從服務器,及從服務器連接池。這裏只定義數據庫地址,它們的用戶及密碼就是上面的abstractServer裏的設置。注意用來連接真實mysql服務器的用戶必須擁有遠程連接權限。

amoeba.xml配置

amoeba連接驗證配置:

  1. <property name="authenticator">
  2. <bean class="com.meidusa.amoeba.mysql.server.MysqlClientAuthenticator">
  3.  
  4. <property name="user">root</property>
  5.  
  6. <property name="password">root</property>
  7.  
  8. <property name="filter">
  9. <bean class="com.meidusa.amoeba.server.IPAccessController">
  10. <property name="ipFile">${amoeba.home}/conf/access_list.conf</property>
  11. </bean>
  12. </property>
  13. </bean>
  14. </property>

這裏定義連接amoeba時用來驗證的用戶及密碼。
讀寫分離配置:

  1. <property name="defaultPool">Master</property>
  2. <property name="writePool">Master</property>
  3. <property name="readPool">virtualSlave</property>

defaultPool:配置了默認的數據庫節點,一些除了SELECTUPDATEINSERTDELETE的語句都會在defaultPool執行。
writePool :配置了數據庫寫庫,通常配爲Master,如這裏就配置爲之前定義的Master數據庫。
readPool :配置了數據庫讀庫,通常配爲Slave或者Slave組成的數據庫池,如這裏就配置之前的virtualSlave數據庫池。

amoeba啓動

啓動命令:

  1. amoeba start

此命令以前臺的方式啓動,會輸出啓動時的信息,檢查沒有錯誤信息後,中斷,並後臺運行:

  1. 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/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章