- 論壇徽章:
- 0
|
64位CentOS 5.6安裝Mysql Proxy 0.8.2
在生成Mysql的M-S結(jié)構(gòu)后,為了實現(xiàn)讀寫分離,需要使用Mysql Proxy。目前Mysql Proxy的版本為0.8.2,先從mysql.com下載源碼包到/support/目錄下。
Mysql Proxy安裝之前有先決條件,如下: • libevent 1.x 或更高 • glib2 2.6.0 或更高 • lua 5.1.x 或更高 • pkg-config • libtool 1.5 或更高 • MySQL 5.0.x 或更高的開發(fā)庫
先yum安裝必須的庫,同時解決pkg-config、libtool和Mysql開發(fā)庫,由于mysql-proxy實際并不需要在本機上運行mysql實例,所以用yum安裝。
1.yum -y install gcc gcc-c++ autoconf mysql-devel libtool pkgconfig ncurses ncurses-devel
libevent安裝libevent-2.0.13版本,從此處可以下載: http://monkey.org/~provos/libevent-2.0.13-stable.tar.gz 運行腳本: # tar xvf libevent-2.0.13-stable.tar.gz # cd libevent-2.0.13-stable # ./configure # make && make install
glib2安裝glib-2.18.4版本,最新版本安裝報錯,從此處可以下載: http://ftp.gnome.org/pub/gnome/sources/glib/2.18/glib-2.18.4.tar.gz 運行腳本: # tar xvf glib-2.18.4.tar.gz # cd glib-2.18.4 # ./configure # make && make install
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
運行腳本: # tar xvf readline-6.1.tar.gz # cd readline-6.1 # ./configure # make && make install #應(yīng)用ldconfig –v # ldconfig –v
# lua # tar xvf lua-5.1.4.tar.gz # cd lua-5.1.4 # 64位系統(tǒng),需在CFLAGS里加上-fPIC # vim src/Makefile CFLAGS= -O2 -Wall -fPIC $(MYCFLAGS) # make linux # make install
# pkg-config 環(huán)境變量 # 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.2.tar.gz # cd mysql-proxy-0.8.2 # ./configure # make && make install
接下來: # cp lib/rw-splitting.lua /usr/local/lib/ # cp lib/admin.lua /usr/local/lib/
到這里MySQL-proxy已基本安裝完成,接下來,測試:
1.1 設(shè)置說明 Master服務(wù)器: 192.168.20.9 Slave服務(wù)器: 192.168.192.168.20.10 Proxy服務(wù)器: 192.168.20.12
1.2 mysql-proxy選項說明 # mysql-proxy --help-all 管理功能選項: --admin-address=host:port 指定一個mysqo-proxy的管理端口, 缺省是4041; --admin-username=<string> username to allow to log in --admin-password=<string> password to allow to log in --admin-lua-script=<filename> script to execute by the admin plugin 代理功能選項: -P, --proxy-address=<host:port> 是mysql-proxy 服務(wù)器端的監(jiān)聽端口, 缺省是4040; -r, --proxy-read-only-backend-addresses=<host:port> 只讀Slave的地址和端口, 缺省為不設(shè)置; -b, --proxy-backend-addresses=<host:port> 遠程Master地址和端口, 可設(shè)置多個做failover和load balance, 缺省是127.0.0.1:3306; --proxy-skip-profiling 關(guān)閉查詢分析功能, 缺省是打開的; --proxy-fix-bug-25371 修正 mysql的libmysql版本大于5.1.12的一個#25371號bug; -s, --proxy-lua-script=<file> 指定一個Lua腳本來控制mysql-proxy的運行和設(shè)置, 這個腳本在每次新建連接和腳本發(fā)生修改的的時候?qū)⒅匦抡{(diào)用; 其他選項: --defaults-file=<file>配置文件, 可以把mysql-proxy的參數(shù)信息置入一個配置文件里; --daemon mysql-proxy以守護進程方式運行 --pid-file=file 設(shè)置mysql-proxy的存儲PID文件的路徑 --keepalive try to restart the proxy if it crashed, 保持連接啟動進程會有2個, 一號進程用來監(jiān)視二號進程, 如果二號進程死掉自動重啟proxy.
1.3數(shù)據(jù)庫準(zhǔn)備工作 1) 安裝半同步補丁(建議) 讀寫分離不能回避的問題之一就是延遲, 可以考慮Google提供的SemiSyncReplication補丁. 2) 給用戶授權(quán) 在Master/Slave建立一個測試用戶, 因為以后客戶端發(fā)送的SQL都是通過mysql-proxy服務(wù)器來轉(zhuǎn)發(fā), 所以要確?梢詮膍ysql-proxy服務(wù)器上登錄MySQL主從庫. mysql> grant all privileges on *.* to 'u_test'@'192.168.20.12' identified by 'u_test' with grant option; 3) 在Master建立測試表 mysql> create table db_test.t_test (col varchar(10)); mysql> insert into db_test.t_test values ('testA'); mysql> select * from db_test.t_test; +-------+ | col | +-------+ | testA | +-------+
1.4 mysql-proxy啟動 1) 修改讀寫分離lua腳本 默認(rèn)最小4個最大8個以上的客戶端連接才會實現(xiàn)讀寫分離, 現(xiàn)改為最小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會檢測客戶端連接, 當(dāng)連接沒有超過min_idle_connections預(yù)設(shè)值時, 不會進行讀寫分離, 即查詢操作會發(fā)生到Master上.
2) 啟動mysql-proxy 建議使用配置文件的形式啟動, 注意配置文件必須是660權(quán)限, 否則無法啟動. 如果有多個Slave的話, proxy-read-only-backend-addresses參數(shù)可以配置多個以逗號分隔的IP:Port從庫列表. # killall mysql-proxy # vi /etc/mysql-proxy.cnf
[mysql-proxy] admin-username=zhaoyf admin-password=iamzhaoyf admin-lua-script=/usr/local/lib/admin.lua proxy-backend-addresses=192.168.20.9:3306 proxy-read-only-backend-addresses=192.168.20.10: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
1.5 客戶端連接測試 1) 先停止Slave的復(fù)制進程 mysql> stop slave; 2) 連接Proxy端口, 插入數(shù)據(jù) # mysql -uu_test –pu_test -h192.168.20.12 -P4040 -Ddb_test mysql> insert into db_test.t_test values ('testB'); mysql> select * from db_test.t_test; +-------+ | col | +-------+ | testA | | testB | +-------+
3) 多開幾個客戶端, 連接Proxy端口, 查詢數(shù)據(jù) # mysql -uu_test –pu_test -h192.168.20.12 -P4040 -Ddb_test mysql> select * from db_test.t_test; +-------+ | col | +-------+ | testA | +-------+
如果查詢不到上步新插入的數(shù)據(jù), 說明連接到了Slave, 讀寫分離成功. 在同一線程再插入數(shù)據(jù)并驗證: mysql> insert into db_test.t_test values ('testC'); mysql> select * from db_test.t_test; +-------+ | col | +-------+ | testA | +-------+
發(fā)現(xiàn)insert操作成功, 但是select不出剛插入的數(shù)據(jù), 說明同一線程也讀寫分離成功. 從日志中可以驗證: [root@localhost ~]# tail /var/log/mysql-proxy.log 2011-08-30 16:25:44: (message) Initiating shutdown, requested from mysql-proxy-cli.c:604 2011-08-30 16:25:44: (message) shutting down normally, exit code is: 0 2011-08-30 16:25:57: (debug) chassis-unix-daemon.c:121: we are the child: 4092 2011-08-30 16:25:57: (message) mysql-proxy 0.8.2 started 2011-08-30 16:25:57: (debug) max open file-descriptors = 1024 2011-08-30 16:25:57: (message) proxy listening on port :4040 2011-08-30 16:25:57: (message) chassis-unix-daemon.c:136: [angel] we try to keep PID=4092 alive2011-08-30 16:25:57: (message) added read/write backend: 192.168.20.9:3306
2011-08-30 16:25:57: (message) added read-only backend: 192.168.20.10:3306 2011-08-30 16:25:57: (debug) chassis-unix-daemon.c:157: waiting for 4092
參考文檔:http://blog.csdn.net/changerlove/article/details/6167790 http://hi.baidu.com/edeed/blog/item/b302f21f7488a77af624e484.html http://hi.baidu.com/niupeiyuan/blog/item/be3335a48e2c7ee19052eec4.html
|
|