標籤:mysql-proxy 讀寫分離
MySQL讀寫分離
情境描述:
資料庫Master主伺服器:192.168.203.138
資料庫Slave從伺服器:192.168.203.133
MySQL-Proxy調度伺服器:192.168.203.134
以下操作,均是在192.168.203.134即MySQL-Proxy調度伺服器上進行的。
3.1 MySQL的安裝與配置
具體的安裝過程與上文相同。
3.2 檢查系統所需軟體包
通過 rpm -qa | grep name 的方式驗證以下軟體包是否已全部安裝。
gcc* gcc-c++* autoconf* automake* zlib*libxml* ncurses-devel* libmcrypt* libtool* flex* pkgconfig*
libevent* glib*
yum install epel* -y
若缺少相關的軟體包,可通過yum -y install方式線上安裝,或直接從系統安裝光碟片中找到並通過rpm -ivh方式安裝。
3.3 編譯安裝lua
MySQL-Proxy的讀寫分離主要是通過rw-splitting.lua指令碼實現的,因此需要安裝lua。
lua可通過以下方式獲得
從http://www.lua.org/download.html下載源碼包
從rpm.pbone.net搜尋相關的rpm包
download.fedora.redhat.com/pub/fedora/epel/5/i386/lua-5.1.4-4.el5.i386.rpm
download.fedora.redhat.com/pub/fedora/epel/5/x86_64/lua-5.1.4-4.el5.x86_64.rpm
上面的連結不能連結使用下面地址
wgethttp://110.96.193.10:82/1Q2W3E4R5T6Y7U8I9O0P1Z2X3C4V5B/down1.chinaunix.net/distfiles/lua-5.1.tar.gz
這裡我們建議採用源碼包進行安裝
cd /opt/install
wget http://www.lua.org/ftp/lua-5.1.4.tar.gz
tar zvfx lua-5.1.4.tar.gz
cd lua-5.1.4
vi src/Makefile
在 CFLAGS= -O2 -Wall $(MYCFLAGS) 這一行記錄裡加上-fPIC,更改為 CFLAGS=-O2 -Wall -fPIC $(MYCFLAGS) 來避免編譯過程中出現錯誤。
make linux
出現系列錯誤提示解決辦法
make linux
在包含自 lua.h:16 的檔案中,
從 lua.c:15:
luaconf.h:275:31: 錯誤:readline/readline.h:沒有那個檔案或目錄
luaconf.h:276:30: 錯誤:readline/history.h:沒有那個檔案或目錄
lua.c: In function‘pushline’:
lua.c:182: 警告:隱式聲明函數‘readline’
lua.c:182: 警告:賦值時將整數賦給指標,未作類型轉換
lua.c: In function‘loadline’:
lua.c:210: 警告:隱式聲明函數‘add_history’
make[2]: *** [lua.o] 錯誤 1
make[2]: Leavingdirectory `/data0/software/lua-5.1.4/src’
make[1]: *** [linux] 錯誤 2
make[1]: Leavingdirectory `/data0/software/lua-5.1.4/src’
make: *** [linux] 錯誤 2
yum install libtermcap-devel ncurses-devellibevent-devel readline-devel
make install
cp etc/lua.pc /usr/lib/pkgconfig/
exportPKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/lib/pkgconfig
3.4 安裝配置MySQL-Proxy
MySQL-Proxy可通過以下網址獲得:
http://mysql.cdpa.nsysu.edu.tw/Downloads/MySQL-Proxy/
上面地址不能擷取地址的話使用下面地址
wgethttp://mirrors.sohu.com/mysql/MySQL-Proxy/mysql-proxy-0.8.4-linux-rhel5-x86-64bit.tar.gz
推薦採用已經編譯好的二進位版本,因為採用源碼包進行編譯時間,最新版的MySQL-Proxy對automake,glib以及libevent的版本都有很高的要求,而這些軟體包都是系統的基礎套件,不建議強行進行更新。
並且這些已經編譯好的二進位版本在解壓後都在統一的目錄內,因此建議選擇以下版本:
32位RHEL5平台:
http://mysql.cdpa.nsysu.edu.tw/Downloads/MySQL-Proxy/mysql-proxy-0.8.4-linux-rhel5-x86-32bit.tar.gz
64位RHEL5平台:
http://mysql.cdpa.nsysu.edu.tw/Downloads/MySQL-Proxy/mysql-proxy-0.8.4-linux-rhel5-x86-64bit.tar.gz
測試平台為RHEL5 32位,因此選擇32位的軟體包
wgethttp://mysql.cdpa.nsysu.edu.tw/Downloads/MySQL-Proxy/mysql-proxy-0.8.4-linux-rhel5-x86-64bit.tar.gz
tar xzvf mysql-proxy-0.8.4-linux-rhel5-x86-64bit.tar.gz
mv mysql-proxy-0.8.4-linux-rhel5-x86-64bit/opt/mysql-proxy
建立mysql-proxy服務管理指令碼
mkdir /opt/mysql-proxy/init.d/
vim mysql-proxy
01 #!/bin/sh
02 #
03 #mysql-proxy This script starts and stops the mysql-proxy daemon
04 #
05 #chkconfig: - 78 30
06 #processname: mysql-proxy
07 #description: mysql-proxy is a proxy daemon to mysql
08
09 #Source function library.
10 ./etc/rc.d/init.d/functions
11
12 #PROXY_PATH=/usr/local/bin
13 PROXY_PATH=/opt/mysql-proxy/bin
14
15 prog="mysql-proxy"
16
17 #Source networking configuration.
18 ./etc/sysconfig/network
19
20 #Check that networking is up.
21 [${NETWORKING} = "no" ] && exit 0
22
23 #Set default mysql-proxy configuration.
24 #PROXY_OPTIONS="--daemon"
25 PROXY_OPTIONS="--proxy-read-only-backend-addresses=192.168.203.133:3306--proxy-backend-addresses=192.168.203.138:3306--proxy-lua-script=/opt/mysql-proxy/scripts/rw-splitting.lua"
26 PROXY_PID=/opt/mysql-proxy/run/mysql-proxy.pid
27
28 #Source mysql-proxy configuration.
29 if[ -f /etc/sysconfig/mysql-proxy ]; then
30 . /etc/sysconfig/mysql-proxy
31 fi
32
33 PATH=$PATH:/usr/bin:/usr/local/bin:$PROXY_PATH
34
35 #By default it‘s all good
36 RETVAL=0
37
38 #See how we were called.
39 case"$1" in
40 start)
41 # Start daemon.
42 echo -n $"Starting $prog: "
43 $NICELEVEL $PROXY_PATH/mysql-proxy$PROXY_OPTIONS --daemon --pid-file=$PROXY_PID --user=mysql --log-level=warning--log-file=/opt/mysql-proxy/log/mysql-proxy.log
44 RETVAL=$?
45 echo
46 if [ $RETVAL = 0 ]; then
47 touch/var/lock/subsys/mysql-proxy
48 fi
49 ;;
50 stop)
51 # Stop daemons.
52 echo -n $"Stopping $prog: "
53 killproc $prog
54 RETVAL=$?
55 echo
56 if [ $RETVAL = 0 ]; then
57 rm -f/var/lock/subsys/mysql-proxy
58 rm -f $PROXY_PID
59 fi
60 ;;
61 restart)
62 $0 stop
63 sleep 3
64 $0 start
65 ;;
66 condrestart)
67 [ -e /var/lock/subsys/mysql-proxy ]&& $0 restart
68 ;;
69 status)
70 status mysql-proxy
71 RETVAL=$?
72 ;;
73 *)
74 echo "Usage: $0{start|stop|restart|status|condrestart}"
75 RETVAL=1
76 ;;
77 esac
78
79 exit$RETVAL
指令碼參數詳解:
==============================================
PROXY_PATH=/opt/mysql-proxy/bin //定義mysql-proxy服務二進位檔案路徑
PROXY_OPTIONS="--admin-username=root \//定義內部管理伺服器帳號
--admin-password=password \ //定義內部管理伺服器密碼
--proxy-read-only-backend-addresses=192.168.10.131:3306\ //定義後端唯讀從伺服器位址
--proxy-backend-addresses=192.168.10.130:3306\ //定義後端主伺服器地址
--admin-lua-script=/opt/mysql-proxy/lib/mysql-proxy/lua/admin.lua\ //定義lua管理指令碼路徑
--proxy-lua-script=/opt/mysql-proxy/scripts/rw-splitting.lua"\ //定義lua讀寫分離指令碼路徑
PROXY_PID=/opt/mysql-proxy/run/mysql-proxy.pid//定義mysql-proxy PID檔案路徑
$NICELEVEL $PROXY_PATH/mysql-proxy$PROXY_OPTIONS \
--daemon \ //定義以守護進程模式啟動
--keepalive \ //使進程在異常關閉後能夠自動回復
--pid-file=$PROXY_PID \ //定義mysql-proxyPID檔案路徑
--user=mysql \ //以mysql使用者身份啟動服務
--log-level=warning \ //定義log記錄層級,由高到低分別有(error|warning|info|message|debug)
--log-file=/opt/mysql-proxy/log/mysql-proxy.log//定義log記錄檔路徑
==============================================
cp mysql-proxy /opt/mysql-proxy/init.d/
chmod +x/opt/mysql-proxy/init.d/mysql-proxy
mkdir /opt/mysql-proxy/run
mkdir /opt/mysql-proxy/log
mkdir /opt/mysql-proxy/scripts
配置並使用rw-splitting.lua讀寫分離指令碼
最新的指令碼我們可以從最新的mysql-proxy源碼包中擷取
cd /opt/install
wgethttp://mysql.cdpa.nsysu.edu.tw/Downloads/MySQL-Proxy/mysql-proxy-0.8.4.tar.gz
tar xzvf mysql-proxy-0.8.4.tar.gz
cd mysql-proxy-0.8.4
cp lib/rw-splitting.lua/opt/mysql-proxy/scripts
修改讀寫分離指令碼rw-splitting.lua
修改預設串連,進行快速測試,不修改的話要達到串連數為4時才啟用讀寫分離
vim /opt/mysql-proxy/scripts/rw-splitting.lua
=============================
-- connection pool
if not proxy.global.config.rwsplit then
proxy.global.config.rwsplit = {
min_idle_connections = 1, //預設為4
max_idle_connections = 1, //預設為8
is_debug = false
}
end
=============================
修改完成後,啟動mysql-proxy
/opt/mysql-proxy/init.d/mysql-proxy start
本文出自 “學習linux” 部落格,請務必保留此出處http://10265013.blog.51cto.com/10255013/1762207
讀寫分離mysql-proxy