自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Centos5.6下MySQL Proxy0.8.2的安裝及測試

原創(chuàng)
數(shù)據(jù)庫 MySQL
MySQL Proxy是一個(gè)處于MySQL Client端和MySQL Server端之間的簡單程序,它可以監(jiān)測、分析或改變它們的通信。它使用靈活,沒有限制,常見的用途包括:負(fù)載平衡,故障、查詢分析,查詢過濾和修改等等。

【51CTO獨(dú)家特稿】MySQL Proxy就是這么一個(gè)中間層代理,簡單的說,MySQL Proxy就是一個(gè)連接池,負(fù)責(zé)將前臺應(yīng)用的連接請求轉(zhuǎn)發(fā)給后臺的數(shù)據(jù)庫,并且通過使用lua腳本,可以實(shí)現(xiàn)復(fù)雜的連接控制和過濾,從而實(shí)現(xiàn)讀寫分離和負(fù)載平衡。對于應(yīng)用來說,MySQL Proxy是完全透明的,應(yīng)用則只需要連接到MySQL Proxy的監(jiān)聽端口即可。當(dāng)然,這樣proxy機(jī)器可能成為單點(diǎn)失效,但完全可以使用多個(gè)proxy機(jī)器做為冗余,在應(yīng)用服務(wù)器的連接池配置中配置到多個(gè)proxy的連接參數(shù)即可。MySQL Proxy更強(qiáng)大的一項(xiàng)功能是實(shí)現(xiàn)“ 讀寫分離”,基本原理是讓主數(shù)據(jù)庫處理事務(wù)性查詢,讓從庫處理SELECT查詢。數(shù)據(jù)庫復(fù)制被用來把事務(wù)性查詢導(dǎo)致的變更同步到集群中的從庫。在生成Mysql的M-S結(jié)構(gòu)后,為了實(shí)現(xiàn)讀寫分離,需要使用Mysql Proxy。目前Mysql Proxy的版本為0.8.2 。

MySQl Proxy目前應(yīng)用的生產(chǎn)環(huán)境:

一、現(xiàn)實(shí)中很多應(yīng)用環(huán)境是這樣:在程序開發(fā)初期就沒有規(guī)劃好,程序讀寫數(shù)據(jù)都只提供一個(gè)IP接口,后期由于壓力頂不住,公司要求后來的系統(tǒng)架構(gòu)師/DBA將公司的數(shù)據(jù)庫架構(gòu)更改,這樣在程序上實(shí)現(xiàn)比較困難,所以加進(jìn)此中間層來實(shí)現(xiàn)。

二、建議大家還是將其應(yīng)用中小型網(wǎng)站,特別是讀比較頻繁的網(wǎng)站。如果是大型網(wǎng)站或門戶型的網(wǎng)站,建議讀寫分離還是從開發(fā)層面實(shí)現(xiàn)。

三、建議大家采用MySQL Proxy 0.8.0以上的版本,它修正了以前不少BUG,而且穩(wěn)定性也不錯(cuò)。

一、MySQL Proxy0.8.2的安裝步驟如下:

先從mysql.com官方地址http://dev.mysql.com/downloads/mysql-proxy/下載源碼包到/usr/local/src/目錄下,建議大家采用***的MySQL Proxy0.8.2版本,Mysql Proxy0.8.2安裝之前有先決條件,如下:

libevent 1.x 或更高
glib2 2.6.0 或更高
lua 5.1.x 或更高
pkg-config
libtool 1.5 或更高
MySQL 5.0.x 或更高的開發(fā)庫

服務(wù)器操作系統(tǒng):Centos5.6 x86_64

1.為了加速安裝進(jìn)度,我們可以先yum安裝必須的庫,同時(shí)解決pkg-config、libtool和Mysql開發(fā)庫,由于mysql-proxy實(shí)際并不需要在本機(jī)上運(yùn)行mysql實(shí)例,所以我們在這里用yum安裝,命令如下所示:

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

2.libevent安裝libevent-2.0.13版本,從此處可以下載:

http://monkey.org/~provos/libevent-2.0.13-stable.tar.gz

運(yùn)行如下命令進(jìn)行安裝:

  1. tar xvf libevent-2.0.13-stable.tar.gz  
  2. cd libevent-2.0.13-stable  
  3. ./configure  
  4. make && make install 

3.glib2安裝glib-2.18.4版,從此處可以下載:

http://ftp.gnome.org/pub/gnome/sources/glib/2.18/glib-2.18.4.tar.gz

運(yùn)行如下命令進(jìn)行安裝:

  1. tar xvf glib-2.18.4.tar.gz  
  2. cd glib-2.18.4  
  3. ./configure  
  4. make && make install 

4.lua安裝5.1.4版本,安裝之前需要先安裝readline 6.1,不然會報(bào)錯(cuò)缺少頭文件:

readline 6.1下載:

ftp://ftp.cwru.edu/pub/bash/readline-6.1.tar.gz

運(yùn)行如下命令進(jìn)行安裝:

  1. tar xvf readline-6.1.tar.gz     
  2. cd readline-6.1  
  3. ./configure  
  4. make && make install 

為了讓動態(tài)鏈接庫為系統(tǒng)所共享,我們這里用ldconfig

  1. ldconfig -v 

用此選項(xiàng)時(shí),ldconfig將顯示正在掃描的目錄及搜索到的動態(tài)鏈接庫,還有它所創(chuàng)建的連接的名字。

5.安裝lua 5.1.4,其下載地址為http://www.lua.org/ftp/lua-5.1.4.tar.gz。

  1. cd /usr/local/src  
  2. tar xvf lua-5.1.4.tar.gz  
  3. cd lua-5.1.4 

# 64位系統(tǒng),需在CFLAGS里加上-fPIC ,我們用vim編輯下src/Makefile文件,修改代碼如下所示:

  1. CFLAGS= -O2 -Wall -fPIC $(MYCFLAGS) 

我們繼續(xù)用如下命令進(jìn)行安裝:

  1. make linux  
  2. make install 

6.配置pkg-config 環(huán)境變量,命令如下所示:

  1. cp etc/lua.pc /usr/local/lib/pkgconfig/   
  2. export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig 

7.以上操作就完成了基礎(chǔ)文件的安裝,接下來是MySQL Proxy0.8.2安裝,下載完后運(yùn)行如下命令:

  1. tar xvf mysql-proxy-0.8.2.tar.gz  
  2. cd mysql-proxy-0.8.2  
  3. ./configure –prefix=/usr/local/mysql-proxy  
  4. make && make install  
  5. cp lib/rw-splitting.lua /usr/local/lib/  
  6. cp lib/admin.lua /usr/local/lib/ 

二、到這里MySQL-proxy已基本安裝完成,接下來就是MySQL Proxy0.8.2的測試和配置了。

MySQL Proxy環(huán)境設(shè)置說明

Master  MySQL服務(wù)器:192.168.2.117

Slave MySQL服務(wù)器:192.168.192.168.2.115

MySQL Proxy服務(wù)器:192.168.2.112

1.mysql-proxy選項(xiàng)說明,大家也可以用mysql-proxy –help-all查看它的幫助選項(xiàng),命令如下所示:

  1. mysql-proxy --help-all 

管理功能選項(xiàng):

  1. --admin-address=host:port 指定一個(gè)mysqo-proxy的管理端口,缺省是4041;  
  2. --admin-username=<string> username to allow to log in  
  3. --admin-password=<string> password to allow to log in  
  4. --admin-lua-script=<filename> script to execute by the admin plugin 

代理功能選項(xiàng):

-P,--proxy-address=<host:port> 是mysql-proxy 服務(wù)器端的監(jiān)聽端口,缺省是4040,建議改為3306,方便開發(fā)人員寫代碼。
-r,--proxy-read-only-backend-addresses=<host:port> 只讀Slave的地址和端口,缺省為不設(shè)置;
-b,--proxy-backend-addresses=<host:port> 遠(yuǎn)程Master地址和端口,可設(shè)置多個(gè)做failover和load balance,缺省是127.0.0.1:3306;
--proxy-skip-profiling 關(guān)閉查詢分析功能, 缺省是打開的;
--proxy-fix-bug-25371 修正 mysql的libmysql版本大于5.1.12的一個(gè)#25371號bug;
-s,--proxy-lua-script=<file> 指定一個(gè)Lua腳本來控制mysql-proxy的運(yùn)行和設(shè)置,這個(gè)腳本在每次新建連接和腳本發(fā)生修改的的時(shí)候?qū)⒅匦抡{(diào)用;

其他選項(xiàng):

--defaults-file=<file>配置文件,可以把mysql-proxy的參數(shù)信息置入一個(gè)配置文件里,建議大家用這種配置MySQL Proxy0.8.2,比較方便;
--daemon mysql-proxy以守護(hù)進(jìn)程方式運(yùn)行;
--pid-file=file 設(shè)置mysql-proxy的存儲PID文件的路徑;
--keepalive try to restart the proxy if it crashed,保持連接啟動進(jìn)程會有2個(gè), 一號進(jìn)程用來監(jiān) 視二號進(jìn)程, 如果二號進(jìn)程死掉自動重啟proxy,這是新版MySQL Proxy的增加的Keepalived功能,它修正了以前MySQL Proxy容易死掉的bug,建議大家開啟此功能。

完整的mysql-proxy配置文件如下:
 

  1. [mysql-proxy]  
  2. admin-username=root  
  3. admin-password=123456  
  4. admin-lua-script=/usr/local/lib/admin.lua  
  5. proxy-read-only-backend-addresses=192.168.2.115  
  6. proxy-backend-addresses=192.168.2.117  
  7. proxy-lua-script=/usr/local/lib/rw-splitting.lua  
  8. log-file=/var/log/mysql-proxy.log  
  9. log-level=debug  
  10. daemon=true 
  11. keepalive=true 

2.給用戶授權(quán)
在Master/Slave建立一個(gè)測試用戶,因?yàn)橐院罂蛻舳税l(fā)送的SQL都是通過mysql-proxy服務(wù)器來轉(zhuǎn)發(fā),所以要確??梢詮膍ysql-proxy服務(wù)器上登錄MySQL主從庫,分別在主和從MySQL機(jī)器上執(zhí)行如下所示:

  1. mysql> grant all privileges on *.* to 'test'@'192.168.2.117' identified by 'test' with  grant option;  
  2. mysql> grant all privileges on *.* to 'test'@'192.168.2.115' identified by 'test' with  grant option; 

3.做完此步我們就可以在MySQL Proxy0.8.2上進(jìn)行測試了,命令如下所示:

  1. /usr/local/mysql-proxy/bin/mysql-proxy -P 192.168.2.112:3306 --defaults-file=/etc/mysql-proxy.cnf  

我們監(jiān)測下MySQL Proxy的日志,有如下字樣表示MySQL Proxy已成功啟動了(注意之前要成功啟動117和115上的mysql程序),如下所示:
2012-03-13 14:05:38: (message) added read-only backend: 192.168.2.115
2012-03-13 16:14:56: (message) proxy-plugin.c.1508: connect(192.168.2.115:3306) failed: Connection refused. Retrying with different backend.
2012-03-14 13:58:23: (message) chassis-unix-daemon.c:136: [angel] we try to keep PID=2399 alive
2012-03-14 13:58:23: (debug) chassis-unix-daemon.c:157: waiting for 2399
2012-03-14 13:58:23: (debug) chassis-unix-daemon.c:121: we are the child: 2399
2012-03-14 13:58:23: (message) mysql-proxy 0.8.2 started
2012-03-14 13:58:23: (debug) max open file-descriptors = 1024
2012-03-14 13:58:23: (message) proxy listening on port 192.168.2.112:3306
2012-03-14 13:58:23: (message) added read/write backend: 192.168.2.117
2012-03-14 13:58:23: (message) added read-only backend: 192.168.2.115

我們多開些MySQL客戶端,會發(fā)現(xiàn)MySQL Proxy0.8.2很容易的利用Lua腳本實(shí)現(xiàn)讀寫分離功能了,在進(jìn)行測試前我比較擔(dān)心的一個(gè)問題是:如果主Master因故障停止服務(wù)了,MySQL Proxy會不會在從機(jī)上面寫數(shù)據(jù)呢?這樣會導(dǎo)致主從數(shù)據(jù)不一,事實(shí)上,我在停掉192.168.2.117上的MySQL時(shí)發(fā)現(xiàn),MySQL Proxy0.8.2直接不允許寫數(shù)據(jù)了。

三、MySQL Proxy0.8.2測試中遇到的問題。
1.我們可以修改讀寫分離Lua腳本,讓測試更容易,Lua腳本默認(rèn)最小4個(gè)***8個(gè)以上的客戶端連接才會實(shí)現(xiàn)讀寫分離(這是因?yàn)閙ysql-proxy會檢測客戶端連接, 當(dāng)連接沒有超過min_idle_connections預(yù)設(shè)值時(shí),不會進(jìn)行讀寫分離,即查詢操作會發(fā)生到Master上),現(xiàn)改為最小1個(gè)***2個(gè),我們用vim修改/usr/local/lib/rw-splitting.lua腳本,改動內(nèi)容如下所示:

  1. if not proxy.global.config.rwsplit then  
  2.         proxy.global.config.rwsplit = {  
  3.                 min_idle_connections = 1,  
  4.                 max_idle_connections = 2,  
  5.  
  6.                 is_debug = false 
  7.         }  
  8. end 

2.MySQL Proxy0.8.2啟動后,我們看的網(wǎng)站頁面全是亂碼,所以我們要將主從數(shù)據(jù)庫的配置文件my.cnf加進(jìn)如下代碼以避免這個(gè)問題:

  1. [mysqld]  
  2. skip-character-set-client-handshake  
  3. init-connect='SET NAMES utf8' 
  4. default-character-set=utf8 

3.配置文件的權(quán)限問題

建議使用配置文件的形式啟動,注意配置文件必須是660權(quán)限,否則無法啟動。如果有多個(gè)Slave的話,proxy-read-only-backend-addresses參數(shù)可以配置多個(gè)以逗號分隔的IP:Port從庫列表。

注意的是,雖然以前的MySQL Proxy的版本存在著這樣或那樣的問題,但新版的MySQL Proxy0.8.2基本都修正這些Bug了,而且它畢竟是MySQL官方推出的產(chǎn)品,而且相對于Amoeba而言,MySQL Proxy支持事務(wù),我們在生產(chǎn)環(huán)境下可以嘗試將其用之于代碼已固定而且不能更改、的中小型網(wǎng)站。

【編輯推薦】

  1. MySQL源碼學(xué)習(xí):MDL字典鎖
  2. MySQL Cluster開發(fā)環(huán)境簡明部署
  3. MySQL的四種不同查詢的分析
  4. MySQL的四種不同查詢的分析
  5. MySQL內(nèi)存表的特性與使用介紹

 

責(zé)任編輯:彭凡 來源: 51CTO
相關(guān)推薦

2012-03-19 20:39:08

centosvirtualbox

2012-03-18 22:33:15

centosxen

2012-09-06 09:21:46

Centos5.6HeartbeatMySQL

2011-10-28 16:05:56

Node.js

2013-04-10 15:12:03

MySQL 5.6

2013-04-01 15:42:10

MySQL 5.6Windows

2013-06-26 15:58:33

CentOS 5.6Memcached

2011-04-12 09:23:29

CentOS 5.6

2011-08-30 10:08:38

Centos 5.2Mysql ProxyLUA

2011-08-30 11:09:26

MySQL ProxyLua

2011-08-17 10:19:30

CentOSOpenStack N

2011-08-30 10:36:31

Ubuntu 9.04Mysql ProxyLua

2011-05-05 09:32:59

CentOS 5.6KVM

2011-07-04 11:45:59

XenCentOS 5.6

2011-10-09 13:16:50

LNMP生產(chǎn)服務(wù)器自動安裝

2021-06-29 12:10:48

CentOSMySQL工具

2011-03-10 15:44:18

CentOSLAMP安裝

2011-03-10 15:44:18

CentOSLAMP安裝

2020-11-03 14:50:18

CentOSMySQL 8.0數(shù)去庫

2011-08-30 09:47:00

Linux5u3luaMySQL Proxy
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號