Networking “本科毕业设计”;负载平衡服务器;?

Networking “本科毕业设计”;负载平衡服务器;?,networking,linux-kernel,load-balancing,distributed,Networking,Linux Kernel,Load Balancing,Distributed,今年我将开始我的最后一个未毕业项目,基本上我将为Linux实现一个简单的基于服务器的负载平衡器。其目的是在OSI第4层(TCP)使其独立于应用程序(Web服务器、FTP服务器、电子邮件服务器等)。负载平衡器需要侦听所有端口,并将包转发到已配置的实际服务器,再转发到其各自请求的端口(遵循类似循环的算法) 另一个意图是将此负载平衡器作为内核模块(如LVS,Linux的本机负载平衡器),并创建另一个用户空间管理应用程序来进行配置 但我有很多疑问, 实现这个负载均衡器的唯一方法是使用内核模块?它不能只是

今年我将开始我的最后一个未毕业项目,基本上我将为Linux实现一个简单的基于服务器的负载平衡器。其目的是在OSI第4层(TCP)使其独立于应用程序(Web服务器、FTP服务器、电子邮件服务器等)。负载平衡器需要侦听所有端口,并将包转发到已配置的实际服务器,再转发到其各自请求的端口(遵循类似循环的算法)

另一个意图是将此负载平衡器作为内核模块(如LVS,Linux的本机负载平衡器),并创建另一个用户空间管理应用程序来进行配置

但我有很多疑问, 实现这个负载均衡器的唯一方法是使用内核模块?它不能只是一个用户空间程序
它不可能在第三层(IP)?我在哪里访问IP数据包并处理所有逻辑


请帮我解答这些疑问,在项目的开始阶段指导我是很重要的。

在您谈论实现内核模块时,我会非常专业。您在TCP层说“转发包”。然后你说“监听所有端口并转发包”。因此,为了实现这一点,您首先需要了解差异:

  • “转发”在TCP级别,意味着Linux应该能够拦截和转发包(基本上是执行NAT),实现这一点的唯一方法是使用与
    iptables和LVS类似的方法(它不监听任何端口)
    iptables
    是一个允许您配置Linux内核防火墙提供的表的应用程序,它使用netfilter的挂钩。因此,是的,它不可能是一个用户空间程序,除非你指的是使用
    iptables
    配置NAT的前端,但我认为这不是重点

  • “侦听所有端口并转发包”意味着您的负载平衡器将在应用程序层4工作,您可能需要的是TCP代理。TCP代理应用程序在用户空间上运行,您可以实现它来侦听一组端口,然后转发来自另一个端口的内容,如和

它非常简单且开源,因此是一个很好的起点

和也是很好的参考资料

除了第4层和第7层外,第2层(链路聚合、端口聚合、以太网通道或千兆以太网通道端口绑定)和第3层(类似)还有网络负载平衡


编辑:工作方式不同
nftables
是新的通用内核包分类引擎的用户空间部分。“
nftables
在Linux内核中添加了一个简单的虚拟机,它可以检查网络数据包并决定如何处理该数据包。”

哇,信息太多了。谢谢你,伙计!让我看看您是否理解,[1]要在内核空间开发,我将在第3层使用netfilters API(它只适用于IP数据包?)。[2] 如果我想在用户空间开发,我可以在第4层工作,例如,制作iptables(一种TCP代理服务)的前端。我还不知道,但我认为第3层平衡器是最好的方法,因为我不依赖于应用程序/端口。最后一个疑问是,对本科生来说,使用网络过滤器和内核模块编程将是一项繁重的工作?我没有内核模块编程方面的经验,但我对linux和网络很熟悉,我将提出一个非常简单的负载平衡器…由于某些原因,我没有收到您的评论通知。但让我回答:1:是的,您将使用netfilters挂钩。2:制作iptables前端并不意味着你的应用程序在“第4层”工作,它只是意味着你在用户级别使用了一些资源,仅此而已。如果您想在第4层进行开发,那么您应该使用netfilter的钩子实现,或者使用任何最终使用它的库(就像Wireshark那样)。这只是你想完成什么的问题。第三层未必更好。。。所有这些都有它的用途。如果我考虑你的问题的级别(不冒犯),我可以说对于使用NETFLASH的钩子来说,这将是非常具有挑战性的。如果您的主要目标是了解内核开发,并且您有时间做一个长期的项目,那么这可能是值得的,但我强烈建议您从用户级应用程序开始,即TCP Proxys,比如balancer。除了您的网络和linux管理员经验外,您还应该非常熟悉高级C开发和内核结构。