為什么負(fù)載均衡服務(wù)地址會(huì)連接訪問超時(shí)?
從服務(wù)端分析,以下情況會(huì)導(dǎo)致服務(wù)地址鏈接訪問超時(shí):
?服務(wù)地址被安全防護(hù)
如流量黑洞和清洗,WAF防護(hù)(WAF的特點(diǎn)是建連后向客戶端和服務(wù)器集群雙向發(fā)送RST報(bào)文)。
?客戶端端口不足
尤其容易發(fā)生在壓測(cè)的時(shí)候,客戶端端口不足會(huì)導(dǎo)致建立連接失敗,負(fù)載均衡默認(rèn)會(huì)抹除TCP連接的timestamp屬性,Linux協(xié)議棧的tw_reuse(time_wait狀態(tài)連接復(fù)用)無(wú)法生效,time_wait狀態(tài)連接堆積導(dǎo)致客戶端端口不足。
解決方法:客戶端端使用長(zhǎng)連接代替短連接。使用RST報(bào)文斷開連接(socket設(shè)置SO_LINGER屬性) ,而不是發(fā)FIN包這種方式斷開。
?后端服務(wù)器accept隊(duì)列滿
后端服務(wù)器accept隊(duì)列滿,導(dǎo)致后端服務(wù)器不回復(fù)syn_ack報(bào)文,客戶端超時(shí)。
解決方法:默認(rèn)的net.core.somaxconn的值為128,執(zhí)行sysctl -w net.core.somaxconn=1024更改它的值,并重啟后端服務(wù)器上的應(yīng)用。
?從四層負(fù)載均衡后端服務(wù)器訪問該四層負(fù)載均衡的服務(wù)地址
四層負(fù)載均衡,在該負(fù)載均衡的后端服務(wù)器上去訪問該負(fù)載均衡的服務(wù)地址會(huì)導(dǎo)致連接失敗,常見的場(chǎng)景是后端應(yīng)用使用URL拼接的方式跳轉(zhuǎn)訪問。
?對(duì)連接超時(shí)的RST處理不當(dāng)
負(fù)載均衡上建立TCP連接后,如果900s未活動(dòng),則會(huì)向客戶端和服務(wù)器雙向發(fā)送RST斷開連接,有的應(yīng)用對(duì)RST異常處理不當(dāng),可能會(huì)對(duì)已關(guān)閉的連接再次發(fā)送數(shù)據(jù)導(dǎo)致應(yīng)用超時(shí)。