目录

一.快速安装lua和haproxy

二.配置haproxy的配置文件

三.配置haproxy的全局日志

四.测试负载均衡、监控和日志效果

五.server常用可选项

1.check

2.weight

3.backup

4.disabled

5.redirect prefix和redir

6.maxconn

六.调度算法

1.静态

2.动态

 

一.快速安装lua和haproxy

链接:https://pan.baidu.com/s/1JDMP9Wag5WkjCHLVLOh0-w  提取码:4ahw

[root@main haproxy]# yum install -y readline-devel gcc gcc-c++ make openssl-devel pcre-devel systemd-devel

[root@main haproxy]# tar -zvxf lua-5.4.4.tar.gz -C /usr/local/src/

[root@main haproxy]# cd /usr/local/src/lua-5.4.4/

[root@main lua-5.4.4]# make linux test

[root@main lua-5.4.4]# src/lua -v

Lua 5.4.4 Copyright (C) 1994-2022 Lua.org, PUC-Rio

#lua至此安装完成

[root@main haproxy]# tar -zxvf haproxy-2.8.1.tar.gz -C /usr/local/src/

[root@main haproxy-2.8.1]# make ARCH=x86_64 TARGET=linux-glibc USE_PCRE=1 USE_OPENSSL=1 USE_ZLIB=1 USE_SYSTEMD=1 USE_LUA=1 LUA_INC=/usr/local/src/lua-5.4.4/src/ LUA_LIB=/usr/local/src/lua-5.4.4/src/

#这里的lua版本要自己修改为实际版本

[root@main haproxy-2.8.1]# make install PREFIX=/apps/haproxy  

[root@main haproxy-2.8.1]# ln -s /apps/haproxy/sbin/haproxy /usr/sbin/   #创建软链接方便启动

[root@main haproxy-2.8.1]# vim /usr/lib/systemd/system/haproxy.service

[root@main haproxy-2.8.1]# which haproxy

/usr/sbin/haproxy       #这个文件用于卸载service脚本中

[root@main examples]# cat /usr/lib/systemd/system/haproxy.service

[Unit]

Description=HAProxy Load Balancer

After=syslog.target network.target

[Service]

ExecStart=/usr/sbin/haproxy -Ws -f /etc/haproxy/haproxy.cfg -p /var/lib/haproxy/haproxy.pid

ExecReload=/bin/kill -USR2 $MAINPID

[Install]

WantedBy=multi-user.target

[root@main haproxy-2.8.1]# mkdir /etc/haproxy/   #创建用于存放配置文件的目录

[root@main examples]# cp quick-test.cfg /etc/haproxy/haproxy.cfg   #将快去启动脚本复制过来并改名启动

[root@main examples]# vim /etc/haproxy/haproxy.cfg

[root@main examples]# mkdir /var/lib/haproxy   #创建用于存放pid的目录

[root@main examples]# systemctl daemon-reload

[root@main examples]# systemctl start haproxy.service

[root@main examples]# systemctl status haproxy.service

● haproxy.service - HAProxy Load Balancer

  Loaded: loaded (/usr/lib/systemd/system/haproxy.service; enabled; vendor preset: disabled)

  Active: active (running) since Mon 2024-03-25 17:48:01 CST; 1s ago

Main PID: 9209 (haproxy)

  CGroup: /system.slice/haproxy.service

          ├─9209 /usr/sbin/haproxy -Ws -f /etc/haproxy/haproxy.cfg -...

          └─9211 /usr/sbin/haproxy -Ws -f /etc/haproxy/haproxy.cfg -...

Mar 25 17:48:01 main systemd[1]: Started HAProxy Load Balancer.

Mar 25 17:48:01 main haproxy[9209]: [NOTICE]   (9209) : New worker (...d

Mar 25 17:48:01 main haproxy[9209]: [NOTICE]   (9209) : Loading success.

Hint: Some lines were ellipsized, use -l to show in full.

#启动正常,服务还没配置,暂时无法使用

二.配置haproxy的配置文件

基本常用参数如下,其余的可自行查阅。在本份代码中是采用frontend+backend配置使用,是可以将其改为listen模式的,就是将bind等和server等放在listen下一级的同一级缩进上。

[root@main haproxy]# cat haproxy.cfg

global     #全局模块

  strict-limits

  stats socket /var/lib/haproxy/haproxy.sock mode 600 level admin   #指定socket文件

  #user   xxx   #指定用户和组

  #group xxx

  chroot /apps/haproxy  

  #锁定运行目录

  log 127.0.0.1 local3 info  

  #开启log的local3,后面需要去syslog开启该等级的全局配置

  daemon #以守护进程运行(后台)

defaults   #默认配置模块。这个模块的配置会被后文的部分模块继承

  mode http  

  #默认工作模式,目前常用http和tcp,一般情况下认为tcp的性能更好,更利于减少负载

  balance random  

  retries 5 #最大尝试重连数

  timeout client 60s   #与客户端最长非活动连接时间

  timeout server 60s   #客户端请求到server的超时时常,超时后报错502

  timeout connect 1s   #客户端从haproxy请求到后端server的最长连接等待时间

  timeout check 5s   #对后端服务器的默认检测超时时间

  option httplog #日志使用http格式,使用tcp-mode时,又指定tcplog

  option http-server-close  

  #开启后,HAProxy 会在每次请求后关闭与后端服务器的连接。这样可以确保每个请求都使用新的连接,而不会重用现有连接。适用于某些需要短暂连接生命周期的场景

  option forwardfor

  #启用后,HAProxy 会在转发请求时添加一个 "X-Forwarded-For" 头部,其中包含了原始客户端的 IP 地址。记录客户端真实 IP 地址很有用。

  option redispatch

  #启用后,如果连接到后端服务器的尝试失败,HAProxy 将会重试另一个服务器。这个选项可以确保请求被重新分发,即使一些后端服务器出现故障

  option abortonclose

  #服务器负载高时自动结束处理时间很长的连接,择时再开启

  option http-keep-alive

  #与客户端的会话保持

  #option httpclose   每次请求后关闭与客户端的连接,非持久连接

  #option httpchk   http健康检查,定期检查后端服务器健康状态

  #option prefer-last-server   优先将请求发往上次处理过该请求的服务器  

  #option http-use-proxy-header   使用proxy头部信息来识别客户端IP地址

  stats uri /status #开启监控

  stats auth sulibao:317418 #这是监控的用户认证,目的是适当保护监控面板和设备信息的安全,冒号前是名称后面是密码

  stats refresh 3s #监控页面刷新时间,实时获取设备状态

 

 

frontend main   #前端模块

  bind *:80   #监听本机所有ip地址下的80端口,监听443-https协议时还需要执行公私钥文件

  #例如这样,bind :443 ssl crt /etc/haproxy/xxx

  log global   #全局日志开启

  default_backend web   #指定默认后端组

backend web   #后端模块,名称和上文指定一致

  balance roundrobin   #指定负载均衡调度算法为轮询,即rr,这样在后端再写一次就不会继承到defaults模块中刚才配置的random算法,后文会简单介绍几个调度算法

  #option   这里的option和check在后面介绍

  server web1 192.168.2.131:80 check   #后端server,check表示定期检查,此处详细见后面server选项

  server web2 192.168.2.132:80 check

三.配置haproxy的全局日志

[root@main haproxy]# vim /etc/rsyslog.conf

在文件中找到此处按这样修改,也可以将local3写到后面和local7写在一起

[root@main haproxy]# systemctl restart rsyslog.service

四.测试负载均衡、监控和日志效果

按上面的配置文件来配置,并且web1和web2已经配置好index.html内容,效果将是如下

[root@serverc ~]# for ((i=1;i<=10;i++));do curl 192.168.2.130;donefirst

second

first

second

first

second

first

second

first

second

我的haproxy均衡器节点是192.168.2.130,以如下方式去查看监控页面http://192.168.2.130/status,由于设置了用户认证,所以需要先登录才能查看,监控页面的刷新间隔可以自己在配置文件中调整 

五.server常用可选项

格式示例

server web1 192.168.2.131:80 check inter 3000 fall 2 rise 5 weight 2

1.check

参数含义inter健康状态检查间隔时间fall后端服务器从线上转为线下的检查的连续失效次数,默认为3rise后端服务器从下线恢复上线的检查的连续有效次数,默认为2

2.weight

当调度方式设计到权重时,使用此参数设置

3.backup

将服务器标记为备份状态,只在所有非备份主机down机时提供服务

4.disabled

将后端服务器标记为不可用状态,即维护状态,除了持久模式,将不再接受新请求

5.redirect prefix和redir

两者都是将请求临时重定向到指定url,前者新开窗口保持原有页面不动,后者使用现在窗口跳转,这两个参数都只适用于http-mode

6.maxconn

server的最大并发数

六.调度算法

1.静态

(1)static-rr

基于权重的轮询,根据配置的权重值来调度

(2)first

server列表中的书写顺序来调度,从上至下,只有当第一台的负载连接上限了才往下调度,效果不是很理想

(3)source

默认归类为静态算法,但可以通过hash-type修改为动态。

源地址hash,基于用户源地址hash并将请求转发到后端服务器,后续同一个源地址请求将被转发至同一个后端web服务器。此方式当后端服务器数据量发生变化时,会导致非常多的用户的请求转发至新的后端服务器,适用于需要会话保持但不支持cookie和缓存的场景

2.动态

(1)roundrobin

默认的调度算法,基于权重的轮询动态调度算法,支持权重的运行时调整,roundrobin支持慢启动(新加的服务器会逐渐增加转发数),其每个后端backend中最多支持4095个real server,支持对real server权重动态调整。

(2)leastconn

当前后端服务器连接最少的优先调度(新客户端连接),比较适合长连接的场景

(3)random

基于随机数作为一致性hash的key,随机负载平衡对于大型服务器场或经常添加或删除服务器非常有用,支持weight的动态调整,weight较大的主机有更大概率获取新请求。

 

精彩内容

评论可见,请评论后查看内容,谢谢!!!评论后请刷新页面。