亚洲全黄无码一级在线看_国产剧情久久久性色_无码av一区二区三区无码_亚洲成a×人片在线观看

當前位置: 首頁 > 科技新聞 >

SIP 漂移時是否會影響正在使用的數(shù)據(jù)庫連接-愛可

時間:2020-12-10 15:58來源:網(wǎng)絡(luò)整理 瀏覽:
問題 我們經(jīng)常使用浮動 IP(SIP,或叫 VIP),來完成數(shù)據(jù)庫的高可用部署。業(yè)務(wù)通過訪問浮動 IP,始終訪問主數(shù)據(jù)庫。 如果

問題

我們經(jīng)常使用浮動 IP(SIP,或叫 VIP),來完成數(shù)據(jù)庫的高可用部署。業(yè)務(wù)通過訪問浮動 IP,始終訪問數(shù)據(jù)庫。

如果業(yè)務(wù)正在訪問數(shù)據(jù)庫時,數(shù)據(jù)庫主從發(fā)生切換,導(dǎo)致 SIP 漂移,那正在使用的數(shù)據(jù)庫連接會受到影響么?

實驗

我們創(chuàng)建同子網(wǎng)的兩臺虛擬機,分別安裝 MySQL。

再準備一臺額外的虛擬機,用來模擬業(yè)務(wù),訪問數(shù)據(jù)庫,此處省略安裝過程。

這兩臺虛擬機的 IP 分別是 x.x.x.37 和 x.x.x.39,為了容易區(qū)分,我們設(shè)置 PS1,來區(qū)分兩個 linux 的會話。

下圖以 37 為例,這里設(shè)置了 PS1,并確認機器上有創(chuàng)建好數(shù)據(jù)庫,

39 與之類似:

我們再選取一個 SIP: x.x.x.200,將其綁定到 37 上,

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

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

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

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

執(zhí)行 SQL 后,MySQL 客戶端會不停輸出結(jié)果,如果發(fā)生了任何連接問題,我們可以立刻發(fā)現(xiàn)。

現(xiàn)在讓 SIP 發(fā)生一次切換。準備好如下命令:先在 37 上卸下 SIP,再在 39 上加上 SIP,發(fā)送 arp 宣告。

準備好命令后,開始拼手速,讓命令以很短的時間先后執(zhí)行。

執(zhí)行后,會發(fā)現(xiàn)業(yè)務(wù)機上跑的 select 輸出停了,會停很久以后,

我們來看看這個現(xiàn)象的原理:

在 37 上,我們可以找到這根連接:

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

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

我們試著將業(yè)務(wù)機的 tcp keepalive 間隔調(diào)小一點,看看能不能讓業(yè)務(wù)機更快感知到連接出了問題:

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

我們來抓個包看看:

重做試驗,用 Wireshark 打開抓包結(jié)果:

可以看到 SIP 切換后,TCP Keepalive 包發(fā)往了交換機,但沒有收到應(yīng)答包。當超過 TCP Keepalive 的指定次數(shù)后,應(yīng)用機器感知到了連接錯誤,發(fā)起了 RST 斷開連接。

也就是說:當 SIP 發(fā)生切換時,舊連接發(fā)出的包已經(jīng)被丟棄了,舊連接會一直等待應(yīng)答,所以需要 TCP keepalive 這種主動探測機制,才會探測到無應(yīng)答的狀況。

小貼士

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

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

責任編輯:

推薦內(nèi)容