1. 程式人生 > >MySQL Cluster SQL節點負載均衡、讀寫分離驗證

MySQL Cluster SQL節點負載均衡、讀寫分離驗證

龍年完成的Amoeba環境初步搭建工作,蛇年開始進行讀寫分離和負載均衡的驗證工作。先祝大家蛇年一切順利。上回的工作我們只是完成Amoeba框架的引入,但是並不滿足讀寫分離場景的要求,因為最基本的,SQL節點只有一個。
所以,我們首先需要新增一個SQL節點,具體操作不再贅述。新增,重啟後,MySQL Clluster叢集環境如下。

修改Amoeba的環境配置dbServers.xml,增加一個dbServer節點10.4.44.200。

重啟Amoeba服務使配置生效。

此時,使用之前寫好的JDBC程式碼直接訪問Amoeba的服務即可完成對資料的操作,只需修改IP地址和埠(預設為8066)即可。

通過測試發現,通過訪問Amoeba服務,確實完成對了SQL層的負載均衡,觀察虛擬機器的網路指標,發現兩個SQL節點的網路負載比較平均。

               SQL200的網路負載

SQL201相同時刻的網路負載情況

讀寫分離配置。

<queryRouter class="com.meidusa.amoeba.mysql.parser.MysqlQueryRouter">
                <property name="ruleLoader">
                        <bean class="com.meidusa.amoeba.route.TableRuleFileLoader">
                                <property name="ruleFile">${amoeba.home}/conf/rule.xml</property>
                                <property name="functionFile">${amoeba.home}/conf/ruleFunctionMap.xml</property>
                        </bean>
                </property>
                <property name="sqlFunctionFile">${amoeba.home}/conf/functionMap.xml</property>
                <property name="LRUMapSize">1500</property>
                <property name="defaultPool">server2</property>

                <property name="writePool">server2</property>
                <property name="readPool">multiPool</property>
                <property name="needParse">true</property>
 </queryRouter>

關鍵是開啟預設註釋掉的readPool和writePool 的配置項,這裡可以配置單節點名稱也可以填入在dbServers.xml中定義的虛擬節點的名稱,比如這裡的multiPool實際包含了server1,server2兩個節點。Amoeba按照負載均衡策略進行讀取。
注:上述配置是在不進行資料切分的情況下,快速進行讀寫分離的配置。

連線205的Amoeba節點進行讀寫操作,觀察虛擬機器監控圖表,可以看到當讀資料的時候,負載分擔在server1和server2節點上,寫資料的時候,只有server2有壓力。

備註:Amoeba不能做什麼

目前還不支援事務

暫時不支援儲存過程(近期會支援)

不適合從amoeba導資料的場景或者對大資料量查詢的query並不合適(比如一次請求返回10w以上甚至更多資料的場合)

暫時不支援分庫分表,amoeba目前只做到分資料庫例項,每個被切分的節點需要保持庫表結構一致。

從第四點可以聯想到,我們測試的環境是基於MySQL Cluster的多個SQL節點,底層的Data node自然是資料同步的,甚至都不存在他說的保持庫表一致的問題。OneCoder也認為,Amoeba在設計之初的使用場景底層應該是基於獨立的MySQL節點的。這也是OneCoder接下來考慮的驗證工作:)