1. 程式人生 > 其它 >使用amoeba實現mysql讀寫分離

使用amoeba實現mysql讀寫分離

使用amoeba實現mysql讀寫分離

1、什麼是amoeba?

Amoeba(變形蟲)專案,專注 分散式資料庫 proxy 開發。座落與Client、DB Server(s)之間。對客戶端透明。具有負載均衡、高可用性、sql過濾、讀寫分離、可路由相關的query到目標資料庫、可併發請求多臺資料庫合併結果。

主要解決:

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

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

• 降低db 與客戶端的連線數

• 讀寫分離

2、為什麼要用Amoeba

目前要實現mysql的主從讀寫分離,主要有以下幾種方案:

1、 通過程式實現,網上很多現成的程式碼,比較複雜,如果新增從伺服器要更改多臺伺服器的程式碼。

2、 通過mysql-proxy來實現,由於mysql-proxy的主從讀寫分離是通過lua指令碼來實現,目前lua的指令碼的開發跟不上節奏,而寫沒有完美的現成的指令碼,因此導致用於生產環境的話風險比較大,據網上很多人說mysql-proxy的效能不高。

3、 自己開發介面實現,這種方案門檻高,開發成本高,不是一般的小公司能承擔得起。

4、 利用阿里巴巴的開源專案Amoeba來實現,具有負載均衡、高可用性、sql過濾、讀寫分離、可路由相關的query到目標資料庫,並且安裝配置非常簡單。國產的開源軟體,應該支援,目前正在使用,不發表太多結論,一切等測試完再發表結論吧,哈哈!

3、amoeba安裝

1、首先安裝jdk,直接使用rpm包安裝即可
2、下載amoeba對應的版本https://sourceforge.net/projects/amoeba/,直接解壓即可
3、配置amoeba的配置檔案

dbServers.xml

<?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 configu
ration: add attribute with name virtual = "true" in dbServer, but the configuration does not allow the element with n
ame factoryConfig such as 'multiPool' dbServer  
-->

<dbServer name="abstractServer" abstractive="true">
<factoryConfig class="com.meidusa.amoeba.mysql.net.MysqlServerConnectionFactory">
<property name="connectionManager">${defaultManager}</property>
<property name="sendBufferSize">64</property>
<property name="receiveBufferSize">128</property>

<!-- mysql port -->
<property name="port">3306</property>

<!-- mysql schema -->
<property name="schema">msb</property>

<!-- mysql user -->
<property name="user">root</property>

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

<poolConfig class="com.meidusa.toolkit.common.poolable.PoolableObjectPool">
<property name="maxActive">500</property>
<property name="maxIdle">500</property>
<property name="minIdle">1</property>
<property name="minEvictableIdleTimeMillis">600000</property>
<