MySQL5.7中多源復(fù)制及Nginx中間件是怎么樣的-創(chuàng)新互聯(lián)

本篇文章給大家分享的是有關(guān)MySQL5.7中多源復(fù)制及Nginx中間件是怎么樣的,小編覺得挺實(shí)用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

成都創(chuàng)新互聯(lián)公司長期為近千家客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對(duì)不同對(duì)象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺(tái),與合作伙伴共同營造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為鞏留企業(yè)提供專業(yè)的網(wǎng)站設(shè)計(jì)制作、成都網(wǎng)站制作,鞏留網(wǎng)站改版等技術(shù)服務(wù)。擁有10多年豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開發(fā)。

之前有寫了一點(diǎn)驗(yàn)證多源復(fù)制的東西,下半篇寫點(diǎn)Nginx的東西;
背景:趕
環(huán)境:MySQL-5.7.9 x 4,Nging-1.9.7 x 1,五臺(tái)虛擬機(jī)
總體思路:
四個(gè)MySQL實(shí)例組成雙主雙從的多源復(fù)制結(jié)構(gòu),Nginx放在前端,對(duì)應(yīng)用層屏蔽DB層細(xì)節(jié),同時(shí)由Nginx來完成負(fù)載均衡/讀寫分離和“偽HA”
MySQL5.7中多源復(fù)制及Nginx中間件是怎么樣的

使用的Nginx配置
MySQL5.7中多源復(fù)制及Nginx中間件是怎么樣的

簡單試一下功能,連接的時(shí)候指定host,使用TCP的方式去連接61上面的Nginx,可以看到成功的登錄了MySQL,
MySQL5.7中多源復(fù)制及Nginx中間件是怎么樣的
在兩臺(tái)主庫上面找一找,發(fā)現(xiàn)這個(gè)鏈接發(fā)送到了67上面
MySQL5.7中多源復(fù)制及Nginx中間件是怎么樣的
既然連進(jìn)來了,通過一個(gè)純粹做請求轉(zhuǎn)發(fā)的Nginx之后, 普通的操作應(yīng)該是沒什么問題,試驗(yàn)略過;
連接write的upstream和連接read的upstream沒什么本質(zhì)上的區(qū)別,試驗(yàn)略過;
通過Nginx做中間件來實(shí)現(xiàn)讀寫分離的話,只需要在URL中連接不同的端口就可以了,試驗(yàn)略過;
多個(gè)連接同時(shí)連到這個(gè)Nginx的寫庫(主庫),可以看到連接被分到了不同的服務(wù)器上,
MySQL5.7中多源復(fù)制及Nginx中間件是怎么樣的MySQL5.7中多源復(fù)制及Nginx中間件是怎么樣的

提問:如果有session連接在某一臺(tái)主庫上,然后那臺(tái)主庫出問題掛掉了,客戶端的狀態(tài)?
解惑:kill主庫的mysql進(jìn)程,模擬down機(jī);
MySQL5.7中多源復(fù)制及Nginx中間件是怎么樣的
有兩個(gè)客戶端出現(xiàn)了重連的提示,另外兩個(gè)一切正常;
MySQL5.7中多源復(fù)制及Nginx中間件是怎么樣的MySQL5.7中多源復(fù)制及Nginx中間件是怎么樣的MySQL5.7中多源復(fù)制及Nginx中間件是怎么樣的MySQL5.7中多源復(fù)制及Nginx中間件是怎么樣的

存活的主庫狀態(tài),可以看到請求都轉(zhuǎn)到了存活的主庫上;
MySQL5.7中多源復(fù)制及Nginx中間件是怎么樣的
結(jié)論:對(duì)客戶端來說,雖然保持連接的那個(gè)主庫掛掉了,但是在前端來看,就像是連接超時(shí)被斷開了一樣,并不會(huì)感受到端口為13579的主庫已經(jīng)掛掉了;
讀庫同理,驗(yàn)證略過;

額外發(fā)現(xiàn)的斷開連接現(xiàn)象:在Nginx設(shè)置的timeout也會(huì)有一定的影響,接上圖的狀態(tài),一直不去操作這幾個(gè)客戶端,在超時(shí)時(shí)間之后,會(huì)在MySQL端輸出如下錯(cuò)誤日志;
MySQL5.7中多源復(fù)制及Nginx中間件是怎么樣的
重新操作一下幾個(gè)客戶端,會(huì)看到所有的連接其實(shí)都斷開了;
MySQL5.7中多源復(fù)制及Nginx中間件是怎么樣的MySQL5.7中多源復(fù)制及Nginx中間件是怎么樣的MySQL5.7中多源復(fù)制及Nginx中間件是怎么樣的MySQL5.7中多源復(fù)制及Nginx中間件是怎么樣的

解惑:連接建立以后,空閑的時(shí)間超過Nginx(proxy_timeout)和MySQL的設(shè)置中比較短的那個(gè)之后,就會(huì)自行斷開;
結(jié)論:和Nginx+Tomcat的反向代理一樣,超時(shí)時(shí)間的設(shè)置也要注意一下;

提問:某一個(gè)庫(以上面掛掉的那個(gè)主庫為例)掛掉之后,fail_timeout的時(shí)間之后,這個(gè)主庫恢復(fù)了,會(huì)不會(huì)自動(dòng)加回列表?
解惑:為了方便測試,改一下fail_timeout的時(shí)間,然后關(guān)掉主庫67,重啟Nginx以后,再啟動(dòng)67,等待一段時(shí)間,
MySQL5.7中多源復(fù)制及Nginx中間件是怎么樣的
MySQL5.7中多源復(fù)制及Nginx中間件是怎么樣的
間隔的時(shí)間稍微久了點(diǎn), 不過重新開啟連接以后,可以看到有連接重新進(jìn)來了,fail_timeout的設(shè)置還是ok的,在超過這個(gè)時(shí)間段以后,Nginx會(huì)去檢測后端服務(wù)器的狀況,把啟動(dòng)起來的服務(wù)器重新加進(jìn)來;
結(jié)論:Nginx作為一個(gè)中間件,可以做到“自動(dòng)移除掛掉的機(jī)器/自動(dòng)加回恢復(fù)的機(jī)器”;
PS:如果是啟動(dòng)了,正在恢復(fù)數(shù)據(jù)的話,最好還是把出問題的庫從upstream移除比較好;

提問:在upstream的配置中,寫的是通過hash的方式去轉(zhuǎn)發(fā)連接,那么是否可以像Nginx+Tomcat的反向代理一樣,采用權(quán)重等其他的方式來轉(zhuǎn)發(fā)連接?
解惑:試一下;為了方便看效果,簡單改一下Nginx的配置
MySQL5.7中多源復(fù)制及Nginx中間件是怎么樣的
連接四個(gè)客戶端以后,看看兩個(gè)主庫的連接;
MySQL5.7中多源復(fù)制及Nginx中間件是怎么樣的MySQL5.7中多源復(fù)制及Nginx中間件是怎么樣的
可以看到連接都轉(zhuǎn)發(fā)到了65主庫上面去了;
結(jié)論:權(quán)重的配置是可以生效的,這樣的話,可以根據(jù)實(shí)際要求,用不同配置的MySQL實(shí)例來搭建這種類似的架構(gòu);

提問:既然使用Nginx作為中間件,可以做到“自動(dòng)移除掛掉的機(jī)器/自動(dòng)加回恢復(fù)的機(jī)器”,也對(duì)前端屏蔽了后端DB架構(gòu)上的細(xì)節(jié),不會(huì)發(fā)現(xiàn)某個(gè)DB不可用,為什么要描述成“偽HA”?
解惑:個(gè)人觀點(diǎn),確實(shí),通過Nginx的中間件,去訪問后端的MySQL,確實(shí)是具備了HA的樣子;某個(gè)MySQL實(shí)例掛掉了,不會(huì)導(dǎo)致整個(gè)DB系統(tǒng)無法運(yùn)行;失敗的MySQL實(shí)例恢復(fù)以后能自動(dòng)加入;
但是用Nginx做中間件有兩個(gè)很明顯的短板:Nginx的端口是作為對(duì)外的唯一出口暴露給應(yīng)用層的, Nginx本身的HA需要其他方式去保障(不像VIP,就算admin或者worker掛掉了,也不影響數(shù)據(jù)庫訪問);
另一個(gè)更重要的缺點(diǎn),就是兩個(gè)主庫全部掛了以后,Nginx本身不能新選舉一個(gè)從庫作為新的master來重新搭建新的主從架構(gòu);
這兩個(gè)短板,尤其是第二個(gè)短板,如果是很嚴(yán)格的HA環(huán)境和要求,這第二個(gè)短板是非常致命的,想要彌補(bǔ)這個(gè),自行開發(fā)一套/修改開源工具也許能做到;

追問:存在這么明顯/嚴(yán)重的短板,多源復(fù)制+Nginx的中間件,到底好用么?
解惑:個(gè)人觀點(diǎn),還不錯(cuò);
1.Nginx的單出口問題,完全可以通過啟動(dòng)多個(gè)實(shí)例(分開的)指向同一套后端數(shù)據(jù)庫來提高可用性(keepalived也可以)
2.不能選舉新Master的問題,在5.7的多源復(fù)制功能中,可以橫向增加Master的數(shù)量,完全靠更多的實(shí)例來提高可用性,
這么做,可能會(huì)使N主之間的數(shù)據(jù)一致性受到影響,不過只需要在讀庫的upstream里面剔除掉這些主庫就行了;
3.完全用提高實(shí)例數(shù)的方式去提高可用性,個(gè)別的實(shí)例(不管主或者從)掛掉了,基本上不會(huì)影響到業(yè)務(wù),所表現(xiàn)出來的,只是“某些事務(wù)異常中斷了”,需要應(yīng)用層重試,
而不是mha那樣,主庫掛了需要一段時(shí)間來重建主從結(jié)構(gòu);

以上就是MySQL5.7中多源復(fù)制及Nginx中間件是怎么樣的,小編相信有部分知識(shí)點(diǎn)可能是我們?nèi)粘9ぷ鲿?huì)見到或用到的。希望你能通過這篇文章學(xué)到更多知識(shí)。更多詳情敬請關(guān)注創(chuàng)新互聯(lián)-成都網(wǎng)站建設(shè)公司行業(yè)資訊頻道。

文章題目:MySQL5.7中多源復(fù)制及Nginx中間件是怎么樣的-創(chuàng)新互聯(lián)
URL標(biāo)題:http://www.muchs.cn/article38/cshhpp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供企業(yè)網(wǎng)站制作域名注冊、面包屑導(dǎo)航、自適應(yīng)網(wǎng)站、品牌網(wǎng)站設(shè)計(jì)、云服務(wù)器

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)公司