编译安装Haproxy

一、三种软负载均衡器的区别

1、关于三种负载均衡器的性能对比:

LVS是基于内核实现的,他的性能最好;

其次是haproxy,最后是nginx

关于三种负载均衡器的代理类型对比:
LVS只支持基于ip的四层代理转发,也不支持正则匹配;

haproxy和nginx都可以作为四层代理和七层代理,同时都支持正则匹配。

2、关于三种负载均衡器的健康检查对比:

对于lvs,本身是没有对节点服务器做健康检查的机制,是通过keepalived软件实现的,有三种方式:

发送心跳消息(ping);
tcp端口检查(给节点服务器的ip:端口发送tcp连接请求,三次握手成功表明检测健康);
http url检测,通过给节点服务器发送http get请求,查看相应的响应状态码,如果是2和3开头,表示健康,如果是4和5开头,表示不健康;
对于nginx,对节点服务器分为被动健康检查和主动健康检查;

被动检查:需要在upstream配置的时候,添加max_fails 允许失败的最大次数和fail_timeout达到失败以后,暂停服务到恢复服务的时间
主动检查:需要借助第三方upstream_check模块,可以动态的去对节点服务器进行健康检查;
对于haproxy来说,它本身支持tcp端口检查,以及http url检查,以及脚本检测

二、Haproxy调度算法原理

Haproxy 支持多种调度算法,最常用的有三种

1、RR(Round Robin)

RR算法是最简单最常用的一种算法,即轮询调度

例如:
• 有三个节点A、B、C

• 第一个用户访问会被指派到节点A

• 第二个用户访问会被指派到节点B

• 第三个用户访问会被指派到节点C

• 第四个用户访问会被指派到节点A,轮询分配访问请求实现负载均衡效果

2、LC(Least Connections)

最小连接数算法,根据后端的节点连接数大小动态分配前端请求

例如:

• 有三个节点A、B、C,各节点的连接数分别为A:4、B:5、 C:6

• 第一个用户连接请求,会被指派到A上,连接数变为A:5、B:5、 C:6

• 第二个用户请求会继续分配到A上,连接数变为A:6、B:5、 C:6; 再有新的请求会分配给B,每次将新的请求指派给连接数最小的客户端

• 由于实际情况下A、B、C的连接数会动态释放,很难会出现一样连接数的情况

• 此算法相比较rr算法有很大改进,是目前用到比较多的一种算法

3、SH(Source Hashing)

基于来源访问调度算法,用于一些有Session会记录在服务器端的场景,可以基于来源的IP、Cookie等做集群调度

例如:

• 有三个节点A、B、C,第一个用户第一次访问被指派到了A,第二个用户第一次访问被指派到了B

• 当第一个用户第二次访问时会被继续指派到A,第二个用户第二次访问时依旧会被指派到B,只要负载均衡调度器不重启,第一个用户访问都会被指派到A,第二个用户访问都会被指派到B,实现集群的调度

• 此调度算法好处是实现会话保持,但某些IP访问量非常大时会引|起负载不均衡,部分节点访问量超大,影响业务使用

三、编译安装Haproxy

image-20240621140442988

image-20240621141225934

image-20240621143320990

image-20240621143419915

make ARCH=x86_64 TARGET=linux-glibc USE_PCRE=1 USE_OPENSSL=1 USE_ZLIB=1 USE_SYSTEMD=1 USE_LUA=1 LUA_INC=/data/lua/src/  LUA_LIB=/data/lua/src/

image-20240621143549498

image-20240621143829295

tee /usr/lib/systemd/system/haproxy.service  <<eof

[Unit]
Description=HAProxy Load Balancer
After=syslog.target network.target

[Service]
ExecStartPre=/usr/sbin/haproxy -f /etc/haproxy/haproxy.cfg  -c -q
ExecStart=/usr/sbin/haproxy -Ws -f /etc/haproxy/haproxy.cfg -p /var/lib/haproxy/haproxy.pid
ExecReload=/bin/kill -USR2 $MAINPID
LimitNOFILE=100000

[Install]
WantedBy=multi-user.target


eof

image-20240621144101149

global
maxconn 100000
chroot /apps/haproxy
stats socket /var/lib/haproxy/haproxy.sock mode 600 level admin
uid 99
gid 99
daemon
#nbproc 4
#cpu-map 1 0
#cpu-map 2 1
#cpu-map 3 2
#cpu-map 4 3
pidfile /var/lib/haproxy/haproxy.pid
log 127.0.0.1 local3 info

defaults
option http-keep-alive
option  forwardfor
maxconn 100000
mode http
timeout connect 300000ms
timeout client  300000ms
timeout server  300000ms

listen stats
 mode http
 bind 0.0.0.0:9999
 stats enable
 log global
 stats uri     /haproxy-status
 stats auth    haadmin:123456

listen  web_port
 bind 0.0.0.0:8899
 mode http
 log global
 server web1  127.0.0.1:8080  check inter 3000 fall 2 rise 5

image-20240621145241705

posted @ 2024-07-01 00:04  傲世九天  阅读(127)  评论(0)    收藏  举报