讀寫分離實踐:mysql-proxy

【系統環境】

ubuntu12.04 64bit

【步驟】

下載mysql-proxy

ftp://mirror.switch.ch/mirror/mysql/Downloads/MySQL-Proxy/mysql-proxy-0.8.4.tar.gz


安裝依賴包

apt-get install libevent-dev

apt-get install lua5.1-dev

apt-get install libglib2.0-dev


解壓mysql-proxy-0.8.4.tar.gz得到mysql-proxy-0.8.4,進入目錄

./configure --prefix=/usr/local/mysql-proxy --with-mysql=/usr/local/mysql/

注意編譯要依賴mysql,所以應該先安裝mysql,否則編譯不通過。

make && make install

接下來把需要用到的lua腳本拷貝到安裝目錄中

cp lib/rw-splitting.lua /usr/local/mysql-proxy/

修改rw-splitting.lua內容,找到如下

-- connection pool
if not proxy.global.config.rwsplit then
        proxy.global.config.rwsplit = {
                min_idle_connections = 4,
                max_idle_connections = 8,


                is_debug = false
        }
end

把4和8都換成1,因爲只有當客戶端連接大於配置的4時候,纔會啓用讀寫分離,否則都從master讀寫,換成1後,客戶端多起幾個連接,多查幾次就發現讀寫分離起作用了。

cp lib/admin.lua /usr/local/mysql-proxy/

在安裝目錄中新建 /usr/local/mysql-proxy/mysql-proxy.cnf 配置文件,內容如下

[mysql-proxy]
admin-username = test
admin-password = mima
keepalive=true
proxy-backend-addresses = 192.168.1.101:3306    
proxy-read-only-backend-addresses = 192.168.1.93:3306 
proxy-lua-script = /usr/local/mysql-proxy/rw-splitting.lua 
admin-lua-script = /usr/local/mysql-proxy/admin.lua
log-file = /data/log/mysql-proxy.log  
log-level = debug

admin-username 訪問proxy時候用到的用戶名,這個要求後端所有的db都用同一套用戶名密碼才能訪問。

admin-password 密碼

keepalive 找個參數很有用,保持mysql-proxy斷線重連

proxy-backend-addresses 主db(master)地址,可讀可寫

proxy-read-only-backend-addresses 從db(slave)地址,只讀

proxy-lua-script 執行讀寫分離的lua腳本地址

admin-lua-script 驗證用戶名密碼的腳本

log-file 日誌地址

log-level 日誌級別,debug表示調試


啓動

/usr/local/mysql-proxy/bin/mysql-proxy --defaults-file=/usr/local/mysql-proxy/mysql-proxy.cnf&

測試

mysql -utest -pmima -P4040

這裏設置端口爲4040,是因爲proxy默認端口是4040

連接上後,可以測試sql命令了。

【讀寫分離】

爲了看到讀寫分離效果,如果原本主從db之間有replication同步,需要關掉,否則在master修改後立刻會同步到slave,這樣就看不到兩個db不同的差異了,讀的時候不知道從哪個db讀的。

確認同步已經關閉,客戶端多建立幾條連接,這樣一開始默認連接的是master,後來的連接查詢就會轉到slave。試着修改一個數據庫表的值,然後查詢該值,多查幾次會發現你修改過的值沒有修改,那是因爲已經讀取了從db。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章