软件负载均衡的探究与实现

软负载方案介绍

谈到负载均衡,目前业内全球最出名的应该是F5,国内深信服在这方面知名度也很高。硬件厂商的负载均衡方案有其优势,这点毋庸置疑。那么,负载相对较低的环境下,是否有基于开源的软负载方案呢?

目前业内常见的几种软负载方案有:

1.LVS (Linux Virtual Server)。红帽RHEL6及以前版本的操作系统的软负载方案就是LVS,有单独的订阅服务。

2. HAproxy。红帽RHEL7软负载方案是HAProxy,并且有单独的订阅服务。红帽PaaS解决方案中,也是用HAproxy做容器的router。

3.Nginx。最近一两年非常火的软负载解决方案。红帽对于运行在RHEL上,并且有RHEL订阅的客户,提供如下版本Nginx的一定的技术支持:nginx18、nginx 1.10。

相面,我们对三种软负载进行对比:

方案名称

使用层面

优势

劣势

LVS

四层

抗负载能力强、工作稳定、无流量、应用范围比较广

不支持正则表达式处理,不能做动静分离

Haproxy

四层到七层

支持http类应用和HAProxy和TCP协议、负载均衡策略丰富、负载均衡性能高、速度快。

反向代理能力若于Nginx

Nginx

七层

对网络稳定性的依赖非常、中层反向代理能力强

仅能支持http、https和Email协议、对后端服务器的健康检查,只支持通过端口来检测,不支持通过url来检测、不支持Session的直接保持

软负载支持的路由方式

1.NAT方式

2.Direct Routing方式

从访问方式看,在NAT方式下,客户端请求入口和出口相同,都会经过软负载。而在Director Route方式下,客户端请求入口和出口不同,因此软负载的压力会小很多。

目前LVS和HAproxy都支持NAT和DR这两种方式。

软负载VIP的切换速度

LVS和HAproxy主从节点之间的维护,是由keepalived实现的。keepalived会同时运行自主从软负载上。它做两件事:

  • To balance the load across the real servers.
  • To check the integrity of the services on each real server。

而主从负载之间的健康状态通讯,是通过VRRP(Virtual Router Redundancy Protocol)协议实现的。所以说,当主软负载出现问题后,VIP会切换到备的软负载。而切换的速度,很大程度上取决于VRRP的最小检测时间。

VRRP V3将V2版本中检测时间最短1秒一次,提升到最短10毫秒1次。这将大幅提升当LVS单节出现问题时,VIP的切换速度。如下为VRRP源码:

VRRP3支持新版本Keepalived 1.3.5,将在红帽RHEL7.4中一起发布。 (RHEL7.4计划8月1日发布) 。

所以说,目前RHEL7.3中的LVS或者HAproxy,基于keepalived的主备切换,一定是秒级,因为VRRP2最小的检测时间间隔是1秒。但当RHEL7使用VRRP3以后,相信这个速度会得到大幅提升。

性能极限

HAproxy性能参考:http://www.haproxy.org/10g.html

单个haproxy节点跑满10Gbps吞吐,单个haproxy单位时间响应最大请求数为20000个,可以维护40000个并发连接。

关于LVS的最大性能。此前我们内部做的一些测试,单个LVS节点可以维护超过10万的并发连接。

而一位淘宝的大牛,通过优化,可以将LVS达到如下性能:

方案建议

首先我们先看一个技术专家的建议:

http://www.jianshu.com/p/184243e36318

现在网站发展的趋势对网络负载均衡的使用是随着网站规模的提升根据不同的阶段来使用不同的技术: 第一阶段:利用Nginx或者HAProxy进行单点的负载均衡,这一阶段服务器规模刚脱离开单服务器、单数据库的模式,需要一定的负载均衡,但是仍然规模较小没有专业的维护团队来进行维护,也没有需要进行大规模的网站部署。这样利用Nginx或者HAproxy就是第一选择,此时这些东西上手快, 配置容易,在七层之上利用HTTP协议就可以,这时是第一选择。

第二阶段:随着网络服务进一步扩大,这时单点的Nginx已经不能满足,这时使用LVS或者商用F5就是首要选择,Nginx此时就作为LVS或者 F5的节点来使用,具体LVS或者F5的是选择是根据公司规模,人才以及资金能力来选择的,这里也不做详谈,但是一般来说这阶段相关人才跟不上业务的提 升,所以购买商业负载均衡已经成为了必经之路。

第三阶段:这时网络服务已经成为主流产品,此时随着公司知名度也进一步扩展,相关人才的能力以及数量也随之提升,这时无论从开发适合自身产品的定制,以及降低成本来讲开源的LVS,已经成为首选,这时LVS会成为主流。 最终形成比较理想的状态为:F5/LVS<—>Haproxy<—>Squid/Varnish<—>AppServer。

以上的观点我基本赞同。

笔者的建议是,对于金融行业对软负载有一定性能要求的场景,可以使用LVS+HAproxy两层架构来实现软负载。这样做到了将LVS和HAproxy做到优势互补,架构又比较简洁。

在技术支持方面,可以通过购买红帽RHEL订阅加一定量的人天服务,作为技术保障,为客户托底。

参考文献:

https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/html/Load_Balancer_Administration/ch-keepalived-overview-VSA.html#s1-lvs-basic-VSA

http://www.austintek.com/LVS/LVS-HOWTO/HOWTO/LVS-HOWTO.performance.html

https://wenku.baidu.com/view/62eb30050740be1e650e9af4.html

http://www.ha97.com/5646.html

http://www.jianshu.com/p/184243e36318

原文发布于微信公众号 - 大魏分享(david-share)

原文发表时间:2017-06-23

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏程序员互动联盟

【编程基础】聊聊C语言-存储世界的奥秘

上一篇讲到了C语言的数据类型,从这篇我们开始讲讲与数据类型有这着千丝万缕联系的变量。 所有语言的变量都是存储在计算机存储系统中,C语言的变量当然也不例外。所以...

38770
来自专栏北京马哥教育

25台服务器怎样支撑世界第54大网站

摘要:同时使用Linux和Windows平台产品,大量使用静态的方法和类,Stack Overflow是个重度性能控。同时,取代横向扩展,他们坚持着纵向扩展思路...

77090
来自专栏北京马哥教育

深入浅出Docker(一):Docker核心技术预览

【编者按】Docker是PaaS供应商dotCloud开源的一个基于LXC 的高级容器引擎,源代码托管在 GitHub 上, 基于Go语言开发并遵从Apach...

36340
来自专栏FreeBuf

PHP成为首个在内核中嵌入加密库的编程语言

PHP团队最近投票一致通过了“将Libsodium库集成到PHP内核中”的决议,使得PHP成为首个使用公认现代加密库的编程语言。 Libsodium是个便捷,可...

23570
来自专栏IT派

微信最新版本直接打电话,小伙伴们都惊呆了

版本 6.6.0 中的新功能 - 语音聊天可以像系统电话一样接听。 - 收藏里的笔记可保存为图片、分享至朋友圈。 - 已撤回的消息可以再次编辑。 1 电话拨打...

40180
来自专栏技术翻译

【推荐】50+有用的Docker工具

容器生态系统比以往任何时候都增长和扩展得更快,而且有了这么多的Docker工具和服务,只要了解可用的选项,就会觉得这是一项艰巨的任务。无论你是初学者还是专家、开...

81400
来自专栏CSDN技术头条

GoSnaps:如何支持5天50万用户服务器只花100元

创业者们似乎有这样一个共识:初创公司应尽快推出MVP(最简可行产品)而不应该把扩展性这样的细节放在心上。总是有人给我说推产品是最高的也实际上是唯一的目标,扩展性...

220100
来自专栏北京马哥教育

思维导图终极之战LVS负载均衡

昨天小伙伴们学习的是haproxy,作为负载均衡相比大家也很想在看一下lvs的思维导图。 下面我们开始今天的lvs思维导图之旅 一、 LVS简介 LVS是Li...

41470
来自专栏逸鹏说道

如何利用Nexus 5伪造一张门禁卡

以前在社区看见各种关于RFID的帖子,但是一直没花时间尝试。 近期物业重新安装了小区大门,以前绕一绕,或者钻一下还是能进去的- -, 然而物业说,门禁卡最多...

49350
来自专栏Android 开发者

Android 模拟器现已支持 AMD 处理器和 Hyper-V

自两年前谷歌对 Android 模拟器进行重大更新以来,我们一直致力于开发出一款运行速度快、功能全面的模拟器,帮助您为用户打造卓越应用体验。Android 模拟...

28510

扫码关注云+社区

领取腾讯云代金券