Tcp
使用 ipvs 進行 L4 平衡:丟棄 RST 數據包 - 故障轉移
我有一個 L4 ipvs 負載平衡器和 L7 特使平衡器設置。假設我的一個 L4 平衡器出現故障,並且由於一致的散列,現在由另一個 L4 平衡器處理(感謝 BGP)的流量被代理到同一個 L7 節點。
這應該沒有任何問題,我認為這是一個常見的設置。
問題在於長時間執行的連接。當新的 L4 節點接收到流量(只是數據 - ACK/PUSH 數據包)並且該節點沒有收到 SYN 數據包時,該節點只是將 RST 數據包發送到終止連接的客戶端。下圖說明了這一點。
這不應該發生,我的問題是,有沒有辦法(一個 sysctl 配置或其他東西)是這個原因?我知道我也許可以使用 iptables 丟棄 RST 數據包,但這聽起來不對。
這個特定問題實際上有一個 sysctl 變數
net.ipv4.vs.sloppy_tcp
(https://lore.kernel.org/patchwork/patch/386081/?fbclid=IwAR17t0jEvRSlvZFch1Lz_CDMjYOzUluuNGQmiyKequZK1Vq4kI75vezWEGs)可以解決這個問題。非常感謝 Patric Shuff,他幫助我解決了這個問題(關於這個主題的精彩展示 - https://www.usenix.org/conference/lisa16/conference-program/presentation/shuff)。