【MySQL】MySQL中proxy的配置詳情

這篇文章算是mysql數(shù)據(jù)庫主從配置的后續(xù)残炮,因為配置proxy的前提是需要配置數(shù)據(jù)庫的主從環(huán)境。如果不清楚主從數(shù)據(jù)庫怎么配置的同學(xué)可以參考:http://www.reibang.com/p/eed0ca8ba299
主從配置文章中的主數(shù)據(jù)庫和從數(shù)據(jù)庫的IP地址可能與這篇文章中的不一樣势就,這是因為弄proxy前重裝了虛擬機里面的系統(tǒng),但基本思想是一樣的蛋勺,望諒解鸠删。

首先說說proxy的基本用途和原理:
主從同步是將master庫中的數(shù)據(jù)同步到slave中贼陶,讀寫數(shù)據(jù)還是經(jīng)過master庫的,數(shù)據(jù)量少的時候還能負載的起碉怔,但當(dāng)數(shù)據(jù)量比較大的時候,因為讀寫都由master庫來執(zhí)行撮胧,所以性能將會急劇下降,所以才會提到讀寫分離锻离,在主從數(shù)據(jù)庫中铺峭,slave只會從所指定的master同步數(shù)據(jù)蜈膨,但一般不會被用來直接寫入數(shù)據(jù),因為這樣的話將造成主從不同步的問題莉炉,而master數(shù)據(jù)庫則是需要寫入數(shù)據(jù)供slave庫同步碴犬,所以,master庫可以用來只寫入數(shù)據(jù)用服协,而讀取數(shù)據(jù)就使用slave庫,這樣就可以使用讀寫分離治专,從而優(yōu)化數(shù)據(jù)庫的讀寫性能遭顶,提高讀寫效率张峰。


proxy+主從數(shù)據(jù)庫概念圖.png

從圖中可以看到棒旗,SQL語句并不直接進入到master數(shù)據(jù)庫或者slave數(shù)據(jù)庫,而是進入到proxy饶深,然后proxy判斷這條語句是有關(guān)寫的語句(包括insert逛拱、update敌厘、delete)還是讀語句(select)朽合,當(dāng)時寫語句的時候,那么proxy將向master所在的服務(wù)器發(fā)出請求曹步,同理,如果是讀語句的時候讲婚,proxy將向slave所在的服務(wù)器發(fā)出請求。

首先是需要用到的數(shù)據(jù)庫服務(wù)器IP地址和有關(guān)環(huán)境:
Master(主)服務(wù)器IP:192.168.189.128
Slave(從)服務(wù)器IP:192.168.189.129
Proxy服務(wù)器IP:192.168.189.130
操作系統(tǒng):CentOS 6.9 64位
數(shù)據(jù)庫:MySQL 5.6

讀寫分離是由lua實現(xiàn)的活合,即lua是基礎(chǔ)組件,但聽說新版的已經(jīng)集成了lua芜辕,不知道是不是不再需要自己手動去安裝的意思尚骄,反正不差那么一步

# yum -y install gcc* gcc-c++* autoconf* automake* zlib* libxml* ncurses-devel* libmc rypt* libtool* flex*  pkgconfig*

安裝需要一段時間侵续,在這段時間可以去下載proxy的tar包状蜗,這里用的是tar包宏邮,還沒嘗試過用yum來安裝蜜氨。
下載地址:https://downloads.mysql.com/archives/proxy/#downloads
如果Linux有圖形界面而且用的是虛擬機的話就好辦,直接拖進去就可以了郎汪,但如果沒有圖形界面或想要在Linux中上傳Windows的文件煞赢,那么需要參考到之前寫的這篇文章:
http://www.reibang.com/p/304ec5b0ae32
獲取到proxy的tar包之后就可以開始進行配置了照筑。

# tar zxvf mysql-proxy-0.8.5-linux-el6-x86-64bit.tar.gz  //解壓文件
# mv mysql-proxy-0.8.5-linux-el6-x86-64bit /usr/local/mysql-proxy  //將解壓得到的文件夾移動到某個位置,這個位置需要自己創(chuàng)建

將解壓得到的文件復(fù)制到對應(yīng)的位置

# cd /usr/local/mysql-proxy
# mkdir lua #創(chuàng)建腳本存放目錄
# mkdir logs #創(chuàng)建日志目錄
# cp share/doc/mysql-proxy/rw-splitting.lua ./lua #復(fù)制讀寫分離配置文件
# cp share/doc/mysql-proxy/admin-sql.lua ./lua #復(fù)制管理腳本
# vi /etc/mysql-proxy.cnf   #創(chuàng)建配置文件

將以下復(fù)制到配置文件中弟断,并按照自己的需要修改
重點注意的是:#后面的文字只是為了讀者明白各個參數(shù)的意義昏翰,在實際的文件中最好刪除或者將注釋和參數(shù)放在不同的行棚菊,同時检碗,每個參數(shù)后面不能后空格折剃,一個空格都不行(重點怕犁!重點奏甫!重點!)款筑,這關(guān)系到最后啟動服務(wù)的問題奈梳,如果留有空格攘须,將啟動失敗于宙,筆者曾經(jīng)就踩了這個坑捞魁!

[mysql-proxy]
user=root #運行mysql-proxy用戶
admin-username=root #主從mysql共有的用戶
admin-password=123456 #用戶的密碼
proxy-address=192.168.189.130:4040 #mysql-proxy運行ip和端口奉件,不加端口,默認4040
proxy-read-only-backend-addresses=192.168.189.129 #指定后端從slave讀取數(shù)據(jù)
proxy-backend-addresses=192.168.189.128 #指定后端主master寫入數(shù)據(jù)
proxy-lua-script=/usr/local/mysql-proxy/lua/rw-splitting.lua #指定讀寫分離配置文件位置
admin-lua-script=/usr/local/mysql-proxy/lua/admin-sql.lua #指定管理腳本
log-file=/usr/local/mysql-proxy/logs/mysql-proxy.log #日志位置
log-level=info #定義log日志級別,由高到低分別有(error|warning|info|message|debug)
daemon=true    #以守護進程方式運行
keepalive=true #mysql-proxy崩潰時摆碉,嘗試重啟

:wq保存后退出兆解,然后修改文件的權(quán)限

# chmod 660 /etc/mysql-proxy.cnf

修改讀寫分離配置文件

# vi /usr/local/mysql-proxy/lua/rw-splitting.lua
if not proxy.global.config.rwsplit then
 proxy.global.config.rwsplit = {
  min_idle_connections = 1, #默認超過4個連接數(shù)時,才開始讀寫分離现拒,改為1
  max_idle_connections = 1, #默認8印蔬,改為1
  is_debug = false
 }
end

配置一下環(huán)境變量侥猬,不然將找不到mysql-proxy這個命令

# export PATH=$PATH:/usr/local/mysql-proxy/bin/
# echo "PATH=$PATH:/usr/local/mysql-proxy/bin" >> /etc/profile

配置完環(huán)境變量之后荤胁,可以使用該命令來測試一下是否配置成功

mysql-proxy --help

順便仅政,這里介紹一下各個參數(shù)的意義:

--help-all   :獲取全部幫助信息圆丹;
--proxy-address=host:port  :代理服務(wù)監(jiān)聽的地址和端口惊楼;
--admin-address=host:port  :管理模塊監(jiān)聽的地址和端口;
--proxy-backend-addresses=host:port :后端mysql服務(wù)器的地址和端口;
--proxy-read-only-backend-addresses=host:port :后端只讀mysql服務(wù)器的地址和端口劣欢;
--proxy-lua-script=file_name :完成mysql代理功能的Lua腳本校套;
--daemon  :以守護進程模式啟動mysql-proxy笛匙;
--keepalive  :在mysql-proxy崩潰時嘗試重啟之;
--log-file=/path/to/log_file_name :日志文件名稱获枝;
--log-level=level :日志級別嚣崭;
--log-use-syslog :基于syslog記錄日志雹舀;
--plugins=plugin:在mysql-proxy啟動時加載的插件葱跋;
--user=user_name  :運行mysql-proxy進程的用戶娱俺;
--defaults-file=/path/to/conf_file_name : 默認使用的配置文件路徑;其配置段使用[mysql-proxy]標識掂碱;
--proxy-skip-profiling : 禁用profile疼燥;
--pid-file=/path/to/pid_file_name :進程文件名醉者;

下面遍開始啟動mysql-proxy了

# mysql-proxy --defaults-file=/etc/mysql-proxy.cnf #開啟服務(wù)
# netstat -tupln | grep 4040 #已經(jīng)啟動
# tcp 0 0 192.168.189.130:4040 0.0.0.0:* LISTEN 1264/mysql-proxy

如果執(zhí)行開啟服務(wù)的命令后,后面沒有跟著一堆東西,說明配置成功了
下面開始讀寫分離的測試:
測試的話從網(wǎng)上看到的大致有兩種方法:
1粒竖、在主從和proxy配置正確的情況下,關(guān)閉從庫的服務(wù):slave stop岁歉;然后在proxy作查詢操作,正常情況下只能看到表非剃,但不能查詢到表里面的內(nèi)容
2备绽、另一種方法就是使用抓包的方式,這里主要使用這種方式,應(yīng)該比較容易理解
首先使用該命令分別在master服務(wù)器和slave服務(wù)器上監(jiān)聽:
其中eth部分是網(wǎng)卡的驅(qū)動名稱塌西,可以在/etc/sysconfig/network-scripts/中看到办桨,一般第一個顯示的就是崔挖,只需要eth*這部分就可以了
master服務(wù)器:

# tcpdump -i eth2 -nn -XX ip dst 192.168.189.128 and tcp dst port 3306
監(jiān)聽master3306端口.png

slave服務(wù)器:

# tcpdump -i eth1 -nn -XX ip dst 192.168.189.129 and tcp dst port 3306
監(jiān)聽slave3306端口.png

然后需要登錄上proxy的服務(wù)器上的數(shù)據(jù)庫,準備對數(shù)據(jù)庫進行操作古沥。

# mysql -uroot -p123456 --port=4040 //注意,這里的端口號是前面配置文件里面寫的端口號盹沈,如果還是使用3306乞封,那么將登錄的不是proxy的數(shù)據(jù)庫

筆者這里使用方法是在Windows上的Navicat中遠程登錄肃晚,具體方法可以參考:http://www.reibang.com/p/fa4db03db9ca
對了,還有一點晋修,要確保這個數(shù)據(jù)庫與master還有slave的數(shù)據(jù)庫是一樣的廊蜒,比如原本master用含有test_db數(shù)據(jù)庫著榴,那么proxy和slave也應(yīng)該有,即是數(shù)據(jù)要同步
筆者這里已經(jīng)創(chuàng)建了一個名為test_db的數(shù)據(jù)庫和一張名為user的表作為測試用
然后在查詢中輸入一條insert語句并執(zhí)行

insert into user values(124);

然后查看master中的抓的包


insert時master抓的包.png

從圖中可以看見可以抓取到insert的語句严卖,但再看看slave的監(jiān)聽結(jié)果發(fā)現(xiàn)并沒有結(jié)果
同樣的来颤,執(zhí)行一條查詢語句

select * from user;
image.png

然后再去看看slave的監(jiān)聽結(jié)果


select時slave抓的包.png

會發(fā)現(xiàn),slave中能抓取到查詢時候的語句拷沸,但master中并沒有抓取到
總結(jié):
master中能抓取到有關(guān)寫的sql語句的包(update和delete讀者可以自行測試),但slave不能跨扮,同時帝嗡,slave能抓取到有關(guān)讀的sql語句的包,但master不能,說明這已經(jīng)完成了讀寫分離的配置了
其實這種配置方法只是將解壓到的包放到相應(yīng)的文件夾中喉脖,再弄個配置文件就OK了抑月,并沒有想象的那樣復(fù)雜,最主要的還是自己建的那個用來啟動的配置文件里面不能有錯谦絮,不能有空格(重要),這點要細心檢查性锭。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末叫胖,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子臭家,更是在濱河造成了極大的恐慌方淤,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,482評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件你踩,死亡現(xiàn)場離奇詭異讳苦,居然都是意外死亡鸳谜,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,377評論 2 382
  • 文/潘曉璐 我一進店門辛馆,熙熙樓的掌柜王于貴愁眉苦臉地迎上來寿酌,“玉大人秧荆,你說我怎么就攤上這事颁股】飨疲” “怎么了怜校?”我有些...
    開封第一講書人閱讀 152,762評論 0 342
  • 文/不壞的土叔 我叫張陵机蔗,是天一觀的道長梆掸。 經(jīng)常有香客問我卑硫,道長硝拧,這世上最難降的妖魔是什么咸这? 我笑而不...
    開封第一講書人閱讀 55,273評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上柠辞,老公的妹妹穿的比我還像新娘图毕。我一直安慰自己治拿,他們只是感情好捏检,可當(dāng)我...
    茶點故事閱讀 64,289評論 5 373
  • 文/花漫 我一把揭開白布踩晶。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,046評論 1 285
  • 那天康震,我揣著相機與錄音,去河邊找鬼潘拱。 笑死月褥,一個胖子當(dāng)著我的面吹牛瓢喉,可吹牛的內(nèi)容都是我干的惑芭。 我是一名探鬼主播婴渡,決...
    沈念sama閱讀 38,351評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼堂鲤,長吁一口氣:“原來是場噩夢啊……” “哼酬滤!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,988評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎痹届,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體队腐,經(jīng)...
    沈念sama閱讀 43,476評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡柴淘,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,948評論 2 324
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了为严。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,064評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡应民,死狀恐怖夕吻,靈堂內(nèi)的尸體忽然破棺而出诲锹,到底是詐尸還是另有隱情涉馅,我是刑警寧澤,帶...
    沈念sama閱讀 33,712評論 4 323
  • 正文 年R本政府宣布庸诱,位于F島的核電站晤揣,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏碉渡。R本人自食惡果不足惜母剥,卻給世界環(huán)境...
    茶點故事閱讀 39,261評論 3 307
  • 文/蒙蒙 一形导、第九天 我趴在偏房一處隱蔽的房頂上張望习霹。 院中可真熱鬧朵耕,春花似錦淋叶、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,264評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽熏迹。三九已至凝赛,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間墓猎,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,486評論 1 262
  • 我被黑心中介騙來泰國打工骗卜, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留搀军,地道東北人膨俐。 一個月前我還...
    沈念sama閱讀 45,511評論 2 354
  • 正文 我出身青樓焚刺,卻偏偏與公主長得像,于是被迫代替她去往敵國和親乳愉。 傳聞我的和親對象是個殘疾皇子屯远,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,802評論 2 345

推薦閱讀更多精彩內(nèi)容