程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> (轉)Amoeba for MySQL 非常好用的mysql集群軟件

(轉)Amoeba for MySQL 非常好用的mysql集群軟件

編輯:MySQL綜合教程

http://yanwt.iteye.com/blog/1460780

Amoeba for MySQL 


Amoeba for MySQL致力於MySQL的分布式數據庫前端代理層,它主要在應用層訪問MySQL的時候充當query 路由功能,專注 分布式數據庫 proxy 開發。座落與Client、DB Server(s)之間。對客戶端透明。具有負載均衡、高可用性、Query過濾、讀寫分離、可路由相關的query到目標數據庫、可並發請求多台數據庫合並結果。 在Amoeba上面你能夠完成多數據源的高可用、負載均衡、數據切片的功能。目前在很多企業的生產線上面使用。 




Amoeba使用指南 

說明文檔見:http://docs.hexnova.com/amoeba/ 




安裝小結: 




目前可以有三種解決方式實現mysql讀寫分離 

1 程序修改mysql操作類 

優點:直接和數據庫通信,簡單快捷的讀寫分離和隨機的方式實現的負載均衡,權限獨立分配 

缺點:自己維護更新,增減服務器在代碼處理 




2 amoeba 

參考官網:http://amoeba.meidusa.com/ 

優點:直接實現讀寫分離和負載均衡,不用修改代碼,有很靈活的數據解決方案 

缺點:自己分配賬戶,和後端數據庫權限管理獨立,權限處理不夠靈活 




3 mysql-proxy 

參考 mysql-proxy。 

優點:直接實現讀寫分離和負載均衡,不用修改代碼,master和slave用一樣的帳號 

缺點:字符集問題,lua語言編程,還只是alpha版本,時間消耗有點高 




如果你不能安裝軟件來解決讀寫分離,那可以嘗試阿權的項目解決思路。 

如果你可以安裝軟件,那amoeba是不錯的,mysql-proxy不太建議,目前只有alpha版本,效率還不太理想,amoeba目前在阿裡巴巴是內部項目,正在生產環境使用的。 




amoeba的安裝使用 

1 安裝java環境,需要Java SE 1.5 或以上 

2 配置xml文件 

下載地址: http://www.sf.net/projects/amoeba 

解壓就可以使用的,順便說一下,打包的習慣似乎不是太好,最好解壓後是自己的文件夾,如用tar -zxpf amoeba-mysql-binary-2.1.0-RC5.tar.gz -C /usr/local/amoeba-mysql 




運行很簡單 bin/amoeba 即可,後台運行 bin/amoeba & 

如果沒有配置JAVA_HOME,則會有如下提示: 

[root@aslibra amoeba-mysql]# bin/amoeba 

Error: JAVA_HOME environment variable is not set. 

如果你是比1.5低,比如1.4的,運行會有錯誤提示: 




[root@aslibra amoeba-mysql]# bin/amoeba 

Exception in thread "main" java.lang.UnsupportedClassVersionError: com/meidusa/amoeba/mysql/server/MysqlProxyServer (Unsupported major.minor version 49.0) 

        at java.lang.ClassLoader.defineClass0(Native Method) 

        at java.lang.ClassLoader.defineClass(ClassLoader.java:539) 

        at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:123) 

..... 




下載jdk1.5以上的版本,壓縮版解壓後設置好環境變量即可 




可以編輯 /etc/profile以便啟動時變量生效,末尾加上 




##############  java  ########### 




JAVA_HOME=/usr/java/jdk 

PATH=$PATH:JAVA_HOME/bin 

export JAVA_HOME PATH 




用bin/amoeba start即可啟動amoeba 

如bin/amoeba start > /dev/null & 




配置amoeba: 




conf/amoeba.xml 配置mysql數據庫,簡單說明一下: 




1 server節點定義amoeba為接受client訪問的數據庫,可以當作是mysql看待的,用戶名和密碼是訪問時使用的,這個似乎不能定義多個用戶名密碼,也就是只有一個權限控制,這個對於多應用似乎不大方便。 

2 dbServerList裡面可以定義很多實際的mysql數據庫,增加dbServer節點即可,這裡的用戶名密碼是作為amoeba操作數據庫使用的,要有足夠權限。dbServer可以是虛擬的,比如要做負載均衡時可用定義多個數據庫歸屬到此虛擬數據庫。2.1RC版的dbServer已移到dbServers.xml文件中配置。 

3 queryRouter節點定義讀寫的分配情況,也就是讀寫該發往那個dbServer。 




vi amoeba.xml 修改主配置文件 

4.1)把默認端口8066改成3306 

<property name="port">3066</property> 

4.2)把默認連接用戶名和密碼改成自己的 

<property name="user">sky</property> 

<property name="password">123456</property> 

4.3)把默認的客戶端線程數,請求數及服務端回應數改成200,300,300 

<property name="readThreadPoolSize">200</property> 




                       <!-- proxy server client process thread size --> 

                       <property name="clientSideThreadPoolSize">300</property> 

                       <!-- mysql server data packet process thread size --> 

                       <property name="serverSideThreadPoolSize">300</property 

4.4)把默認注釋掉的讀寫分離選項,把注釋去掉並readpool修改成server2 

<!--  --> 

                       <property name="writePool">server1</property> 

                       <property name="readPool">server2</property> 

提示:readPool或writePool可以是dbServers中的multiPool名稱,用multiPool來設置負載均衡。 




(本文出自php_sir的新浪博客,用戶名php_sir,首頁鏈接:http://blog.sina.com.cn/phpsir,未經本人(php_sir)同意禁止轉載) 




5. vi dbServers.xml 增加SEVER2模塊,裡面的連接用戶名密碼及地址都表示兩台MYSQL的物理機器,192.168.1.11和192.168.1.13 另SERVER1是寫,SERVER是讀 




<?xml version="1.0" encoding="gbk"?> 

<!DOCTYPE amoeba:dbServers SYSTEM "dbserver.dtd"> 




<amoeba:dbServers xmlns:amoeba="http://amoeba.meidusa.com/"> 

    <!--    




      Each dbServer needs to be configured into a Pool, 




      If you need to configure multiple dbServer with load balancing that can be simplified by the following configuration: 




        add attribute with name virtual = "true" in dbServer, but the configuration does not allow the element with name factoryConfig 




        such as 'multiPool' dbServer        




    --> 

  <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">test</property> 




      <!-- mysql user --> 




      <property name="user">root</property> 




      <!--    mysql password --> 




      <property name="password">123456</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> 




  <dbServer name="server1"    parent="abstractServer"> 




    <factoryConfig> 




      <!-- mysql ip --> 




      <property name="ipAddress">192.168.2.11</property> 




    </factoryConfig> 




  </dbServer> 

  <dbServer name="server2"    parent="abstractServer"> 




    <factoryConfig> 




      <!-- mysql ip --> 




      <property name="ipAddress">192.168.2.13</property> 




    </factoryConfig> 




  </dbServer> 




<dbServer name="multiPool" 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">server1</property> 




    </poolConfig> 




  </dbServer> 




</amoeba:dbServers> 




6:修改log4j.xml 取消日志文件生成,如做pdf時(太大了,磁盤很容易滿) 

<param name="file" value="${amoeba.home}/logs/project.log"/> 

改成 

<param name="file" value="<![CDATA[${amoeba.home}/logs/project.log>/dev/null]]>"/> 

注意:我在2.1-rc5版本下第6條的設置JAVA運行時報警,無法通過。 





7:性能優化,打開bin/amoeba 




DEFAULT_OPTS="-server -Xms256m -Xmx256m -Xss128k" 

改成 

DEFAULT_OPTS="-server -Xms2048m -Xmx2048m -Xmn1000m -Xss2048k" 




8:啟動amoeba 

nohup /usr/local/amoeba/bin/amoeba start 2>&1 >/dev/null &

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved