天天看點

Amoeba新版本MYSQL讀寫分離配置

官方簡介

Amoeba的中文意思是變型蟲

主要解決:

• 降低 資料切分帶來的複雜多資料庫結構

• 提供切分規則并降低 資料切分規則 給應用帶來的影響

• 降低db 與用戶端的連接配接數

• 讀寫分離

個人簡單描述

可能你還沒明白Amoebla這鬼東西主要幹麻的呢!比方說PHP環境衆所周知,PHP沒有資料連接配接池,如果PHP環境下MYSQL通路量大時會蹦掉,除非配置Cluster叢集,而Amoeba就是在PHP程式和MYSQL之間,充當一個緩沖的作用。

準備工作

Server:192.168.1.208 #Amoeba

Server:192.168.1.11  #NDBD1(主)

Server:1921.68.1.13  #NDBD2(從)

注:11和13兩台伺服器上,事先請安裝好MYSQL單向步,不會配置通路http://skyson.blog.51cto.com/2497647/556600

另請安裝MYSQL版本必須5.1以上,因為新版的Amoeba2.10對5.1以下版本不穩定。

結構圖

Step 1:配置Amoeba192.168.2.8讀寫分離  

1:解壓安裝包

[root@Management down]# mkdir /usr/local/amoeba 

[root@Management down]# tar -zxf amoeba-mysql-binary-2.1.0-RC5.tar.gz -C /usr/local/amoeba/

2:進入配置目錄,浏覽檔案

[root@Management down]# cd /usr/local/amoeba/ 

[root@Management amoeba]# ll 

total 88 

drwxr-xr-x 2 root root    4096 Jul 26 11:57 benchmark 

drwxr-xr-x 2 root root    4096 Feb 28 09:25 bin 

-rw-r--r-- 1 root root    3983 May 18 13:43 changelogs.txt 

drwxr-xr-x 2 root root    4096 Jul 26 11:57 conf 

drwxr-xr-x 3 root root    4096 Jul 26 11:57 lib 

-rw-r--r-- 1 root root 34520 May 18 13:43 LICENSE.txt 

-rw-r--r-- 1 root root    2031 May 18 13:43 README.html

3:進入主配置檔案目錄

[root@Management amoeba]# cd conf/ 

[root@Management conf]# ls 

access_list.conf    amoeba.xml        dbServers.xml    functionMap.xml    log4j.xml    ruleFunctionMap.xml 

amoeba.dtd                dbserver.dtd    function.dtd     log4j.dtd                rule.dtd     rule.xml

在這裡我主要介紹配置  amoeba.xml、    dbServers.xml、 log4j.xml 三個主要的配置檔案,其它檔案沒有特殊需要預設就可以了奪

4: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>

 5:vi dbServers.xml 增加SEVER2子產品,裡面的連接配接使用者名密碼及位址都表示兩台MYSQL的實體機器,192.168.1.11和192.168.1.13 另SERVER1是寫,SERVER是讀

需要手動增加SERVER2代碼如下:

  <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> 

  </dbServer>

最終改變成如下:

<?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        

    --> 

      <!-- ########################把如上的内容複制到下面,來增加SERVER2############################ --> 

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

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

 <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> 

</amoeba:dbServers> 

6:修改log4j.xml 取消日志檔案生成(太大了,磁盤很容易滿)

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

改成 

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

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

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

DEFAULT_OPTS="-server -Xms512m -Xmx512m -Xmn100m -Xss1204k"

8:啟動amoeba

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

本文轉自 ibelieveme 51CTO部落格,原文連結:http://blog.51cto.com/skyson/623449,如需轉載請自行聯系原作者