查看内核是否支持 ipvs






wvp的docker部署sip_wvp的docker部署sip 昨天在DockerCon Europe上,Uber Technologies的高级工程师Andrey Sibiryov展示了如何使用Linux内核十多年来一直使用的开源技术IPVS来提高负载平衡性能。

Andrey Sibiryov在DockerCon Europe上讨论IPVS。

什么是IPVS?

确切地说,IPVS(IP虚拟服务器)已经在内核中使用了15年,它基于netfilter。 它支持TCP,SCTP和UDP,并且可以达到令人难以置信的快速速度,通常不到直接连接速度的5%。 其他功能包括NAT,隧道和直接路由。

它不是代理,而是在第4层上运行的转发器。IPVS将流量从客户端转发到后端,这意味着您可以负载均衡任何内容,甚至包括DNS! 它可以使用的模式包括:

  • IPIP。 封装IP,可在任何地方路由。 该响应将跳过负载平衡器,因此仅请求通过IPVS。
  • DNAT。 重写DST IP,使用相同的L4,行为类似于NAT,重写ip数据包并转发请求和响应流量。
  • DSR。 重写DST MAC以在L2转发。

在测试中,IPVS的性能与常规连接的TPS几乎相同。 HAProxy和MySQL代理的速度约为其速度的60%。

为什么我们需要IPVS?

Sibiryov表示,如果一个应用程序有多个实例,则需要负载平衡。 但是,如果NGINX / HAProxy,Hipache和Vulcan正常工作,为什么需要IPVS?

简单的答案就是速度。 但是还有其他好处:

  • UDP支持
  • 可动态配置
  • 八种以上的平衡方式
  • 健康检查

(https://no-cache.hubspot.com/cta/default/1169977/224ef658-b146-4569-b00b-3c0ad87be198.png)

我们如何使用IPVS?

正如Sibiryov所说:“ Linux内核是太空中疯狂的神奇工具。” 那么,您如何善加利用这些东西呢?

为了使IPVS易于使用,他写了GORB。 它是Docker容器中用于IPVS的REST API,用于为Docker提供IPVS路由。 它仍然是漂亮的Beta,但看起来确实很酷。 GORB具有许多功能:

  • REST API守护程序容器可控制IPVS
  • GORB Docker链接容器可自动检测Docker容器并路由到它们
  • 内置TCP + HTTP运行状况检查
  • 使用Go编写并获得LGPL许可
  • Docker + GORB + MacVLAN网络插件+ IPVS DR模式=梦想设置

Sibiryov指出,小型公司不一定需要IPVS,但是一旦流量增加,它确实变得有用。 在这种情况下,MacVLAN Docker网络插件使您可以通过在L2处转发,为容器提供自己的MAC地址,以利用最快的IPVS模式。

接下来,Sibiryov进行了GORB演示。 他在Mac上通过Virtualbox运行了Docker。 GORB容器的Dockerfile非常简单,因为它是Go应用。 您只需从golang基础开始, go get github.com/kobolog/gorb 。 ENTRYPOINT只是gorb

他以特权模式运行GORB,因为它必须访问主机内核的IPVS模块(这也意味着您必须在主机内核中具有IPVS才能使用GORB)。 当他运行GORB容器时,必须直接访问其主机网络接口eth1以便可以访问和路由流量。

接下来,他运行了GORB Docker Link容器。 该容器可以访问主机Docker守护程序,因此它可以侦听Docker事件。 链接容器还需要访问主机网络接口。 链接容器会在容器启动时发出通知,检查暴露了哪些端口,并将该端口上主机接口上的流量转发到在暴露该端口的情况下运行的所有容器。

他运行了五个NGINX容器,每个容器都暴露了端口80。Docker会自动在外部为每个容器分配不同的端口,但是GORB Docker链接容器会检测到它们,并使用IPVS通过主机的端口80路由它们。 然后,他运行了Apache Bench,这当然太快了。

结论

在结束他的演讲时,Sibiryov简要地将IPVS与25,000美元的企业硬件负载平衡器进行了比较。 尽管GORB仍相对较新(他提醒您要提防错误),但是IPVS是开源的,可配置的,并且与GORB一样,它也是免费的。 它不需要特殊的软件或工具,并且可以在DR模式(MAC L2)下利用1 GBPS线路和仅1%的CPU使用率。

另外,IPVS的手册页为1000字,而不是供应商手册,请不要忘记它已有15年的历史了。 Sibiryov强调,简单性和稳定性使IPVS成为企业负载平衡硬件的替代方案。

翻译自: https://www.javacodegeeks.com/2015/11/kernel-load-balancing-for-docker-containers-using-ipvs.html

查看内核是否支持 ipvs