负载均衡提供了一种廉价有效透明的方法,以便扩展网络设备和服务器的带宽、增加吞吐量、加强网络处理能力、提高网络的灵活性和可用性。

而在云网络中,对负载均衡的需求是大量存在的,因此各个云厂商都对应其产品开发出不同的负载均衡器。

这里,我们品高也因应这个大环境开发出一种具有一定颠覆性的负载均衡器。在正式介绍品高云网络负载均衡器之前,我们先看看传统上比较常用的负载均衡部署方法。

代理式负载均衡:

在负载均衡器的发展历史上,代理式负载均衡器是一种比较常用也是最早出现的基于代理服务器软件实现的一种代理方式。

它是一种双向代理的负载均衡器,好处是通用容易理解并且配置简单成熟,后排机器不需要任何操作。但又往往因为双向的流量都需要通过负载均衡器处理,所以这种方式的负载均衡,通常都需要一个性能极其优秀的机器作为负载均衡器,不然很可能会成为这个网络中的性能瓶颈位。

LVS-DR 模式负载均衡:

LVS-DR 模式负载均衡器的工作原理是:客户端发送请求到负载均衡器的 VIP,然后通过负载均衡处理后到后排机器,后排机器收到请求后,直接回复到客户端而非再次通过负载均衡器。

这样解决了来回双向流量都要经过代理机器的问题,但使用 LVS 的不足是负载均衡器和后排服务器都需要配置 VIP。综合上来说, 这种模式的负载均衡在性能上有很大的提升。

品高云网络负载均衡:

在介绍完两个传统的负载均衡器后。我们正式介绍一下品高云网络负载均衡器,我们的均衡器基于 SDN 上,吸收了 LVS-DR 模式——高效低成本特性的负载均衡器。屏弃了 VIP 的配置,同时支持 Keepalived 等常用配备,也可选择配备专用的品高 WAF 防火墙作为安全的保证。

品高云网络负载均衡工作原理:

那么我们的负载均衡器是怎样工作的呢? 我们来具体一点说说。

当客户端访问负载均衡器时,SDN 控制器会配置正向的流表,让数据包送达负载均衡器,同时 SDN 控制器会配置后排机器访问客户端的流表,以达到当后排机器可以正常回包到客户端的目的。

那为什么不让后排机器访问客户机时才配置流表? 正常来说,SDN 控制器会在有新的数据包到达,才会配置一条让数据包通过的流表到物理节点 (NC)。

品高云是单向通过负载均衡器,当后排机器要响应请求去查找客户端 MAC 地址时,如果负载均衡器和后排机器不是同一控制器管理的话,不能快速查找到 MAC 地址,这样就违背了高效的特点了。

综合情况, 品高云是让后排机器访问客户端的流表在客户端发送请求时就配置完毕。

六大亮点

好了,说完了品高负载均衡器的一些工作原理和技术细节之后。我们来谈谈我们的品高负载均衡器有究竟具有了哪些颠覆性的亮点。

这些亮点是品高负载均衡器的价值所在,对于用户来说,它可以得到与使用其他负载均衡所没有的愉快体验。

免配置:

免配置是针对 LVS 来说的,即后排机器免除了配置,节省用户的培训与时间成本。

免 VIP:

免 VIP 是针对 LVS 和 Keepalived 来说的,即免除了 LVS 头机和后排机器的 VIP。可以降低再次购买公有 IP 的成本。

高性能:

性能高低是判断负载均衡器是否值得使用的重要指标。品高云可以满足绝大部分想用低成本就获得高效的用户的要求。

这里列举了一组测试数据,数据的生成是使用 tsung 工具(详见文末“备注”)分布式部署 100 台客户端实例并发压力测试品高负载均衡器。

高可用:

品高负载均衡器配备免 VIP 高可用特性,在有一台均衡器当机之后可以快速响应达到无缝交替,用户并无感知。

弹性:

弹性是指即时添加后排机器即时可用,扩容方便。传统的负载均衡器如果要添加一台后排机器需要重新编写配置文件,而且必须重新启动应用。而品高负载均衡器则无需这些操作,避免消耗配置时间。

安全:

品高负载均衡器可选择配备专用的品高 WAF。针对 SQL 注入、XSS 危险字段、敏感字段、自定义规则都可以用很好的防护功能。

 备注

tsung 是用 erlang 开发的一款可分布式部署的压力测试工具,可以生成成千上万的用户模拟对服务器进行访问。同时该工具支持多种协议,比如 SSL、HHTP、WebDAV、SOAP、PostgreSQL、MySQL、LDAP 和 Jabber/XMPP。除此之外,Tsung 还可以在 html 上产生图表以及输入测试的详细报告。

下面简单介绍一下使用示例:

默认情况下,tsung 会加载 xml 配置文件:~/.tsung/tsung.xml

一个比较简单的配置文件:

<?xml version="1.0"?>

<!DOCTYPE tsung SYSTEM "/usr/share/tsung/tsung-1.0.dtd">

<tsung loglevel="notice" version="1.0">

  <clients>

    <client host="localhost" use_controller_vm="true" maxusers="100000"/>

  </clients>

<servers>

  <server host="192.168.1.10" port="80" type="tcp"></server>

</servers>

  <load>

  <arrivalphase phase="1" duration="1" unit="minute">

     <users interarrival="0.01" unit="second"></users>

  </arrivalphase>

  </load>

 <sessions>

  <session name="http-example" probability="100" type="ts_http">

    <request>

        <http url="/index.html" method="GET" version="1.1"></http>

    </request>

  </session>

 </sessions>

</tsung>
  • clients:用户产生的方式
  • servers:被测试的服务器
  • load:压力配置
  • sessions:用户所产生的会话

运行命令 tsung start 压力测试开始,tsung 输出一段提示,告知测试记录的位置,可以使用命令 tsung status 查看 tsung 当前的状态。