Amoeba 實現 MySQL 讀寫分離

發表於2016-06-28

Amoeba 介紹

Amoeba(變形蟲)專案,該開源框架於2008年 開始釋出一款 Amoeba for Mysql軟體。

這個軟體基於Java致力於MySQL的分散式資料庫前端代理層,處於在應用和資料庫之間,對客戶端透明,它主要在應用層訪問MySQL的時候充當SQL路由功能,解析應用傳遞過來的SQL語句,專注於分散式資料庫代理層(Database Proxy)開發。具有負載均衡、高可用性、SQL 過濾、讀寫分離、可路由相關的到目標資料庫、可併發請求多臺資料庫合併結果。 通過Amoeba能夠完成多資料來源的高可用、負載均衡、資料切片的功能,目前Amoeba已在很多企業的生產線上面使用。

優點:Amoeba已經具有Query路由,Query過濾,讀寫分離,負載均衡以及HA機制等相關內容。

缺點:Amoeba暫不支援事務;amoeba不支援跨庫join和排序;amoeba不支援分庫分表等;

Amoeba 主要解決的以下幾個問題:

  1. 資料切分後複雜資料來源整合;
  2. 提供資料切分規則並降低資料切分規則給資料庫帶來的影響;
  3. 降低資料庫與客戶端的連線數;
  4. 讀寫分離路由;

Amoeba 實現讀寫分離配置


安裝環境如下

master 192.168.1.5 rac1-node.tp-link.net

slave 192.168.1.6 rac2-node.tp-link.net

Amoeba 192.168.1.2 poprodbak.tp-link.net

安裝amoeba前要安裝jdk,因為amoeba是由java開發的。同時設定JAVA_HOME

下載 ameba 軟體

使用amoeba穩定版

配置 Amoeba

解壓完以後,下面進行配置。在conf目錄下可以看到很多.xml字尾的檔案。其中

  • amoeba.xml是對amoeba代理的配置,定義讀寫分離的節點管理資訊;
  • dbServers.xml是對後端service的配置,定義資料庫的資訊;
  • rule.xml可以定義高階設定比如資料的水平、垂直切分等;
  • log4j.xml定義日誌等。

配置dbServers.xml

配置Amoeba.xml

啟動 Amoeba

以上說明amoeb已經正常啟動了。

連線報錯
java.util.NoSuchElementException: Could not create a validated object, cause: ValidateObject failed

修改dbServers.xml配置,factoryConfig中 password預設是被註釋掉的,取消註釋
還是報錯,後來發現原來是schema設定不對,這個是要設定為資料庫名。修改後通過amoeba連線資料庫正常。

至此,amoeba正常啟動,客戶端可以通過amoeba正常連線MySQL資料庫。

驗證測試

使用tcpdump抓包工具分析,讀寫是否分離到master和slave上。

在master和slave上分別執行

其中192.168.1.2是amoeba伺服器

在amoeba伺服器上執行select操作

slave上可以抓取到如下資訊,查詢三次以後,可以從master抓取到查詢資訊(因為此時master和slave節點資料剛好不一致,可以非常清晰地確實是在master上執行的)。因此可以大概驗證amoeba設定的讀操作slave和master 3比1的比例。

在amoeba伺服器上執行insert操作

master抓包如下資訊,slave上沒有任何變化。因此可以驗證寫操作完全在master節點上完成。

效能對比

針對MySQL Proxy和Amoeba進行了簡單的效能對比測試

分別查詢14W條資料,proxy和amoeba表現幾無差別。

第一次(s) 第二次 3 4 5 平均(s)

Mysql-proxy 0.27 0.27 0.28 0.29 0.26 0.274

Amoeba 0.23 0.26 0.33 0.25 0.34 0.282

分別插入14W條資料,proxy平均為1.8S,amoeba平均為1.95S。

可以看出mysqlproxy和Amoeba幾無差別,可能是因為資料量比較小。

相關文章