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

來源:互聯網
上載者:User

標籤:

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的主從複製再合適不過了。關於這一配置,請移步:
https://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:配置了預設的資料庫節點,一些除了SELECT\UPDATE\INSERT\DELETE的語句都會在defaultPool執行。
writePool  :配置了資料庫寫庫,通常配為Master,如這裡就配置為之前定義的Master資料庫。
readPool   :配置了資料庫讀庫,通常配為Slave或者Slave組成的資料庫池,如這裡就配置之前的virtualSlave資料庫池。

amoeba啟動

啟動命令:

  1. amoeba start

此命令以前台的方式啟動,會輸出啟動時的資訊,檢查沒有錯誤資訊後,中斷,並後台運行:

  1. amoeba start &

FAQ

1、無法正常串連?
首先根據執行amoeba start輸出的資訊排除設定檔沒有問題,之後確認mysql使用者是否有遠端連線的許可權,然後檢查網站的資料庫設定檔是否設定正確。
2、如何配置網站資料庫連接檔案?
預設的連接埠應該為8066,使用者及密碼在amoeba.xml裡設定。


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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.