追蹤
NEIL's_學而時習之x不學無術~私藏IT技術經驗分享部落
關於部落格
NEIL. Cheng....寫作只是為了日後工作之備忘操作參考

本部落格文章撰寫前進邁向第五年(since 2009 ~至今)仍繼續推進分享IT學習!!About Windows/Linux Server,Virtualization


分享網誌: 由於,本人預先完成LAB後,才補上撰寫文章與截圖,若發現文圖對照說明有誤..本人將盡快校正,也請不吝指教! Thanks!

  • 174775

    累積人氣

  • 6

    今日人氣

    1

    追蹤人氣

MySQL Proxy 實現Read與Write切割處理以達到分散MySQL 負載平衡 By Remiel

 實驗開始 預先佈署本Lab安裝相依套件:

yum -y install gcc* gcc-c++* autoconf* automake* zlib* libxml* ncurses-devel libtool* flex*pkgconfig* libevent* glib* readline-devel  

#通常習慣使用yum groupinstall "Development tools"裝載,readline-devel 與lua相依" 

(A).檢視 主從複寫(Master/Slave)組態並最後之Check     

首先是MySQL Master組態(.178)    

 show master status;  #狀態是OK有起來的狀態,我們在
my.cnf檔案指定server-id=1




















接者是MySQL Slave組態(.179)檢查OK
 
 show slave status G;  #狀態可以看到Slave_IO_Running,Slave_SQL_Running 皆為YES















 


既然主從架構建已完成,意味著: 當新的一筆資料寫入到Master DB Tables時理應複寫至Slave DB

兩資料庫資料應為一致如下: #本Lab最後將以Remiel.ko3 資料表測試"讀寫分離"最終目標



















配置 MySQL Proxy(.180) 要點

需要搭配Lua腳本執行,請至以下網站下載lua,本例使用5.2.1 version

http://www.lua.org/ftp/  

cd /usr/local                #安裝lua步驟如下
 
tar zxvf  lua-5.2.1.tar.gz 

cd lua-5.2.1


make linux
 
make install

安裝 MySQL Proxy  #本例使用 0.8.3 版本

cd /usr/local

wget  http://mysql.cdpa.nsysu.edu.tw/Downloads/MySQL-Proxy/mysql-proxy-0.8.3-linux-rhel5-x86-64bit.tar.gz

tar zxvf mysql-proxy-0.8.3-linux-rhel5-x86-64bit.tar.gz

mv mysql-proxy-0.8.3-linux-rhel5-x86-64bit.tar.gz mysql_proxy

此外主/從 MySQL DB 必須分別授予建立一個DB帳號,供MySQL Proxy 與主從DB 通訊溝通,如下

GRANT ALL ON *.* TO 'proxy_user' @ '192.168.11.180' IDENTIFIED BY 'proxy_username' ;

編輯最小連線數/最大連線數以決定資料存取時"讀寫分離"執行時機配置

/usr/local/mysql_proxy/share/doc/mysql-proxy/rw-splitting.lua

min_idle_connections = 4,   #小於此值連線數範圍,皆交由Master DB處理,不執行讀寫分離機制

max_idle_connections = 8,  #超過此值連線數開始啟用讀寫分離處理機制,SLAVE將被啟用(Read)

 













MySQL Proxy 啟用參數(啟動前簡述): 可使用 mysql-proxy --help-all 查找說明

--proxy-address=192.168.11.180:3306    #指定MySQL Proxy 服務IP與Port號

--proxy-read-only-backend-addresses=192.168.11.179:3306  #配置Read only DB資訊

--proxy-backend-addresses=192.168.11.178:3306    #配置Write DB資訊

--proxy-fix-bug-25371 # fix bug #25371 (mysqld > 5.1.12) for older libmysql versions 

--proxy-lua-script=
/usr/local/mysql_proxy/share/doc/mysql-proxy/rw-splitting.lua  #指定lua使用腳本路徑

--keepalive   #try to restart the proxy if it crashed

--daemon --pid-file /usr/local/mysql_proxy/var/mysql-proxy.pid  # Start in daemon-mode & PID

綜合以上參數啟動MySQL Proxy 指令即是如下

mysql-proxy --proxy-address=192.168.11.180:3306 --proxy-read-only-backend-addresses=192.168.11.179:3306 --proxy-backend-addresses=192.168.11.178:3306 --proxy-fix-bug-25371 --proxy-lua-script=/usr/local/mysql_proxy/share/doc/mysql-proxy/rw-splitting.lua --keepalive --daemon --pid-file /usr/local/mysql_proxy/var/mysql-proxy.pid  & 

#建議可寫一個簡單script執行檔,並寫入於/etc/rc.local開機執行

 
(critical) plugin proxy 0.8.3 started  #截至目前為止,MySQLProxy啟動ok
 




 
 

 











[驗收測試A: 測試透過連線於MySQL Proxy 介面是否可順利正常寫入到後端Master DB ?]

首先: 使用遠端連線到MySQL Proxy如下

 mysql   -u  proxy_user -pproxy_pass -h 192.168.11.180  #確認remiel.ko3 DB資料表與結構OK



 

 















接下來我們Insert 一筆資料測試

 Insert into ko3 values(100,julia.345);

 #資料已經寫入ko3,可即刻切換到Slave DB(.179)資料複寫是同步一致(確定寫入/複寫OK無誤)
 




















[驗收測試B: 測試當連線數超於8(讀寫分離預設值:8)情況下使用Select Data動作 是否移轉交給

            後端Slave DB處理?以達到分擔Master DB Loading 目的DB ?]

B1: 停用SLAVE DB(.179) 複寫服務

      slave stop;

    獨立新增一筆名為 godiva 資料寫入到 (.179)Slave DB remiel.ko3;


 

    

    




















停止複寫動作後,開始新增大量連線到MySQL Proxy 進行資料的讀取測試如下

測試連線數> 8 次(含以上)且執行查驗table 資料後發現,讀與寫分離機制是OK可行

本實驗目標已達成!!!!!!





 


相簿設定
標籤設定
相簿狀態