2014-02-25 27 views
0

今年我將開始我的最後一個undegraduate項目,基本上我會爲Linux實現一個簡單的基於服務器的負載平衡器。目的是在OSI第4層(TCP)上使其與應用無關(Web服務器,FTP服務器,電子郵件服務器等)。負載均衡器需要偵聽所有端口並將包轉發到配置的真實服務器,並將其轉發到各自請求的端口(遵循循環法等算法)。最終的本科項目「負載平衡服務器」?

另一個目的是將此負載平衡器作爲內核模塊(與Linux的本地負載平衡器LVS一樣),並使另一個用戶空間管理應用程序進行配置。

但是我有很多疑問, 做這個負載均衡器的唯一方法是使用內核模塊?它不能只是一個用戶空間程序?
它不能在第3層(IP)?我在哪裏接入IP數據包並處理所有邏輯?

請幫助我解決這些疑問,在項目開始時指導我很重要。

回答

0

當你談論實現一個內核模塊時,我會非常技術性的。你說在TCP層「轉發包」。但後來你說「聽所有的港口和轉發包裹」。因此,爲了率先實現這一點,你需要知道的差別:

  • 「轉發」在TCP水平,意味着在Linux應該能夠攔截並轉發包(基本上是做NAT)和唯一的方法就是使用netfilters就像iptables和LVS一樣(它不會監聽到任何端口)。 iptables是一個應用程序,它允許您配置Linux內核防火牆提供的表格,該防火牆使用netfilter的掛鉤。所以,是的,它不能是一個用戶空間程序,除非你的前端使用iptables來配置NAT,但我認爲這不是重點。

  • 「監聽所有端口並轉發軟件包」意味着您的負載平衡器將在應用層4上工作,並且您可能想要的是TCP代理。 TCP代理應用程序在用戶空間上運行,您可以實現它以偵聽一組端口,然後轉發進入/來自另一端口的內容,如HAProxyBalance

Balance非常簡單,開源,所以這是一個很好的起點。

l3dsrlnlb也是很好的參考。

除了層4和層7,也有在第2層(鏈路聚合,端口聚合,以太通道或千兆位以太通道端口捆綁)網絡負載平衡,和層3等Cisco Express Forwarding

編輯:Nftables工作不同。 nftables是新的通用內核數據包分類引擎的用戶空間部分。 「nftables在Linux內核中添加了一個簡單的虛擬機,它可以檢查網絡數據包並決定如何處理這個數據包」。

+0

哇,很多信息。謝謝你,兄弟! 讓我看看是否明白你的意思,[1]在內核空間開發,我將在第3層使用netfilters API(它只適用於IP數據包?)。 [2]如果我想在用戶空間開發,我可以在第4層工作,例如,製作iptables(TCP代理服務)的前端。 我還不知道,但我認爲第3層平衡器是最好的方法,因爲我不會依賴應用程序/端口。只需處理IP數據包。 –

+0

最後一個疑問是,使用netfilter和內核模塊編程對本科生來說會很沉重嗎?我沒有使用內核模塊編程的經驗,但是我對linux和網絡有很好的理解,並且我會提出一個非常簡單的Load Balancer ... –

+0

由於某種原因,我還沒有收到您的評論通知。但讓我回答:1:是的,你會使用netfilters鉤子。 2:將iptables作爲前端並不意味着你的應用程序在「第4層」工作,這僅僅意味着你在用戶級使用了一些SO的資源,就這些。如果你想在第4層開發,那麼你應該實現使用netfilter的鉤子或者使用任何結束使用它的庫(比如Wireshark)。這只是你想要完成的事情。第3層可能不一定更好......所有這些都有其用途。 –