Mysql-proxy 實現讀寫分離

   背景:如下圖所示,主要通過mysql-proxy實現對兩臺mysql服務器的讀寫分離操作,兩臺mysql提供的測試數據庫內容一致(這裏主要通過手工同步兩臺mysql測試數據庫的內容,沒有使用mysql主從,主要是方便測試)

 

wKiom1X2dpWg4It8AADsrqrbI4E828.jpg 

一、環境軟件

1、 安裝pkg-config 

[root@web1 srv]yum install pkgconfig

2、安裝glib2

[root@web1 src]yum install glib2 

3、安裝 libevent
[root@web1 srv]tar zxvf libevent-1.4.14b-stable.tar.gz
[root@web1 libevent-2.0.22-stable]./configure --prefix=/usr/local/libevent
[root@web1 libevent-2.0.22-stable]make
[root@web1 libevent-2.0.22-stable]make install

4安裝mysql-devel安裝mysql開發包

[root@web1 src]yum install mysql-devel  

5LUA

yum install -y readline-devel ncurses-devel

[root@web1 src]wget http://www.lua.org/ftp/lua-5.1.4.tar.gz

[root@web1 src]#tar -zxvf lua-5.3.1.tar.gz

[root@web1 lua-5.3.1]# vim Makefile

INSTALL_TOP= /usr/local/lua

[root@web1 lua-5.3.1]make linux

[root@web1 lua-5.3.1]make install

如果你的服務器是64位的,這時要調整一下Makefilevi src/Makefile,在CFLAGS里加上-fPIC,否則會出錯

 

6、設置mysql-proxy運行的環境變量

Vim /etc/profile

export LUA_CFLAGS="-I/usr/local/lua/include" LUA_LIBS="-L/usr/local/lua/lib -llua -ldl" LDFLAGS="-L/usr/local/libevent/lib -lm"

export CPPFLAGS="-I/usr/local/libevent/include"
export CFLAGS="-I/usr/local/libevent/include"

export PKG_CONFIG_PATH=/usr/lib/pkgconfig  #rpm -ql pkgconfig查看其安裝路徑

然後執行 source /etc/profile

 

二、Mysql-proxy安裝

 

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

[root@web1 mysql-proxy-0.8.4]#

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

[root@web1 mysql-proxy-0.8.4]make

[root@web1 mysql-proxy-0.8.4]make install

 

設置mysql-proxy環境變量

Vim /etc/profile

export PATH=$PATH:/usr/local/mysql-proxy/bin

Source /etc/profile

 

查看安裝信息

[root@web1 mysql-proxy-0.8.4]# mysql-proxy -V

mysql-proxy 0.8.4

  chassis: 0.8.4

  glib2: 2.28.8

  libevent: 2.0.22-stable

  LUA: Lua 5.1.4

    package.path: /usr/local/mysql-proxy/lib/mysql-proxy/lua/?.lua

    package.cpath: /usr/local/mysql-proxy/lib/mysql-proxy/lua/?.so

-- modules

  proxy: 0.8.4

三、mysql-proxy讀寫分離測試

1、讀,寫數據庫信息一致

wKioL1X2eRWTZqBoAAEyfbVHvRo865.jpg 

 

2、192.168.1.121192.168.1.124mysql-proxy授權

mysql> grant all on jiang.* to 'proxyuser'@'192.168.1.120' identified by 'jiang';

 

3、配置mysql-proxy,實現讀寫分離(後臺啓動該程序&

 

mysql-proxy --proxy-read-only-backend-addresses=192.168.1.124:3306 

--proxy-backend-addresses=192.168.1.121:3306 

--proxy-lua-script=/usr/local/mysql-proxy/lib/rw-splitting.lua" &

 

[root@web1 lib]# netstat -an | grep 4040     //確保已經啓動了mysql-proxy

tcp        0      0 0.0.0.0:4040                0.0.0.0:*                   LISTEN

 

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

proxy.global.config.rwsplit = { 

   min_idle_connections = 1,       

   max_idle_connections = 2,        

   is_debug = false 

}

說明:這是因爲mysql-proxy會檢測客戶端連接, 當連接沒有超過min_idle_connections預設值時, 不會進行讀寫分離, 即查詢操作會發生到Master上(可通過show processlist查詢連接情況)

 

參數說明:

--proxy-read-only-backend-addresses=192.168.1.124:3306 \ //定義後端只讀從服務器地址
--proxy-backend-addresses=192.168.1.121:3306 \ //定義後端主服務器地址
--proxy-lua-script=/usr/local/mysql-proxy/lib/rw-splitting.lua" \ //定義lua讀寫分離腳本路徑

 

4、遠程連接mysql-proxy

[root@web1 lib]# mysql -uproxyuser -pjiang -h192.168.1.120 -P4040

wKiom1X2duyzjwSRAABL8u77IQE473.jpg 

 

5、插入數據,分析讀寫情況

mysql> INSERT INTO `jiang`.`personal_info` (`pi_id` ,`pi_name` ,`pi_tel` ,`pi_qq` ,`pi_email`)

VALUES ('2', 'mysqlproxy', '111111111111', '22222222', '[email protected]');

 

5.1 此次檢查192.168.1.121192.168.1.124的數據庫jiang的情況。

192.168.1.121:如下數據

wKioL1X2eSqg1_TmAADoOL4D0rY081.jpg 

192.168.1.124:如下數據

wKioL1X2eTTSAcgtAAC8tu3N76I426.jpg 

 

說明:在192.168.1.120 mysql-proxy上,寫的數據在192.168.1.121,而192.168.1.124沒有寫入數據。

 

接下來,爲了實現分離狀態的查看,需要重新打開客戶端重新連接mysql-proxy,如下所示

 

[root@mysql ~]# mysql -uproxyuser -pjiang -h192.168.1.120 -P4040

 

如下所示,表示讀取的數據庫,那麼該數據中並沒有新插入的數據,其原因在於此時讀取的數據在192.168.1.124上,而根據測試環境,192.168.1.124爲只讀數據庫,所以插入的數據並沒有寫入到192.168.1.124上。

wKiom1X2dw_TkvIdAADayOzphpk094.jpg 


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