为什么要用 HAProxy 而不是 Nginx 做负载均衡?

本文涉及的产品
传统型负载均衡 CLB,每月750个小时 15LCU
EMR Serverless StarRocks,5000CU*H 48000GB*H
网络型负载均衡 NLB,每月750个小时 15LCU
简介: 负载均衡器是数据中心的入口点,处于访问一切资源的关键路径上。这给了他们一些有趣的特征。首先,它们是在基础设施中需要监控的最重要的点。其次,他们处于一个独特的位置,不仅可以提供有关自己的特性,还可以提供他们所支持的后端的每项服务。有两种流行的开源软件负载均衡器:HAProxy和nginx。让我们看看他们在这方面的异同。

负载均衡器是数据中心的入口点,处于访问一切资源的关键路径上。这给了他们一些有趣的特征。首先,它们是在基础设施中需要监控的最重要的点。其次,他们处于一个独特的位置,不仅可以提供有关自己的特性,还可以提供他们所支持的后端的每项服务。

有两种流行的开源软件负载均衡器:HAProxynginx。让我们看看他们在这方面的异同。


启用负载均衡器上的监控


如题。负载均衡器将生产环境的一切服务组织成为一个整体系统。

  • 安装新的东西
  • 启用统计信息和监控内容
  • 启用日志
  • 启用nginx状态页面

编辑 /etc/nginx/nginx.conf

server { 
    listen 0.0.0.0:6644; 
    access_log off; 
    allow 127.0.0.0/8; 
    allow 10.0.0.0/8; 
    deny all;
    location / { 
         stub_status on; 
    } 
}

启用HAProxy统计信息页面

编辑/etc/haproxy/haproxy.cfg

listen stats 0.0.0.0:6427
    mode http 
    maxconn 10
    no log 
    acl network_allowed src 127.0.0.0/8
    acl network_allowed src 10.0.0.0/8
    tcp-request connection if if!network_allowed 
    stats enable 
    stats uri /

从负载均衡器收集指标

有标准的监控解决方案:datadog,signalfx,prometheus,graphite ... [2]

这些工具从应用程序,服务器和基础架构收集指标,它们允许检索指标,绘制图表并发送警报。

将负载平衡器集成到我们的监控系统中至关重要。我们需要了解客户端活动情况,请求数,错误率等...

毋庸置疑,监控能力将受限于负载均衡器测量到的信息。


可从nginx获得指标

nginx只提供7种不同的指标。

Nginx仅在所有站点上给出总和。 单个站点或应用程序则没有任何数字对应。

活动连接:当前活动客户端连接数,包括等待连接。接受:接受的客户端连接总数。handling:已处理连接的总数。通常,参数值与accept 相同,除非已达到某些资源限制(例如,worker_connections限制)。请求:客户端请求的总数。读取:nginx正在读取请求头的当前连接数。写入:nginx将响应写回客户端的当前连接数。等待:等待请求的当前空闲客户端连接数。

资料来源:https://nginx.org/en/docs/htt...


HAProxy 提供的指标

HAProxy提供83种不同的指标。

数字是全局,每个前端和每个后端(无论哪个有意义)。它们可在人类可读的网页上以原始CSV格式提供。

0. pxname [LFBS]:代理名称

1. svname [LFBS]:服务名称(FRONTEND用于前端,BACKEND用于后端,任何名称用于服务器/侦听器)

2. qcur [..BS]:当前排队的请求。对于后端,这将报告未分配服务器的队列号。

3. qmax [..BS]:qcur的最大值

4. scur [LFBS]:当前会话

5. smax [LFBS]:最大会话

6. slim [LFBS]:配置的会话限制

7. stot [LFBS]:累计数连接

8. bin [LFBS]:字节输入

9. bout [LFBS]:字节输出


[...]


32. 类型[LFBS] :( 0 =前端,1 =后端,2 =服务器,3 =套接字/监听器)

33. rate [.FBS]:每秒的会话数超过最后一秒

34. rate_lim [.F ..]:每秒新会话的配置限制

35. rate_max [.FBS]:每秒新会话的最大数量

36. check_status [... S]:上次健康检查的状态,其中一个:

37. check_code [... S]:layer5-7代码,如果可用

38. check_duration [... S]:以ms为单位完成上次健康检查所用的时间

39. hrsp_1xx [.FBS]:带1xx代码的http响应

40. hrsp_2xx [.FBS]:具有2xx代码的http响应

41. hrsp_3xx [.FBS]:具有3xx代码

42. http响应.hrsp_4xx[.FBS]:具有4xx代码的http响应

43. hrsp_5xx [.FBS]:http响应5xx代码

44. hrsp_other [.FBS]:与其他代码的http响应(协议错误)

[...]

资料来源:http://cbonte.github.io/hapro...


监控负载均衡器

上述度量标准用于在正在运行的系统上生成状态。

首先,我们将看到每个负载均衡器开箱即用的状态页面。然后我们将深入研究第三方监控解决方案。


Nginx状态页面

image.png

7个nginx指标显示在人类可读的网页上,可在127.0.0.1:6644/访问

不开玩笑。这就是nginx认为的“ 状态页面 ”。WTF?

它不显示负载平衡的应用程序。它不显示哪些服务器在线(有什么东西甚至运行???)。在该页面上没有什么可看的,它无助于调试任何问题。


HAProxy统计页面

为了比较,让我们看一下HAProxy监控页面,可在127.0.0.1:6427访问

image.png

在这里,我们可以看到哪些服务器上升或下降,使用了多少带宽,连接了多少客户端等等。这就是监控的意义所在。

正如一位经验丰富的系统管理员曾经告诉我:“ 这页是宇宙中最重要的事情。” [1]

每当事情变得不稳定时。首先,您在浏览器中打开www.yoursite.com,看看它有多糟糕。其次,打开 HAProxy 统计信息页面以查找损坏的内容。此时,您已经90%的时间发现了问题的根源。

在可用监控有限的环境中尤其如此,或者更糟糕的是,根本没有监控工具。状态页面随时可以提供帮助(如果不是,那么只需要几条配置行)。


将nginx与监控系统集成

我们所能得到的只是来自网络状态页面的7个指标,其中只有请求数是值得注意的。它没有以 API 友好格式公开,并且不可能获得每个站点的数字。我们唯一能做的就是解析原始文本,寄希望于在未来的版本中不会改变间距。

鉴于 nginx 没有公开任何有用的信息,现有的监控工具都不能与之集成。当没有任何东西可以得到时,没有任何东西可以显示,也没有什么可以提醒的。

注意:一些监控工具实际上假装支持nginx集成。这意味着他们解析文本并提取请求数。这就是他们所能获得的一切。


将HAProxy与监控系统集成

除了漂亮的人类可读监控页面之外,所有HAProxy指标都以CSV格式提供。工具可以(并且确实)利用它。

例如,这是 Datadog 提供的默认HAProxy仪表板:

6PBT_9[2M$XI2PG8MC2QR2Q.png

Datadog 预制的 HAProxy 仪表板

资料来源:http://docs.datadoghq.com/int...

主机上安装的 Datadog 代理会定期收集 HAProxy 指标。可以绘制指标,可以将图表排列到仪表板(这是一个示例),同时我们可以配置自动警报。

HAProxy 状态页面提供当前状态(在生成页面时),而监控解决方案保存历史记录并允许事后的调试。


为什么nginx没有监控?

nginx故意缺少所有监视功能。它们不会也永远不会免费提供。

如果您已被nginx锁定,并且需要一个合适的监控页面和用于集成的JSON API,则必须支付“ Nginx Plus”版本的费用。价格从每台服务器每年1900美元起。

请参阅:https://www.nginx.com/products/pricing/

结论:不惜一切代价避免使用nginx

负载均衡器是传输的关键点,也是在基础架构中需要监控的最重要的事情。

Nginx的为金钱而剥离了所有监控功能,同时装作开源的样子。

对我们的运营完全视而不见是不可接受的。远离nginx。请改用HAProxy

相关实践学习
SLB负载均衡实践
本场景通过使用阿里云负载均衡 SLB 以及对负载均衡 SLB 后端服务器 ECS 的权重进行修改,快速解决服务器响应速度慢的问题
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
相关文章
|
19天前
|
负载均衡 算法 搜索推荐
Nginx 常用的负载均衡算法
【10月更文挑战第17天】在实际应用中,我们需要根据具体的情况来选择合适的负载均衡算法。同时,还可以结合其他的优化措施,如服务器健康检查、动态调整权重等,来进一步提高负载均衡的效果和系统的稳定性。
108 59
|
1月前
|
负载均衡 应用服务中间件 Linux
nginx学习,看这一篇就够了:下载、安装。使用:正向代理、反向代理、负载均衡。常用命令和配置文件,很全
这篇博客文章详细介绍了Nginx的下载、安装、配置以及使用,包括正向代理、反向代理、负载均衡、动静分离等高级功能,并通过具体实例讲解了如何进行配置。
136 4
nginx学习,看这一篇就够了:下载、安装。使用:正向代理、反向代理、负载均衡。常用命令和配置文件,很全
|
15天前
|
负载均衡 算法 应用服务中间件
Nginx 常用的负载均衡算法
【10月更文挑战第22天】不同的负载均衡算法各有特点和适用场景。在实际应用中,需要根据具体的业务需求、服务器性能和网络环境等因素来选择合适的算法。
20 3
|
19天前
|
负载均衡 监控 应用服务中间件
除了 Nginx,还有以下一些常见的负载均衡工具
【10月更文挑战第17天】这些负载均衡工具各有特点和优势,在不同的应用场景中发挥着重要作用。选择合适的负载均衡工具需要综合考虑性能、功能、稳定性、成本等因素。
|
28天前
|
负载均衡 应用服务中间件 nginx
Nginx的6大负载均衡策略及权重轮询手写配置
【10月更文挑战第9天】 Nginx是一款高性能的HTTP服务器和反向代理服务器,它在处理大量并发请求时表现出色。Nginx的负载均衡功能可以将请求分发到多个服务器,提高网站的吞吐量和可靠性。以下是Nginx支持的6大负载均衡策略:
115 7
|
26天前
|
负载均衡 算法 Java
腾讯面试:说说6大Nginx负载均衡?手写一下权重轮询策略?
尼恩,一位资深架构师,分享了关于负载均衡及其策略的深入解析,特别是基于权重的负载均衡策略。文章不仅介绍了Nginx的五大负载均衡策略,如轮询、加权轮询、IP哈希、最少连接数等,还提供了手写加权轮询算法的Java实现示例。通过这些内容,尼恩帮助读者系统化理解负载均衡技术,提升面试竞争力,实现技术上的“肌肉展示”。此外,他还提供了丰富的技术资料和面试指导,助力求职者在大厂面试中脱颖而出。
腾讯面试:说说6大Nginx负载均衡?手写一下权重轮询策略?
|
29天前
|
缓存 负载均衡 算法
nginx学习:配置文件详解,负载均衡三种算法学习,上接nginx实操篇
Nginx 是一款高性能的 HTTP 和反向代理服务器,也是一个通用的 TCP/UDP 代理服务器,以及一个邮件代理服务器和通用的 HTTP 缓存服务器。
59 0
nginx学习:配置文件详解,负载均衡三种算法学习,上接nginx实操篇
|
1月前
|
开发框架 负载均衡 前端开发
Nginx负载均衡
Nginx负载均衡
|
1月前
|
负载均衡 Java 应用服务中间件
Nginx负载均衡配置
Nginx负载均衡配置
|
1月前
|
负载均衡 算法 应用服务中间件
nginx反向代理与负载均衡
nginx反向代理与负载均衡
32 1
下一篇
无影云桌面