日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > 数据库 >内容正文

数据库

mysql数据漂移_第28问:SIP 漂移时,会影响正在使用的数据库连接么?

發(fā)布時(shí)間:2024/9/3 数据库 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql数据漂移_第28问:SIP 漂移时,会影响正在使用的数据库连接么? 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

問(wèn)題

我們經(jīng)常使用浮動(dòng) IP(SIP,或叫 VIP),來(lái)完成數(shù)據(jù)庫(kù)的高可用部署。

業(yè)務(wù)通過(guò)訪問(wèn)浮動(dòng) IP,始終訪問(wèn)主數(shù)據(jù)庫(kù)。如果業(yè)務(wù)正在訪問(wèn)數(shù)據(jù)庫(kù)時(shí),數(shù)據(jù)庫(kù)主從發(fā)生切換,導(dǎo)致 SIP 漂移,那正在使用的數(shù)據(jù)庫(kù)連接會(huì)受到影響么?

實(shí)驗(yàn)

我們創(chuàng)建同子網(wǎng)的兩臺(tái)虛擬機(jī),分別安裝 MySQL。再準(zhǔn)備一臺(tái)額外的虛擬機(jī),用來(lái)模擬業(yè)務(wù),訪問(wèn)數(shù)據(jù)庫(kù),此處省略安裝過(guò)程。這兩臺(tái)虛擬機(jī)的 IP 分別是 x.x.x.37 和 x.x.x.39,為了容易區(qū)分,我們?cè)O(shè)置 PS1,來(lái)區(qū)分兩個(gè) linux 的會(huì)話。下圖以 37 為例,這里設(shè)置了 PS1,并確認(rèn)機(jī)器上有創(chuàng)建好數(shù)據(jù)庫(kù),

39 與之類似:

我們?cè)龠x取一個(gè) SIP: x.x.x.200,將其綁定到 37 上,

向子網(wǎng)進(jìn)行 arp 宣告,通知大家 ip 變更了:

現(xiàn)在業(yè)務(wù)機(jī)器上,測(cè)試一下訪問(wèn) SIP 成功:

我們?cè)跀?shù)據(jù)庫(kù)中用 sysbench 灌入數(shù)據(jù),此處省略步驟,只看結(jié)果:

然后向數(shù)據(jù)庫(kù)執(zhí)行一個(gè) select,這里我們用了一個(gè) sleep,使得數(shù)據(jù)庫(kù)返回結(jié)果集慢一些,大概每秒輸出 1000 行左右:

執(zhí)行 SQL 后,MySQL 客戶端會(huì)不停輸出結(jié)果,如果發(fā)生了任何連接問(wèn)題,我們可以立刻發(fā)現(xiàn)。現(xiàn)在讓 SIP 發(fā)生一次切換。準(zhǔn)備好如下命令:先在 37 上卸下 SIP,再在 39 上加上 SIP,發(fā)送 arp 宣告。

準(zhǔn)備好命令后,開(kāi)始拼手速,讓命令以很短的時(shí)間先后執(zhí)行。執(zhí)行后,會(huì)發(fā)現(xiàn)業(yè)務(wù)機(jī)上跑的 select 輸出停了,會(huì)停很久以后,

我們來(lái)看看這個(gè)現(xiàn)象的原理:在 37 上,我們可以找到這根連接:

幾十秒后,進(jìn)入 FIN-WAIT-1 階段,也就是說(shuō) 37 已經(jīng)感知到這根連接不太對(duì),再 48 秒后,會(huì)關(guān)閉這根連接:

而此時(shí)在業(yè)務(wù)機(jī)器上,這根連接依然存在,會(huì)在 116 分鐘以后,探測(cè) tcp keepalive 失敗后,才感知到連接出問(wèn)題:

我們?cè)囍鴮I(yè)務(wù)機(jī)的 tcp keepalive 間隔調(diào)小一點(diǎn),看看能不能讓業(yè)務(wù)機(jī)更快感知到連接出了問(wèn)題:

再重做一下實(shí)驗(yàn),會(huì)發(fā)現(xiàn)幾秒鐘后,MySQL client 就會(huì)感知到連接出了問(wèn)題:

我們來(lái)抓個(gè)包看看:

重做試驗(yàn),用 Wireshark 打開(kāi)抓包結(jié)果:

可以看到 SIP 切換后,TCP Keepalive 包發(fā)往了交換機(jī),但沒(méi)有收到應(yīng)答包。當(dāng)超過(guò) TCP Keepalive 的指定次數(shù)后,應(yīng)用機(jī)器感知到了連接錯(cuò)誤,發(fā)起了 RST 斷開(kāi)連接。也就是說(shuō):當(dāng) SIP 發(fā)生切換時(shí),舊連接發(fā)出的包已經(jīng)被丟棄了,舊連接會(huì)一直等待應(yīng)答,所以需要 TCP keepalive 這種主動(dòng)探測(cè)機(jī)制,才會(huì)探測(cè)到無(wú)應(yīng)答的狀況。

小貼士

當(dāng)應(yīng)用連接到數(shù)據(jù)庫(kù)時(shí),建議要配置 TCP keepalive 功能,并且間隔要調(diào)小到業(yè)務(wù)能接受的范圍內(nèi)。默認(rèn)的 TCP keepalive 的間隔是幾小時(shí)才能感知故障。

但是:不要模仿實(shí)驗(yàn)中這樣,調(diào)整操作系統(tǒng)級(jí)別的 TCP Keepalive 參數(shù)。應(yīng)在應(yīng)用建立連接時(shí)將 TCP keepalive 參數(shù)配置在連接級(jí)別。

關(guān)于 MySQL 的技術(shù)內(nèi)容,你們還有什么想知道的嗎?趕緊留言告訴小編吧!

總結(jié)

以上是生活随笔為你收集整理的mysql数据漂移_第28问:SIP 漂移时,会影响正在使用的数据库连接么?的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。