免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: Godbach
打印 上一主题 下一主题

【负载均衡大讨论,参与有礼】TCP/HTTP 负载均衡利器-- HAProxy [复制链接]

论坛徽章:
223
2022北京冬奥会纪念版徽章
日期:2015-08-10 16:30:32操作系统版块每日发帖之星
日期:2016-05-10 19:22:58操作系统版块每日发帖之星
日期:2016-02-18 06:20:00操作系统版块每日发帖之星
日期:2016-03-01 06:20:00操作系统版块每日发帖之星
日期:2016-03-02 06:20:0015-16赛季CBA联赛之上海
日期:2019-09-20 12:29:3219周年集字徽章-周
日期:2019-10-01 20:47:4815-16赛季CBA联赛之八一
日期:2020-10-23 18:30:5320周年集字徽章-20	
日期:2020-10-28 14:14:2615-16赛季CBA联赛之广夏
日期:2023-02-25 16:26:26CU十四周年纪念徽章
日期:2023-04-13 12:23:10操作系统版块每日发帖之星
日期:2016-05-10 19:22:58
11 [报告]
发表于 2016-03-21 15:30 来自手机 |只看该作者
haproxy确实是比较专业优秀的功能全面的负载均衡软件,
如果只有十来台机器,只要nginx就可以了

评分

参与人数 1可用积分 +2 收起 理由
Godbach + 2 感谢分享!

查看全部评分

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
12 [报告]
发表于 2016-03-21 15:34 |只看该作者
回复 11# action08

nginx 支持模块化,灵活一些。

HAProxy 支持的负载均衡功能比较全面,而且还有丰富的统计信息展示界面。


   

论坛徽章:
1
IT运维版块每日发帖之星
日期:2016-04-09 06:20:00
13 [报告]
发表于 2016-03-21 23:38 |只看该作者
haproxy的4层代理其实和7层一样的是吧。那用4层的场景主要就是非HTTP协议的就走haproxy代理了。
我现在工作中也常常用到haproxy了,但主要还是4层的模式。  
按照版主所说,haproxy比LVS的性能低些,是因为要多建立了一次TCP连接,所带来的开销导致性能低下吗。LVS是直接做IP改写了。

因为7层主要也就HTTP了,然后HTTP一般用NGINX,用HAPROXY的少吗。
对于haproxy的使用场景,求大家指教。

我目前这边的场景是做反代,用来解决部分服务器,如访问不了外网,无法YUM安装包,或者因为安全限制,需要走代理来协助访问的几个场景。

评分

参与人数 1可用积分 +6 收起 理由
Godbach + 6 感谢分享

查看全部评分

论坛徽章:
1
IT运维版块每日发帖之星
日期:2016-04-09 06:20:00
14 [报告]
发表于 2016-03-21 23:39 |只看该作者
想深入了解haproxy的原理,版本能指导下方向不。
haproxy的文档好像没有像LVS那样,讲清楚DR模式NAT的工作原理。

论坛徽章:
1
IT运维版块每日发帖之星
日期:2016-04-09 06:20:00
15 [报告]
发表于 2016-03-21 23:59 |只看该作者
回复 10# Godbach
content switch  怎么理解,能详细讲下吗。
这个和F5厂家喊的应用交付网络是一回事么。

   

论坛徽章:
42
19周年集字徽章-周
日期:2019-10-14 14:35:31平安夜徽章
日期:2015-12-26 00:06:30数据库技术版块每日发帖之星
日期:2015-12-01 06:20:002015亚冠之首尔
日期:2015-11-04 22:25:43IT运维版块每日发帖之星
日期:2015-08-17 06:20:00寅虎
日期:2014-06-04 16:25:27狮子座
日期:2014-05-12 11:00:00辰龙
日期:2013-12-20 17:07:19射手座
日期:2013-10-24 21:01:23CU十二周年纪念徽章
日期:2013-10-24 15:41:34IT运维版块每日发帖之星
日期:2016-01-27 06:20:0015-16赛季CBA联赛之新疆
日期:2016-06-07 14:10:01
16 [报告]
发表于 2016-03-22 08:41 |只看该作者
本帖最后由 laputa73 于 2016-03-22 08:42 编辑

1. 个人的工作或者学习中是否接触到 HAProxy,介绍对 HAProxy 的理解
很早就接触过haproxy, 曾经拿来做http的代理。它的控制功能和管理页面还是比较丰富的。
性能实测和nginx差不多。


2. 使用 HAProxy 中遇到了哪些问题,以及最终如何解决
HA的官网MS不在墙里,搜起来费点劲。
资料还是太少。

4. 比较 HAProxy 和其他负载均衡软件。如果做过负载均衡方案选型,可以分享最终的选择以及原因
如果是纯的http简单LB,一般就选nginx了,毕竟简单。
有个项目要用到tcp的LB,记得说HA可以支持mysql,所以就推荐了一把。
但是遇到一个问题,HA做tcp LB时,没法单独实现源地址的双向透明化(透明代理),这个比较蛋疼。
网上搜了一下,有两种解决方案,一种走NAT,一种用bridge.
实际试了一下,感觉不太靠谱,NAT方案性能太差,bridge方案太复杂,也没找到实际可用的案例。
最后还是换成了LVS.

感觉HAproxy主要还是用作http代理,配合keepalived/heartbeat做HA
因为它的功能比较丰富,支持更复杂一些的代理需求。

评分

参与人数 1可用积分 +10 收起 理由
Godbach + 10 感谢分享

查看全部评分

论坛徽章:
5
技术图书徽章
日期:2015-01-14 09:32:18IT运维版块每日发帖之星
日期:2015-10-09 06:20:00IT运维版块每日发帖之星
日期:2015-10-10 06:20:002017金鸡报晓
日期:2017-01-10 15:13:292017金鸡报晓
日期:2017-02-08 10:33:21
17 [报告]
发表于 2016-03-22 09:00 |只看该作者
占个楼层玩玩

论坛徽章:
0
18 [报告]
发表于 2016-03-22 09:12 |只看该作者
本帖最后由 鹰扬影逝 于 2016-03-22 09:15 编辑

回复 1# Godbach


    使用1.6版本时,rabbitmq消费者端的连接是长连接,为保证连接不会被haproxy主动断开,没有设置timeout connect  timeout client   timeout server,而是使用的option tcpka参数。
目前来看确实满足使用,但是在haproxy启动时会发出警告:
[WARNING] 081/091301 (10812) : config : missing timeouts for proxy 'mq-balancer'.
   | While not properly invalid, you will certainly encounter various problems
   | with such a configuration. To fix this, please ensure that all following
   | timeouts are set to a non-zero value: 'client', 'connect', 'server'.

有什么解决办法么?

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
19 [报告]
发表于 2016-03-22 10:56 |只看该作者
回复 18# 鹰扬影逝

代码中打印这条消息的位置在这里
  1.         if ((curproxy->mode == PR_MODE_TCP || curproxy->mode == PR_MODE_HTTP) &&
  2.             (((curproxy->cap & PR_CAP_FE) && !curproxy->timeout.client) ||
  3.              ((curproxy->cap & PR_CAP_BE) && (curproxy->srv) &&
  4.               (!curproxy->timeout.connect ||
  5.                (!curproxy->timeout.server && (curproxy->mode == PR_MODE_HTTP || !curproxy->timeout.tunnel)))))) {
  6.             Warning("config : missing timeouts for %s '%s'.\n"
  7.                 "   | While not properly invalid, you will certainly encounter various problems\n"
  8.                 "   | with such a configuration. To fix this, please ensure that all following\n"
  9.                 "   | timeouts are set to a non-zero value: 'client', 'connect', 'server'.\n",
  10.                 proxy_type_str(curproxy), curproxy->id);
  11.             err_code |= ERR_WARN;
  12.         }
复制代码
就我个人的理解,应该是这个意思:
1)对于通常的 TCP 连接的处理,一般都会有 timeout 的设置。否则一个连接长期的不传输数据,还需要占用系统的内存资源等,是一种浪费。所以 HAProxy 对于这种情况给出了 warning。主要是起到提示的作用。
2)设置了这些 timeout 的话,HAproxy 内部就会启动一个 task,来去判断各种超时的逻辑,到期了就关闭连接。
3)如果不设置这些timeout,那么连接的关闭就需要靠其他情况了,比如 client 和 server 主动关闭等。
4)因此,这里只是 warning,执意要这么配置,HAProxy 仍然可以正常启动。

   

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
20 [报告]
发表于 2016-03-22 11:06 |只看该作者
回复 13# coldgin

haproxy的4层代理其实和7层一样的是吧。那用4层的场景主要就是非HTTP协议的就走haproxy代理了。
我现在工作中也常常用到haproxy了,但主要还是4层的模式。 
 
HAproxy 首先是一个应用层的层数,所以不管是 TCP 还是 HTTP,他都是按照标准的 socket 来去处理的。只是作为 SLB,通常一个 session 就是两个 TCP 连接,HAProxy 通过 session 维持了前后端两个 TCP 连接的关系。

HAProxy 的 HTTP 支持也很完备的,HTTP/2 也支持了。同时,也提供了大量的配置,可以对 HTTP/TCP 的内容进行操作,包含 ACL,包含修改等等。


按照版主所说,haproxy比LVS的性能低些,是因为要多建立了一次TCP连接,所带来的开销导致性能低下吗。LVS是直接做IP改写了。

LVS 其实就是内核态的转发,通常的用法基本上就相当于 NAT。这个性能,肯定不是用户态的应用层序可以比较的。

所以,也没必要拿 HAProxy 去和 LVS 比较。HAProxy 是可以对传输数据进行操作的,比如通过配置,可以识别一个 TCP 连接,是不是 SSL,是不是有其他非 HTTP 的应用协议等等。也就是可以做 DPI(Deep Packet Inspection)

因为7层主要也就HTTP了,然后HTTP一般用NGINX,用HAPROXY的少吗。
对于haproxy的使用场景,求大家指教。

是的,nginx 比较火。而且也有负载均衡的功能。是很多人的优选。

不过如果纯做负载局,对性能要求比较高的话,HAProxy 应该是候选。



   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP