我們一直在與HAProxy戰鬥幾天,現在在亞馬遜EC2;迄今爲止的體驗非常棒,但我們一直在阻止軟件負載平衡器獲得更多性能。我們並不完全是Linux網絡專家(我們通常是.NET商店),但是我們迄今爲止一直都在持有我們自己的,試圖設置適當的限制,檢查內核消息和tcpdump是否存在任何違規行爲。 到目前爲止,我們已經達到約1,700個請求/秒的高峯,此時客戶端超時(我們一直在使用和調整httperf用於此目的)。一位同事和我正在傾聽最近的Stack Overflow播客,其中Reddit創始人指出他們的整個網站運行一個HAProxy節點,而且迄今爲止它還沒有成爲瓶頸。確認!要麼不知道有多少併發請求,我們做的是非常錯誤的事情,或者EC2的共享特性限制了Ec2實例的網絡堆棧(我們使用的是大型實例類型)。考慮到Joel和Reddit創始人都認爲網絡可能會成爲限制因素,這有可能是我們看到的限制嗎?Amazon EC2中的負載平衡?
任何想法非常感謝!
編輯看起來實際問題並不是實際上與負載平衡器節點!罪魁禍首實際上是運行httperf的節點,在這種情況下。由於httperf針對每個請求構建和拆分套接字,因此它會在內核中花費大量CPU時間。當我們提高請求速率時,TCP FIN TTL(默認爲60s)會導致套接字過長,並且ip_local_port_range的默認值對於此使用情況來說太低。基本上,在客戶端(httperf)節點持續創建和銷燬新套接字幾分鐘後,未使用端口的數量用完,並且在此階段後續「請求」出錯,產生低請求/秒數和大量的錯誤。
我們也看過nginx,但我們一直在使用RighScale,他們已經有了HAProxy的插件腳本。噢,當然,我們的時間太緊[當然]要切換組件,除非它證明絕對必要。實際上,在AWS上允許我們使用nginx並行地測試另一個設置(如果有保證的話),並在晚些時候進行切換。
This page很好地描述了每個sysctl變量(在這種情況下調整了ip_local_port_range和tcp_fin_timeout)。
Marc,你應該寫下你配置這些東西的經驗,並將它們發佈到某處(你的公司是否有博客?)。聽起來好像對很多人有用。 Upvoted你的問題。 – SquareCog 2008-11-07 06:55:56
您的鏈接已損壞。 – Ztyx 2015-05-19 19:20:14
@Ztyx謝謝!只是更新了它。我搜索了一個更新,更新的源代碼,看起來原來的網站仍然有很高的PageRank,內容還是很不錯,所以我只是糾正它以反映新的URL。 – 2015-05-20 21:27:35