使用mysql-proxy實現讀寫分類詳解

1,檢查必須安裝包mysql

Mysql Proxy安裝以前有先決條件,以下:
•    libevent 1.x 或更高
•    glib2 2.6.0 或更高
•    lua 5.1.x 或更高
•    pkg-config
•    libtool 1.5 或更高
•    MySQL 5.0.x 或更高的開發庫

先yum安裝必須的庫,同時解決pkg-config、libtool和Mysql開發庫,因爲mysql-proxy實際並不須要在本機上運行mysql實例,因此用yum安裝。

yum -y install gcc gcc-c++ autoconf mysql-devel libtool pkgconfig ncurses ncurses-devellinux


lua安裝5.1.4版本,安裝以前須要先安裝readline 6.1,否則會報錯缺乏頭文件:
readline 6.1下載:
ftp://ftp.cwru.edu/pub/bash/readline-6.1.tar.gz
lua 5.1.4下載:
http://www.lua.org/ftp/lua-5.1.4.tar.gz c++


運行腳本:
# tar xvf readline-6.1.tar.gz   
# cd readline-6.1
# ./configure
# make && make install
#應用ldconfig –v
# ldconfig –vsql

注:若是安裝出錯 給提示不存在的文件讀寫權限便可。vim

# lua
# tar xvf lua-5.1.4.tar.gz
# cd lua-5.1.4
# 64位系統,需在CFLAGS里加上-fPIC  
# vim src/Makefile
CFLAGS= -O2 -Wall -fPIC $(MYCFLAGS)
# make linux
# make installbash


# pkg-config 環境變量
# cp etc/lua.pc /usr/local/lib/pkgconfig/ 
# export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig  服務器

以上操做完成了先決條件的安裝,接下來是Mysql Proxy安裝(官網下載最新),下載完後運行:
# tar xvf mysql-proxy-0.8.4.tar.gz
# cd mysql-proxy-0.8.4
# ./configure
# make && make install測試

(編譯安裝mysql的指定--with-mysql="PATH" 安裝路徑指定--prefix="")lua

# cp lib/rw-splitting.lua /usr/local/lib/
# cp lib/admin.lua /usr/local/lib/spa

到這裏MySQL-proxy已基本安裝完成,接下來,測試:

Master服務器: 192.168.0.230
Slave服務器: 192.168.0.231
Proxy服務器: 192.168.0.230

注:--暫不進行同步。僅測試讀寫分離。mysql-proxy啓動
1) 修改讀寫分離lua腳本
默認最小4個最大8個以上的客戶端鏈接纔會實現讀寫分離, 現改成最小1個最大2個:
# vi +40 /usr/local/lib/rw-splitting.lua
------------------------------------------------------
-- connection pool
if not proxy.global.config.rwsplit then
        proxy.global.config.rwsplit = {
                min_idle_connections = 1,
                max_idle_connections = 2,
                is_debug = true
        }      
end
------------------------------------------------------
這是由於mysql-proxy會檢測客戶端鏈接, 當鏈接沒有超過min_idle_connections預設值時, 不會進行讀寫分離, 即查詢操做會發生到Master上.

2) 啓動mysql-proxy
建議使用配置文件的形式啓動, 注意配置文件必須是660權限, 不然沒法啓動. 若是有多個Slave的話, proxy-read-only-backend-addresses參數能夠配置多個以逗號分隔的IP:Port從庫列表.
# killall mysql-proxy
# vi /etc/mysql-proxy.cnf[mysql-proxy]
admin-username=***
admin-password=***
admin-lua-script=/usr/local/lib/admin.lua
proxy-backend-addresses=192.168.0.230:3306
proxy-read-only-backend-addresses=192.168.0.231:3306
proxy-lua-script=/usr/local/lib/rw-splitting.lua
log-file=/var/log/mysql-proxy.log
log-level=debug
daemon=true
keepalive=true

# chmod 660 /etc/mysql-proxy.cnf
# mysql-proxy --defaults-file=/etc/mysql-proxy.cnf
# ps -ef | grep mysql-proxy | grep -v grep
root      1869     1  0 18:16 ?        00:00:00 /usr/local/mysql-proxy/libexec/mysql-proxy --defaults-file=/etc/mysql-proxy.cnf
root      1870  1869  0 18:16 ?        00:00:00 /usr/local/mysql-proxy/libexec/mysql-proxy --defaults-file=/etc/mysql-proxy.cnf

鏈接Proxy端口, 插入數據
# mysql -uu_test –pu_test -h192.168.0.230 -P4040 -Ddb_test
mysql> insert into db_test.t_test values ('testB');
mysql> select * from db_test.t_test;
+-------+
| col   |
+-------+
| testA |
| testB |
+-------+

3) 多開幾個客戶端, 鏈接Proxy端口, 查詢數據
# mysql -uu_test –pu_test -h192.168.0.230 -P4040 -Ddb_test
mysql> select * from db_test.t_test;
+-------+
| col   |
+-------+
| testA |

若是查詢不到上步新插入的數據, 說明鏈接到了Slave, 讀寫分離成功.



發現insert操做成功, 可是select不出剛插入的數據, 說明同一線程也讀寫分離成功. 從日誌中能夠驗證:# tail /var/log/mysql-proxy.log

相關文章
相關標籤/搜索