讀寫分離mysql-proxy

來源:互聯網
上載者:User

標籤: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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.