官网https://www.haproxy.org/
Haproxy(一)基础介绍
参考URL: https://blog.csdn.net/wangshuminjava/article/details/80539743
haproxy
参考URL: https://blog.51cto.com/chenshengsheng/2108961
认识 HAProxy
参考URL: https://www.jianshu.com/p/0820b45b4f75
HAProxy是一个使用C语言编写的自由及开放源代码软件,其提供高可用性、负载均衡,以及基于TCP和HTTP的应用程序代理。
包括 GitHub、Bitbucket[3]、Stack Overflow[4]、Reddit、Tumblr、Twitter[5][6]和 Tuenti[7]在内的知名网站,及亚马逊网络服务系统都使用了HAProxy。
HAProxy 是什么:
TCP 代理:可从监听 socket 接受 TCP 连接,然后自己连接到 server,HAProxy 将这些 sockets attach 到一起,使通信流量可双向流动。
HTTP 反向代理(在 HTTP 专用术语中,称为 gateway):HAProxy 自身表现得就像一个 server,通过监听 socket 接受 HTTP 请求,然后与后端服务器建立连接,通过连接将请求转发给后端服务器。
…
官方介绍,主要从三个方面说明:
运行 HAProxy 只需要一个 haproxy 可执行程序和一份配置文件即可运行。
HAProxy 一旦启动,会做三件事情:
处理客户端接入的连接
周期性检查 server 的状态(健康检查)
与其他 haproxy 交换信息
处理客户端接入的连接,是目前为止最为复杂的工作,因为配置有太多的可能性,但总的说来有 9 个步骤:
frontend 和 backend 有时被认为是 half-proxy,因为他们对一个 end-to-end(端对端)的连接只关心一半:frontend 只关心 client,backend 只关心 server。
HAProxy 也支持 full proxy,通过对 frontend 和 backend 的准确联合来工作。
HAProxy 工作于 HTTP 模式时,配置被分裂为 frontend 和 backend 两个部分,因为任何 frontend 可能转发连接给 任何 backend。
HAProxy 工作于 TCP 模式时,实际上就是 full proxy 模式,配置中使用 frontend 和 backend 不能提供更多的好处,在 full proxy 模式,配置文件更有可读性。
代理服务器哪家强:HAProxy、Varnish与Nginx横向比较
参考URL: https://www.sohu.com/a/129980458_505802
从软件角度,单一职责会让工作更清晰。当我们不需要一个完整的Web服务器功能时,可以选用HAProxy做为代理服务器职责,它的资源占用率是非常低的,速度也更快。
三大主流软件负载均衡器对比(LVS VS Nginx VS Haproxy)
参考URL: https://www.cnblogs.com/ahang/p/5799065.html
HAProxy相比LVS的使用要简单很多,功能方面也很丰富。当前,HAProxy支持两种主要的代理模式:”tcp”也即4层(大多用于邮件服务器、内部协议通信服务器等),和7层(HTTP)。在4层模式 下,HAProxy仅在客户端和服务器之间转发双向流量。7层模式下,HAProxy会分析协议,并且能通过允许、拒绝、交换、增加、修改或者删除请求 (request)或者回应(response)里指定内容来控制协议,这种操作要基于特定规则。
现在常用的三大开源软件负载均衡器分别是Nginx、LVS、Haproxy。
一、免费开源,稳定性也是非常好,这个可通过我做的一些小项目可以看出来,单Haproxy也跑得不错,稳定性可以与LVS相媲美;
二、根据官方文档,HAProxy可以跑满10Gbps-New benchmark of HAProxy at 10 Gbps using Myricom’s 10GbE NICs (Myri-10G PCI-Express),这个作为软件级负载均衡,也是比较惊人的;
三、HAProxy可以作为MySQL、邮件或其它的非web的负载均衡,我们常用于它作为MySQL(读)负载均衡;
四、自带强大的监控服务器状态的页面,实际环境中我们结合Nagios进行邮件或短信报警,这个也是我非常喜欢它的原因之一;
五、HAProxy支持虚拟主机。
1.支持原声SSL,同时支持客户端和服务器的SSL.
2.支持IPv6和UNIX套字节(sockets)
3.支持HTTP Keep-Alive
4.支持HTTP/1.1压缩,节省宽带
5.支持优化健康检测机制(SSL、scripted TCP、check agent…)
6.支持7层负载均衡。
7.可靠性和稳定性非常好。
8.并发连接40000-50000个,单位时间处理最大请求20000个,最大数据处理10Gbps.
9.支持8种负载均衡算法,同时支持session保持。
10.支持虚拟主机。
11.支持连接拒绝、全透明代理。
12.拥有服务器状态监控页面。
13.支持ACL
(1)免费开源,稳定性也是非常好。单haproxy也跑得不错,稳定性可以与硬件级的F5相媲美。
(2)根据官方文档,haproxy可以跑满10Gbps,这个数值作为软件级负载均衡器是相当惊人的。
(3)haproxy支持连接拒绝:因为维护一个连接的打开的开销是很低的,有时我们很需要限制攻击蠕虫(attack bots),也就是说限制它们的连接打开从而限制它们的危害。这个已经为一个陷于小型DDoS攻击的网站开发了而且已经拯救了很多站点,这个优点也是其它负载均衡器没有的。
(4)haproxy支持全透明代理(已具备硬件防火墙的典型特点):可以用客户端IP地址或者任何其他地址来连接后端服务器。这个特性仅在Linux 2.4/2.6内核打了tcp proxy补丁后才可以使用。这个特性也使得为某特殊服务器处理部分流量同时又不修改服务器的地址成为可能。
(5)haproxy现多于线上的Mysql集群环境,我们常用于它作为MySQL(读)负载均衡。
(6)自带强大的监控服务器状态的页面,实际环境中我们结合Nagios进行邮件或短信报警。
(7)HAProxy支持虚拟主机,许多朋友说它不支持虚拟主机是错误的,通过测试我们知道,HAProxy是支持虚拟主机的。
翻译自官网
Haproxy使用操作系统体系结构中常见的几种技术,以实现绝对最大的性能:
单个进程、事件驱动的模型大大降低了上下文切换和内存使用的成本。
a single-process, event-driven model considerably reduces the cost of context switch and the memory usage. Processing several hundreds of tasks in a millisecond is possible, and the memory usage is in the order of a few kilobytes per session while memory consumed in preforked or threaded servers is more in the order of megabytes per process.
单个进程、事件驱动的模型大大降低了上下文切换和内存使用的成本。可以在一毫秒内处理几百个任务,并且内存使用量是以每会话几千字节的顺序排列的,而在预处理或线程服务器中消耗的内存更多是以每进程兆字节的顺序排列的。
o(1)复杂度的事件监听
O(1) event checker on systems that allow it (Linux and FreeBSD) allowing instantaneous detection of any event on any connection among tens of thousands.
o(1)系统上的事件检查程序,允许它(Linux和FreeBSD)在成千上万的连接上即时检测任何事件。
总结:说白了就是事件回调机制
Delayed update 延迟更新事件
Delayed updates to the event checker using a lazy event cache ensures that we never update an event unless absolutely required. This saves a lot of system calls.
使用延迟事件缓存延迟对事件检查器的更新可确保除非绝对需要,否则永远不会更新事件。这样可以节省大量系统调用。
总结: 就是事件缓存延迟,再需要的时候,我们再更新事件。
Single-buffering 单缓存
Single-buffering without any data copy between reads and writes whenever possible. This saves a lot of CPU cycles and useful memory bandwidth. Often, the bottleneck will be the I/O busses between the CPU and the network interfaces. At 10-100 Gbps, the memory bandwidth can become a bottleneck too.
尽可能在读写之间不复制任何数据。这节省了大量的CPU周期和有用的内存带宽。通常,瓶颈是CPU和网络接口之间的I/O总线。在10-100 Gbps时,内存带宽也可能成为瓶颈。
Zero-copy forwarding 零拷贝转发
Zero-copy forwarding is possible using the splice() system call under Linux, and results in real zero-copy starting with Linux 3.5. This allows a small sub-3 Watt device such as a Seagate Dockstar to forward HTTP traffic at one gigabit/s.
使用linux下的splice()系统调用可以进行零拷贝转发,并从linux 3.5开始产生真正的零拷贝。这允许一个小的低于3瓦的设备(如希捷Dockstar)以1千兆/秒的速度转发HTTP流量。
MRU内存分配
MRU memory allocator using fixed size memory pools for immediate memory allocation favoring hot cache regions over cold cache ones. This dramatically reduces the time needed to create a new session.
使用固定大小内存池进行即时内存分配的MRU内存分配器,支持热缓存区域而不是冷缓存区域。这大大减少了创建新会话所需的时间。
Work factoring 工作分解
Work factoring, such as multiple accept() at once, and the ability to limit the number of accept() per iteration when running in multi-process mode, so that the load is evenly distributed among processes.
工作分解,例如一次多个accept(),以及在多进程模式下运行时限制每次迭代的accept()数量的能力,以便在进程之间均匀分布负载。
CPU关联性
CPU-affinity is supported when running in multi-process mode, or simply to adapt to the hardware and be the closest possible to the CPU core managing the NICs while not conflicting with it.
在多进程模式下运行时,或者只是为了适应硬件,并且在不与之冲突的情况下尽可能接近管理NIC的CPU核心时,支持CPU关联性。
Tree-based storage 基于树存储
Tree-based storage, making heavy use of the Elastic Binary tree I have been developping for several years. This is used to keep timers ordered, to keep the runqueue ordered, to manage round-robin and least-conn queues, to look up ACLs or keys in tables, with only an O(log(N)) cost.
基于树的存储,充分利用了弹性二叉树我已经开发了几年。它用于保持计时器的有序性,保持runqueue的有序性,管理循环和最少的conn队列,在表中查找acl或键,只需要O(log(n))成本。
Optimized timer queue 优化的计时器队列
Optimized timer queue : timers are not moved in the tree if they are postponed, because the likeliness that they are met is close to zero since they’re mostly used for timeout handling. This further optimizes the ebtree usage.
优化的计时器队列:如果计时器被延迟,则不会在树中移动它们,因为它们被满足的可能性接近于零,因为它们主要用于超时处理。这进一步优化了ebtree的使用。
optimized HTTP header analysis
optimized HTTP header analysis : headers are parsed an interpreted on the fly, and the parsing is optimized to avoid an re-reading of any previously read memory area. Checkpointing is used when an end of buffer is reached with an incomplete header, so that the parsing does not start again from the beginning when more data is read. Parsing an average HTTP request typically takes half a microsecond on a fast Xeon E5.
优化的HTTP头分析:对头进行动态分析和解释,并对分析进行优化,以避免重新读取任何以前读取的内存区域。当到达缓冲区末尾时,报头不完整,将使用检查点,这样在读取更多数据时,解析就不会从头开始。解析一个平均的HTTP请求在一个快速的XeonE5上通常需要半微秒的时间。
careful reduction of the number of expensive system calls 小心减少昂贵的系统调用次数
小心减少昂贵的系统调用次数。默认情况下,大多数工作是在用户空间中完成的,例如时间读取、缓冲区聚合、启用/禁用文件描述符。
内容分析优化
Content analysis is optimized to carry only pointers to original data and never copy unless the data needs to be transformed. This ensures that very small structures are carried over and that contents are never replicated when not absolutely necessary.
内容分析被优化为只携带指向原始数据的指针,除非需要转换数据,否则永远不会复制。这确保了非常小的结构被转移,并且在不完全必要的情况下,内容永远不会被复制。
There are 3 important factors used to measure a load balancer’s performance :
衡量负载均衡器性能有三个重要因素:
监控页面中的session rate就是指的每秒请求数。其中curr session rate是指当前的每秒请求数。
具体看上面URL文档。
文档中使用的命令:
查看多少个TCP/UDP等连接,共占多少内存
ss -s && free -g
当服务器的socket连接数量变得非常大时,无论是使用netstat命令还是直接cat /proc/net/tcp,执行速度都会很慢。
ss快的秘诀在于,它利用到了TCP协议栈中tcp_diag。tcp_diag是一个用于分析统计的模块,可以获得Linux 内核中第一手的信息,这就确保了ss的快捷高效。
ss -t -a 【显示TCP连接】
-t: tcp
-a: all
-l: listening 【ss -l列出所有打开的网络连接端口】
-s: summary 【显示 Sockets 摘要】
-p: progress
-n: numeric 【不解析服务名称】
-r: resolve 【解析服务名称】
-m: memory 【显示内存情况】
查看进程使用的socket
ss –pl
不带选项运行会显示一个以KB为单位的默认输出。
free 同样提供给我们 b (B), -k (KB), -m (MB), -g (GB) and –tera (TB)这些单位。要显示我们想要的单位,只要选择一个并在 free 后面跟上。
Haproxy基础知识 -运维小结
参考URalgs.com/kevingrags.com/kevingrace/p/6138150.html
[推荐]Haproxy原理(1)
参考URL: https://www.cnblogs.com/skyflask/p/6970151.html
一、四层和七层负载均衡的区别
二、HAProxy与LVS的异同
三、快速安装HAProxy集群软件
四、HAProxy基础配置文件详解
五、启动与测试Haproxy的负责均衡功能
六、HAProxy负载均衡器算法与使用技巧
七、通过HAProxy的ACL规则实现智能负载均衡
八、使用HAProxy的Web监控平台
官网https://www.haproxy.org/ 提供源码下载,有相关项目介绍,推荐
https://github.com/haproxy/haproxy/releases/ 在github 可以下载
这是haproxy的docker“官方镜像” https://github.com/docker-library/haproxy
源文档是txt格式,将haproxy文档转换为更通用的格式 https://cbonte.github.io/haproxy-dconv/
wiki: https://en.wikipedia.org/wiki/HAProxy