Ameoba實現MySQL讀寫分離及負載平衡

來源:互聯網
上載者:User

標籤:mysql   負載平衡   讀寫分離   

Amoeba簡介:
      amoeba是一個以MySQL為底層資料存放區,並對應用提供MySQL協議介面的proxy。它集中地響應應用的請求,依據使用者事先設定的規則,將SQL請求發送到特定的資料庫上執行。基於此可以實現負載平衡、讀寫分離、高可用性等需求。與MySQL官方的MySQL Proxy相比,作者強調的是amoeba配置的方便(基於XML的設定檔,用SQLJEP文法書寫規則,比基於lua指令碼的MySQL Proxy簡單)。
     
       amoeba相當於一個SQL請求的路由器,目的是為負載平衡、讀寫分離、高可用性提供機制,而不是完全實現它們。使用者需要結合使用MySQL的 Replication等機制來實現副本同步等功能。amoeba對底層資料庫連接管理和路由實現也採用了可插撥的機制,第三方可以開發更進階的策略類來替代作者的實現。這個程式總體上比較符合KISS的思想。


      以上來自百度百科,以下我們通過實驗來學習如何配置Ameoba


實驗: amoeba實現讀寫分離及負載平衡

        注意: 在真實環境中讀寫分離和AB複製是結合使用的,但為了觀察讀寫分離的效果,我們此次實驗的三台MySQL伺服器並未配置AB複製

   代理: 10.10.10.16
       寫: master: 10.10.10.13
       讀:  slave1: 10.10.10.14
             slave2: 10.10.10.15
   注意:讀寫分離一般結合AB複製一起,但為了測試效果,本實驗未配置AB複製
   
軟體:amoeba-mysql-binary-2.2.0.tar.gz
       jdk-7u67-linux-x64.tar.gz  \\
       
安裝軟體
   # tar xf jdk-7u67-linux-x64.tar.gz  -C /usr/local/
   # cd /usr/local/
   # mv jdk1.7.0_67/  java
   # mkdir /usr/local/amoeba
   # tar xf amoeba-mysql-binary-2.2.0.tar.gz  -C /usr/local/amoeba/
配置環境
   # vim /etc/profile.d/ameoba.sh    
       export JAVA_HOME=/usr/local/java
       export PATH=$JAVA_HOME/bin:/usr/local/amoeba/bin:$PATH
   # source /etc/profile.d/ameoba.sh
   # java -version
       java version "1.7.0_67"
       Java(TM) SE Runtime Environment (build 1.7.0_67-b01)
       Java HotSpot(TM) 64-Bit Server VM (build 24.65-b04, mixed mode)
       
mysql伺服器

    所有伺服器建立由Proxy 伺服器串連的使用者
   > grant all on *.* to [email protected]‘%‘ identified by ‘123‘;

    

    * 為了測試效果,我們在三台唯讀伺服器上建同名不同內容的表:

        master:

            > select * from db1.t1;

                +------+

                 |    id   |

                +------+

                 |   13  |

                +------+

        slave1:  

            > select * from db1.t1;

                +------+

                 |    id   |

                +------+

                 |   14   |

                +------+

        slave2:

            > select * from db1.t1;

                +------+

                 |    id   |

                +------+

                 |   15   |

                +------+  

   
配置ameoba
   # cd /usr/local/amoeba/
  1. 配置ameoba串連後端伺服器
       # vim conf/dbServers.xml  
      -----串連mysql的連接埠號碼,預設庫,使用者名稱,密碼-----
        20         <property name="port">3306</property>   \\MySQL伺服器連接埠號碼
        22         <!-- mysql schema -->
        23         <property name="schema">test</property> \\串連伺服器後預設在哪個庫
        25         <!-- mysql user -->
        26          <property name="user">mary</property>   
        27          <property name="password">123</property>
       -----定義mysql主機-----
        46         <dbServer name="master"  parent="abstractServer">
        47                 <factoryConfig>
        48                         <!-- mysql ip -->
        49                         <property name="ipAddress">10.10.10.13</property>
        50                 </factoryConfig>
        51         </dbServer>
        53         <dbServer name="slave1"  parent="abstractServer">
        54                 <factoryConfig>
        55                         <!-- mysql ip -->
        56                         <property name="ipAddress">10.10.10.14</property>
        57                 </factoryConfig>
        58         </dbServer>
        60         <dbServer name="slave2"  parent="abstractServer">
        61                 <factoryConfig>
        62                         <!-- mysql ip -->
        63                         <property name="ipAddress">10.10.10.15</property>
        64                 </factoryConfig>
        65         </dbServer>
       -----定義負載平衡策略及主機群組-----
        67         <dbServer name="slavepool" virtual="true">   \\負載平衡組名
        69         <!-- Load balancing strategy: 1=ROUNDROBIN , 2    =WEIGHTBASED , 3=HA-->
        70         <property name="loadbalance">1</property> \\負載平衡策略:輪循
         72        <!-- Separated by commas,such as: server1,server2,server1 -->
        73         <property name="poolNames">slave1,slave2</property> \\群組成員
        74             </poolConfig>
        75         </dbServer>
  2. 配置ameoba
       # vim conf/amoeba.xml
       -----定義Proxy 伺服器連接埠號碼及使用者名稱密碼-----
       11      <property name="port">8066</property>    \\Proxy 伺服器連接埠號碼
       27      <property name="authenticator">
       30      <property name="user">admin</property>  
       32      <property name="password">admin</property>
       -----定義讀寫伺服器,使用在dbServers.xml中定義的主機(組)-----
       115    <property name="defaultPool">master</property> \\預設伺服器
       116    <property name="writePool">master</property>    \\寫伺服器
       117    <property name="readPool">slavepool</property> \\讀伺服器
啟動amoeba
   # amoeba start &
測試
   # mysql  -u admin  -padmin  -h 10.10.10.16  -P 8066

        > insert into db1.t1 set id=100;  \\向測試表中插入一條記錄

        > select * from db1.t1;

                +------+

                 |    id   |

                +------+

                 |   15   |

                +------+

        > select * from db1.t1;

                +------+

                 |    id   |

                +------+

                 |   14   |

                +------+

        多select幾次發現每次t1測試表的記錄都是在14和15之間切換,說明唯讀伺服器實現了完美輪循,而我們寫入的100這條資料呢?我們直接登入master伺服器查看一下:

            > select * from db1.t1;

                +------+

                |   id     |

                +------+

                |   13    |

                |  100   |

                +------+

可以看出,我們串連Proxy 伺服器所寫的記錄都寫在了master伺服器上,而讀是在兩台唯讀伺服器上讀取的資料,完美實現了讀寫分離+負載平衡       

------------------------------------------------------------
另:如果啟動時報錯:
   The stack size specified is too small, Specify at least 228k
   Error: Could not create the Java Virtual Machine.
   Error: A fatal exception has occurred. Program will exit.
解決辦法:修改ameoba命令檔案
   # vim /usr/local/amoeba/bin/amoeba
       58 DEFAULT_OPTS="-server -Xms256m -Xmx256m -Xss256k"        

Ameoba實現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.