墨少离 - 个人小站，分享一些资源以及心得~ - haproxy
type: channel
link: https://www.msl.la/tag/haproxy/
items: Haproxy基础知识 -运维小结
items: Haproxy配置支持https获取用户IP地址
items: 使用haproxy实现负载均衡集群

Haproxy基础知识 -运维小结
type: item
date: 2021-06-15T19:01:00+08:00
description: 开源软件负载均衡器现在常用的三大开源软件负载均衡器分别是Nginx、LVS、Haproxy。 在之前的文章中已经对比了这三个负载均衡软件, 下面根据自己的理解和使用经验, 再简单说下这三个负载均衡软件各自特点：LVS负载均衡的特点1) 抗负载能力强。抗负载能力强、性能高，能达到F5硬件的60%；对内存和cpu资源消耗比较低2) 工作在网络4层，通过vrrp协议转发（仅作分发之用），具体的流量由linux内核处理，因此没有流量的产生。3) 稳定性、可靠性好，自身有完美的热备方案；（如:LVS+Keepalived）4) 应用范围比较广，可以对所有应用做负载均衡；5) 不支持正则处理，不能做动静分离。6) 支持负载均衡算法:rr（轮循）、wrr（带权轮循）、lc（最小连接）、wlc（权重最小连接）7) 配置 复杂，对网络依赖比较大，稳定性很高。Ngnix负载均衡的特点 1) 工作在网络的7层之上，可以针对http应用做一些分流的策略，比如针对域名、目录结构；2) Nginx对网络的依赖比较小，理论上能ping通就就能进行负载功能；3) Nginx安装和配置比较简单，测试起来比较方便；4) 也可以承担高的负载压力且稳定，一般能支撑超过1万次的并发；5) 对后端服务器的健康检查，只支持通过端口来检测，不支持通过url来检测。6) Nginx对请求的异步处理可以帮助节点服务器减轻负载；7) Nginx仅能支持http、https和Email协议，这样就在适用范围较小。8) 不支持Session的直接保持，但能通过ip_hash来解决。、对Big request header的支持不是很好，9) 支持负载均衡算法:Round-robin（轮循）、Weight-round-robin（带权轮循）、Ip-hash（Ip哈希）10) Nginx还能做Web服务器即Cache功能。HAProxy负载均衡的特点1) 支持两种代理模式:TCP（四层）和HTTP（七层），支持虚拟主机；2) 能够补充Nginx的一些缺点比如Session的保持，Cookie的引导等工作3) 支持url检测后端的服务器出问题的检测会有很好的帮助。4) 更多负载均衡策略比如:动态加权轮循(Dynamic Round Robin)，加权源地址哈希(Weighted Source Hash)，加权URL哈希和加权参数哈希(Weighted Parameter Hash)已经实现5) 单纯从效率上来讲HAProxy更会比Nginx有更出色的负载均衡速度。6) HAProxy可以对Mysql进行负载均衡，对后端的DB节点进行检测和负载均衡。9) 支持负载均衡算法:Round-robin（轮循）、Weight-round-robin（带权轮循）、source（原地址保持）、RI（请求URL）、rdp-cookie（根据cookie）10) 不能做Web服务器即Cache。这三大主流软件负载均衡器适用业务场景1) 网站建设初期，可以选用Nigix/HAproxy作为反向代理负载均衡（或者流量不大都可以不选用负载均衡），因为其配置简单，性能也能满足一般的业务场景。如果考虑到负载均衡器是有单点问题，可以采用Nginx+Keepalived/HAproxy+Keepalived避免负载均衡器自身的单点问题。2) 网站并发达到一定程度之后，为了提高稳定性和转发效率，可以使用LVS、毕竟LVS比Nginx/HAproxy要更稳定，转发效率也更高。不过维护LVS对维护人员的要求也会更高，投入成本也更大。需要注意的是Niginx与Haproxy比较: Niginx支持七层、用户量最大，稳定性比较可靠。Haproxy支持四层和七层，支持更多的负载均衡算法，支持session保存等。具体选型看使用场景，目前来说Haproxy由于弥补了一些Niginx的缺点致使其用户量也不断在提升。衡量负载均衡器好坏的几个重要因素1) 会话率 :单位时间内的处理的请求数2) 会话并发能力:并发处理能力3) 数据率:处理数据能力经过官方测试统计，haproxy 单位时间处理的最大请求数为20000个，可以同时维护40000-50000个并发连接，最大数据处理能力为10Gbps。综合上述，haproxy是性能优越的负载均衡、反向代理服务器。Haproxy简介HAProxy是法国人Willy Tarreau开发的一款可应对客户端10000以上的同时连接的高性能的TCP和HTTP负载均衡器。由于其丰富强大的功能在国内备受推崇，是目前主流的负载均衡器。Haproxy是一个开源的高性能的反向代理或者说是负载均衡服务软件之一，它支持双机热备、虚拟主机、基于TCP和HTTP应用代理等功能。其配置简单，而且拥有很好的对服务器节点的健康检查…

Haproxy配置支持https获取用户IP地址
type: item
date: 2021-06-14T15:18:21+08:00
description: global log 127.0.0.1 local0 chroot /var/lib/haproxy #chroot运行路径 pidfile /var/run/haproxy.pid #haproxy 进程PID文件 maxconn 65535 #默认最大连接数,需考虑ulimit-n限制 user haproxy group haproxy daemon #以后台形式运行harpoxy ssl-default-bind-ciphers TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384:TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA:TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256:TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH ssl-default-bind-options no-sslv3 no-tls-tickets tune.ssl.default-dh-param 2048 ssl-server-verify none stats socket /var/lib/haproxy/stats defaults option forwardfor option httpclose option dontlognull #不记录健康检查日志信息 option redispatch #当serverId对应的服务器挂掉后，强制定向到其他健康的服务器，以后将不支持 retries 3 #两次连接失败就认为是服务器不可用，也可以通过后面设置 timeout connect 10s #连接超时 timeout client 50s #客户端超时 timeout server 50s #服务器超时 maxconn 65535 #默认最大连接数,需考虑ulimit-n限制 ########统计页面配置######## listen admin_stats bind 0.0.0.0:5000 #设置Frontend和Backend的组合体，监控组的名称，按需要自定义名称 mode http #http的7层模式 stats refresh 30s #统计页面自动刷新时间 stats uri /haproxy #统计页面url stats realm Cloud\Haproxy #统计页面密码框上提示文本 stats auth admin:admin #设置监控页面的用户和密码:admin,可以设置多个用户名 stats hide-version #隐藏统计页面上HAProxy的版本信息 stats admin if TRUE #设置手工启动/禁用，后端服务器(haproxy-1.4.9以后版本) ########frontend前端配置############## ########backend后端配置############## listen http_80 bind 0.0.0.0:80 mode http balance leastconn log global log-format "%Tl",%{+Q}ci,"%fi:%fp",%{+Q}bi,%{+Q}r,%ST,%B,%{+Q}hr,%Tt option httpclose option forwardfor option http-server-close capture request header Host len 255 capture request header User-Agent len 255 capture request header Referer len 255 capture request header Cookie len 255 timeout http-request 50s timeout http-keep-alive 55s server http_80_web1_80 192.168.6.15:80 cookie web1_80 weight 10 check inter 3000 rise 3 fall 5 server http_80_web2_80 192.168.6.16:80 cookie web2_80 weight 10 check inter 3000 rise 3 fall 5 acl ericdress_com hdr(host) -m str er…

使用haproxy实现负载均衡集群
type: item
date: 2021-06-14T11:57:37+08:00
description: 一、HAProxy概述： HAProxy提供高可用性、负载均衡以及基于TCP和HTTP应用的代理，支持虚拟主机，它是免费、快速并且可靠的一种解决方案。根据官方数据，其最高极限支持10G的并发。 HAProxy特别适用于那些负载特大的web站点， 这些站点通常又需要会话保持或七层处理。HAProxy运行在当前的硬件上，完全可以支持数以万计的并发连接。并且它的运行模式使得它可以很简单安全的整合进您当前的架构中， 同时可以保护你的web服务器不被暴露到网络上。其支持从4层至7层的网络交换，即覆盖所有的TCP协议。就是说，Haproxy 甚至还支持 Mysql的均衡负载。 相同点：在功能上，proxy通过反向代理方式实现 WEB均衡负载。和 Nginx，Apac++heProxy，lighttpd，Cheroke 等一样。 不同点：Haproxy 并不是 web 服务器。以上提到所有带反向代理均衡负载的产品，都清一色是 WEB 服务器。简单说，就是他们能处理解析页面的。而Haproxy 仅仅是一款的用于均衡负载的应用代理。其自身并不能提供web服务。但其配置简单，拥有非常不错的服务器健康检查功能还有专门的系统状态监控页面，当其代理的后端服务器出现故障, HAProxy会自动将该服务器摘除，故障恢复后再自动将该服务器加入。 www.haproxy.org #打不开 http://haproxy.com/ #收费 http://haproxy.1wt.eu/ #社区版地址， 打不开 https://github.com/haproxy/haproxy/releases/ 在github 可以下载实验拓扑图：二、实战1. 安装依赖[root@xuegod63 ~]# yum -y install make gcc gcc-c++ openssl-devel2.安装haproxy [root@xuegod63 ~]# tar -zxvf haproxy-1.7.9.tar.gz [root@xuegod63 haproxy-1.7.9]# cd /root/haproxy-1.7.9 [root@xuegod63 haproxy-1.7.9]# uname -r #查看内核版本 3.10.0-693.el7.x86_64 [root@xuegod63 haproxy-1.7.9]# make TARGET=linux2628 PREFIX=/usr/local/haproxy #指定操作系统内核类型和安装的路径。也可以直接修改Makefile配置文件中这两个变量的值。如下： [root@xuegod63 haproxy-1.7.9]# vim Makefile 94 PREFIX = /usr/local/haproxy 104 TARGET =linux26 [root@xuegod63 haproxy-1.7.9]# make install PREFIX=/usr/local/haproxy #如果没有修改Makefile配置文件中PREFIX变量的值，就必须在此重新对，PREFIX=/usr/local/haproxy赋值，否则直接执行 make install 时，make install会直接读取Makefile文件中PREFIX的变量值。 [root@xuegod63 haproxy-1.7.9]# ls /usr/local/haproxy/ doc sbin share3. 没有生成配置文件，自己手动写一个HAproxy配置文件[root@xuegod63 ~]# mkdir /usr/local/haproxy/etc [root@xuegod63 ~]# vim /usr/local/haproxy/etc/haproxy.cfg #手动创建配置文件 global log 127.0.0.1 local0 #log 127.0.0.1 local1 notice #log loghost local0 info maxconn 4096 chroot /usr/local/haproxy uid 99 #所属运行的用户uid gid 99 #所属运行的用户组 daemon #以后台形式运行haproxy nbproc 1 #启动1个haproxy实例。# #工作进程数量(CPU数量) ，实际工作中，应该设置成和CPU核心数一样。 这样可以发挥出最大的性能。 pidfile /usr/local/haproxy/run/haproxy.pid #将所有进程写入pid文件 #debug #调试错误时用 #quiet #安静 defaults log global log 127.0.0.1 local3 #日志文件的输出定向…