fangpsh's blog

HAProxy in 2018

haproxy_in_2018

之前在Twitter 上有看到HAProxy 官方号发tweet,说新版支持HTTP/2 了,当时没在意,人家Nginx 一年前就支持了好吧,你才来。最近看到一篇文章,CertSimple: HAProxy in 2018,吹了一发HAProxy。

1.8 提供了完整的 HTTP/2 支持,不知道bug 多不多,记得Nginx 刚刚支持HTTP/2 时修了很多bug。
另外一个重大的变化是Multithreading,多线程支持。HAProxy 支持多进程(nbproc),有几个问题,监控检查是每个进程自己做的,统计页面也不准确,maxconn 参数也只能限制单个进程。在前公司用到HAProxy 的时候,就因为这些问题,把多进程关了。多线程就好了,没了这些问题,依然能充分利用CPU。

1.8 还加了一个Master/Worker Mode,类似Nginx 的进程模型,一个Master + 多个 Worker。

$ ps axf -o pid,command
15012      \_ haproxy -f ./master.cfg -d
15013          \_ haproxy -f ./master.cfg -d
15014          \_ haproxy -f ./master.cfg -d

据说是为了解决:

But this wasn’t really convenient in cases where 3rd party software was monitoring and controlling the HAProxy processes (e.g. needing to reload them) as it had to be aware of HAProxy’s individual processes and control each one separately. One of the examples in this category was certainly systemd.

管理进程的时候能方便点。

CertSimple 那篇文章对比HAProxy 和Nginx,吐槽Nginx 默认的status 页面太简单,这个倒是真的。HAProxy 的统计页面确实非常详细。 haproxy_stats
图片来源datadoghq.com

HAProxy 提供了api 来动态的管理、配置机器,Nginx 的动态Upstream 还得用插件搞半天,参考9.2. Unix Socket commands

关于Haproxy 监控的另外一篇文章:How to collect HAProxy metrics

echo "show stat" | nc -U /var/run/haproxy.sock

HAProxy 日志输出也比Nginx 详细很多,并非常精简,每次分析HAProxy 的日志,都得打开它的文档,一个字符一个字符的查看对比,特别是那一堆Flag,非常有用,CC、CD、cD、sQ 等,因为Haproxy 在后端和客户中间,出现问题的时候,到底是前端还是后端的问题,通过这些标志非常方便,参考Session state at disconnection

HAProxy 作为一个纯粹的前端负载均衡器,可能比Nginx 出色很多,不过在Web Server 方面,HAProxy 难以望其项背。

有机会一定要试一试HAProxy 1.8。