隨手摘記:重啟基於tcp的伺服器而不丟包的巧妙做法

最近伺服器上掛著的站多了起來,於是發現重啟httpd時候會丟掉不少的請求… 雖然不是一個很大的問題,但是不解決總是讓人心裡不舒服,故稍作研究,發現了一個利用iptabels DROP請求從而巧妙的解決客戶端被拒絕連線的問題。

想法來自:http://www.mail-archive.com/haproxy@formilux.org/msg06885.html

做法很簡單,就是這樣:

iptables -I INPUT -p tcp --dport the_port_of_server --syn -j DROP
... restart your service ...
iptables -D INPUT -p tcp --dport the_port_of_server --syn -j DROP

簡單來說,就是三個步驟。先DROP通往服務埠的連線,因為是DROP,故客戶端不會收到拒絕連線的資訊。於是客戶端會繼續傳送tcp請求,直到超時或收到響應。之後便是重啟服務,然後移除iptables規則,這時,客戶端便能收到伺服器的迴應了,並且在此期間,客戶端並沒有收到任何伺服器拒絕連線的訊息。

1 關於 “隨手摘記:重啟基於tcp的伺服器而不丟包的巧妙做法” 的評論

發表迴響

你的電子郵件位址並不會被公開。 必要欄位標記為 *