HAProxy安装

安装lua环境

HAProxy要求的lua最低版本(5.3)

yum install gcc readline-devel
wget http://www.lua.org/ftp/lua-5.4.4.tar.gz
tar zxf lua-5.4.4.tar.gz && cd lua-5.4.4 && make all test
mkdir -pv /apps/lua
cp  -a  src/* /apps/lua/

安装依赖包

#yum -y install gcc openssl-devel pcre-devel systemd-devel \
#iproute2 ntpdate tcpdump telnet traceroute nfs-kernel-server nfs-common \
#lrzsz tree openssl libssl-dev libpcre3 libpcre3-dev zlib1g-dev openssh-server libreadline-dev libsystemd-devstall 

下载并解压缩

wget http://www.haproxy.org/download/2.5/src/haproxy-2.5.1.tar.gz
#wget 10.0.0.88/src/haproxy-2.5.1.tar.gz
tar -zxvf haproxy-2.5.1.tar.gz -C /usr/local/src/

编译

需要制定lua安装路径。

cd /usr/local/src/haproxy-2.5.1/ 

make ARCH=x86_64 TARGET=linux-glibc USE_PCRE=1 USE_OPENSSL=1 USE_ZLIB=1 \
USE_SYSTEMD=1 USE_CPU_AFFINITY=1 USE_LUA=1 LUA_INC=/apps/lua/ \
LUA_LIB=/apps/lua/ PREFIX=/usr/local/haproxy

make install PREFIX=/usr/local/haproxy
cp haproxy /usr/sbin/
echo 'export PATH=/usr/local/haproxy/sbin:$PATH' > /etc/profile.d/haproxy.sh
source /etc/profile

HAProxy 1.8及1.9版本编译参数:

make ARCH=x86_64 TARGET=linux2628 USE_PCRE=1 USE_OPENSSL=1 USE_ZLIB=1 \
USE_SYSTEMD=1 USE_CPU_AFFINITY=1 PREFIX=/usr/local/haproxy

HAProxy 2.0以上版本编译参数:需要指定lua的安装路径

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.3.5/src/ LUA_LIB=/usr/local/src/lua-5.3.5/src/
查看haproxy安装版本
haproxy -v

创建haproxy的启动用户及配置文件

#启动用户
useradd -M -s /sbin/nologin haproxy
[root@node4 ~]# id haproxy
uid=1000(haproxy) gid=1000(haproxy) groups=1000(haproxy)
#配置文件
mkdir /etc/haproxy
cd /etc/haproxy
完整配置文件

vim /etc/haproxy/haproxy.cfg

 global
    maxconn 100000
    chroot /usr/local/haproxy
    stats socket /var/lib/haproxy/haproxy.sock mode 600 level admin
    #uid 1000
    #gid 1000
    user haproxy
    group haproxy
    daemon
   #nbproc 1   #2.5 版本之后不在支持
    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:ha123456

listen web_port
   bind  0.0.0.0:9002
   mode http
   log global
   balance roundrobin
   server web01 youduk1:9001 check inter 3000 fall 2 rise 5
   server web02 youduk2:9001 check inter 3000 fall 2 rise 5
   server web03 youduk3:9001 check inter 3000 fall 2 rise 5
   server web04 youduk4:9001 check inter 3000 fall 2 rise 5
   
   #web01节点名称  

listen tcp_port
   bind  0.0.0.0:9030 
   mode http
   log global
   balance roundrobin
   server tcp01 youduk1:9029 check inter 3000 fall 2 rise 5
   server tcp02 youduk2:9029 check inter 3000 fall 2 rise 5
   server tcp03 youduk3:9029 check inter 3000 fall 2 rise 5
   server tcp04 youduk4:9029 check inter 3000 fall 2 rise 5 

HAproxy的启动脚本

vim /usr/lib/systemd/system/haproxy.service
[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
[Install]
WantedBy=multi-user.target
#退出保存

#重新启动
systemctl daemon-reload

启动haproxy

mkdir /var/lib/haproxy
chown haproxy:haproxy /var/lib/haproxy/ -R
systemctl start haproxy   
systemctl enable haproxy  //设置开启可用
systemctl status haproxy

linux开放端口 9999 9030

配置日志

cat /etc/rsyslog.conf
 默认有下面的设置,会读取 /etc/rsyslog.d/*.conf目录下的配置文件
 $IncludeConfig /etc/rsyslog.d/*.conf

为haproxy创建一个独立的配置文件

# vim  /etc/rsyslog.d/haproxy.conf
$ModLoad imudp
$UDPServerRun 514
$UDPServerAddress 0.0.0.0
local3.*     /var/log/haproxy.log
#如果不加下面的的配置则除了在/var/log/haproxy.log中写入日志外,也会写入message文件

配置rsyslog的主配置文件,开启远程日志

vim /etc/sysconfig/rsyslog

 SYSLOGD_OPTIONS=”-c 2 -r -m 0″
 #-c 2 使用兼容模式,默认是 -c 5
 #-r   开启远程日志
 #-m 0 标记时间戳。单位是分钟,为0时,表示禁用该功能

重启haproxy和rsyslog服务。

重启日志
systemctl restart rsyslog 
重启haproxy
systemctl restart haproxy 

cat /var/log/haproxy.log

2022-02-10T17:23:07+08:00 localhost haproxy[18411]: Connect from 172.30.156.87:26181 to 172.30.156.226:9999 (stats/HTTP)
2022-02-10T17:23:18+08:00 localhost haproxy[18411]: Connect from 172.30.156.87:26193 to 172.30.156.226:9002 (web_port/HTTP)
2022-02-10T17:23:18+08:00 localhost haproxy[18411]: Connect from 172.30.156.87:26207 to 172.30.156.226:9002 (web_port/HTTP)
2022-02-10T17:23:18+08:00 localhost haproxy[18411]: Connect from 172.30.156.87:26208 to 172.30.156.226:9002 (web_port/HTTP)

验证

  • 管理页面
    • 浏览器浏览 http://172.30.156.226:9999/haproxy-status
    • 数据用户 haadmin 密码 ha123456
  • 登录正常
    • http://172.30.156.226:9002/haproxy-status 正常访问

Haproxy 配置文件

HAProxy的配置文件是/etc/haproxy/haproxy.cfg,该文件是 HAProxy功能配置的集中文件,其代理和负载均衡功能的配置均位于该配置文件中。HAProxy的配置文件主要分为四个部分,即全局功能配置段、默认属性配置段、前端代理配置段、后端负载均衡配置段,各个配置段常见属性设置和功能描述如下。

全局配置段

全局配置段的参数将被应用到全部运行 HAProxy的节点中,全局配置段并不针对具体的代理和负载均衡进行设置,其需要配置的参数也相对简单,典型的haproxy.cfg全局配置段内容如下:

global
daemon
maxconn   4000
Pidfile  /var/run/HAproxy.pid
user     HAproxy
group    HAproxy
stats    socket /var/lib/HAproxy/stats
log      127.0.0.1  ocal0

上述HAProxy的全局配置段中,用户为HAProxy常用的全局变量配置了参数,这些参数通常是进程级别并与操作系统相关的参数,并在全局限定了HAProxy的工作特性,几个重要的参数解释如下。

daemon  #指定HAProxy以后台进程的形式运行。
group  #运行 HAproxy的用户属组,此处为 HAproxy。
maxconn  #HAProxy代理允许的最大并行连接数,此处为4000,默认为2000。
user  #运行HAProxy的用户,此处为 HAproxy。
pidfile  #HAProxy的进程文件,此处为/var/run/haproxy.pid。
log  #设置HAProxy运行日志的输出设备,通常默认为本机的并默认记录 INFO级别的日志,用户可以将 HAProxy的日志输出到本机或者远程主机的日志设备上,并设置需要记录的日志级别,如 ERROR和 WARN。

全局配置段需要注意 HAPrxoy的日志设备配置,对于大规模集群,负载均衡器可能会由运行 HAProxy的多个节点组成,如果每个 HAProxy节点都将日志存放到本地,则日志监控和查看极为不便,因此通常会借助远程日志记录功能(如 rsyslog)将分散的节点日志集中到某台日志服务器上,这时就需要在每个 HAProxy的全局配置段中指定远程日志服务器的地址和对应的日志记录设备,同时在远程日志记录服务器上进行相应的设置。在云端日志服务器上开启 rsyslog的 HAProxy日志记录功能所需做的设置如下:

#将/etc/rsyslog.onf中的如下两行注释取消
$M0dLoad imudp
$UDPServerRun514

#为HAProxy设置日志设备和输出文件,这里定义的日志设备要与haproxy·cfg全局配置段中log参故设置的匹配,在/etc/rsyslog.conf中添加如下语句:
local0.* /var/log/haproxy/haproxy.log

在/etc/sysconfig/rsyslog中修改SYSLOGD_OPTIONS的值为如下:
SYSLOGD_OPTIONS="-r -m 0 -c 2" 

#分别重启 rsyslog和 haproxy 
systemctl restart rsyslog.server 
systemctl restart haproxy.service 

#跟踪 haproxy的日志
tail -f /var/10g/haproxy/haproxy.log

默认配置段

默认(default)配置段设置的参数会被haproxy.cfg的其他配置段继承,如frontend、backend和 listen配置段都会继承 default配置段参数,同时这些配置段也可以写default配置段的参数值,通常情况下,用户可以将具有共性的参数放到default段进行统一配置,然后再到各个配置段中进行个性修改,常见的 default配置段如下:

defaults
mode    http
log     global
option  httplog
option  dontlognull
retries 3
timeout  http-request 10s
timeout  queue 1m
timeout  connect 10s
timeout  client 1m
maxconn  10000
timeout  client 1m
timeout  server 1m
timeout  check 10s

默认配置段主要配置参数的解释如下:

mode  #指定 HAProxy实例使用的连接协议,即源请求到后端服务器之间的连接协议,可能值为 HTTP和 TCP。对基于HTTP的 web应用服务,通常使用 HTTP模式,对于其他应用服务,通常使用 TCP模式。

log  #指定日志地址和记录日志条目的 syslog/rsyslog日志设备,此处的 global表示使用 global配置段中设定的log值。

option  #日志记录选项, httplog表示记录与 HTTP会话相关的各种属性值,包括 HTTP请求、会话状态、连接数、源地址以及连接时间等。dontlognull表示不记录空会话连接日志,即 HAProxy不会记录没有数据传输的会话连接日志,基于互联网的 web应用中不推荐使用dontlognull因为很多空会话连接可能包含有恶意行为,如恶意的端口漏洞扫描就是一种没有数据传输的空连接。retries:在连接失败后重新尝试请求连接的次数,超过设置的尝试次数将认为连接失败。

timeout  #设置各种请求、连接、响应的 Timeout时间,单位为秒(s)或者毫秒(m)。

HTTP-Request  #等待客户端完整 HTTP请求的时间,此处为等待10s。

queue  #设置删除连接和客户端收到503或服务不可用等提示信息前的等待时间,此处等待时间为10毫秒。

connect  #设置等待服务器连接成功的时间,此处为等待10s。

client  #设置允许客户端处于非活动状态,即既不发送数据也不接收数据的时间,此处为1毫秒。

server  #设置服务器超时时间,即允许服务器处于既不接收也不发送数据的非活动时间,此处为1毫秒。

Frontend配置

前端配置主要完成两个功能:

  • 一是配置监听客户端请求的IP地址和端口,在高可用环境下,此处的监听IP地址通常为虚拟IP;
  • 二是将监听到的客户端请求转发到指定的后端配置中进行负载均衡。典型的HAProxy前端配置如下。
frontend  WEB
bind  192.168.0.10:80
default_backend  app

HAProxy中允许配置多个前端,前端名称可以自定义,此处设置了名为 web的HAProxy前端,通过bind参数指定该前端监听的IP为192.168.0.10,端口为80,而该前端对应的后端名称是app,一旦前端监听到连接,就会将该连接直接转给名为app的后端处理,前端与后端是HAProxy配置中的关键部分,通常前端负责监听请求连接,后端负责负载均衡。在 openstack高可用集群配中,由于要为每个 openstack服务进行高可用配置,因此最佳做法就是将每个服务配置为一个前端和后端的组合,并将前端监听的 VIP通过Pacemaker或者Keeplived进行高可用设计。基于HAProxy的Openstack高可用集群前端配置的例子为:

#数据库服务前端
frontend vip-db
bind 192.168.142.201:3306
timeout client 90m
default—backend db-vms-Galera

#qpid消息服务前端
froatend Vip-qpid
bind192·168、142·215:5672
timeout client120s
default—backend qpid-vms

#dashboard服务前端
frontendvip—horizon
bind192.168、142·211:80
timeout client180s
cookie SERVERID insert indirect nocache
default backend horizon-vms

Backend配置

后端配置主要实现两个主要功能:一是负载均衡调度算法的设置;二是设置最终响应请求的服务器池各个节点的IP地址和端口,并设置每个节点的健康检查方式。一个典型的后端配置如下。

backend app
balance roundrobin
server appl 192.168.1.1:80 check
server app2 192.168.1.2:80 check
server app3 192.168.1.3:80 check inter 2s rise 4 fall 3
server app4 192.168.1.4:80 backup

HAProxy允许配置多个后端,并且每个后端都有一个前端与其对应,后端实例的名称可以用户自定义,但是一定要与对应前端中设置的后端名称一致。上述后端配置中,后端实例的名称是 app,采用 Round-Robin负载均衡算法,server行定义后端的真实服务器,服务器的名称为app1、app2、app3和 app4,这里的服务器名称并非真实的后端服务器主机名,而只是便于识别的自定义服务器名称,服务器的具体地址通过紧随其后的地址和端口号来确定。

此外,在定义后端服务器的同时,通过check参数还可指定HAProxy对服务器的健康检查方式,上述配置中,后端服务器app3中的inter 2s指定了对app3进行健康检查的时间隔是2s,rise 4 表示 HAproxy对app3发起4次健康检查均正常则认为app3正常,3表示连续3次健康检查失败则认为app3己经故障,HAproxy后端配置中指定了负载均衡所采用的算法,HAProxy支持多种负载均衡算法,用户可以根据后端服务器池中各个节点的实际资源配置进行不同的算法选取。

在高可用集群配置中,为了实现服务的高可用,通常每个后端配置中都需要提供两个以上的后端服务器进行负载均衡。更多关于企业集群运维管理系列的学习文章,请参阅:玩转企业集群运维管理专栏,本系列持续更新中。

HAProxy监控页面

HAProxy为每个监听代理提供了实时监控,并可以将监控参数以 GUI页而的形式呈现给用户。要使用HAProxy的GUI页面,需要在/etc/haproxy/haproxy.cfg配置文件中配置相应的监听参数,通常需要配置一个Listen置段(也可以是 Frontend或 Backend配置段),即可通过 HTTP协议访问HAProxy的监控页面,最为常用的HAProxy监控页面配置如下:

listen status      #定义一个listen,也可以放在frontend或backend段中
mode http        #使用协议
bind 192.168.142.110:8080 #监听地址和端口
stats enable       #启用信息统计功能
stats hide-version     #隐藏版本号
stats uri /HAproxy     #访问URL
stats realm HAProxy\Statistics #登录提示信息
stats auth admin:admin         #admin界面,验证成功后允许管理节点
stats refreah 10s              #页面刷新时间 
HAProxy的监控页面

图片HAProxy的监控页面将每项资源的监控参数以表格形式呈现给用户,并将监控参划分为七个类别,即 Queue、Session rate、Sessions、Bytes、Denied、Errors、 Warning、server,每组参数类别下又有多个详细参数,其中各个参数的解释如下。

(1)Queue
cur  #表示当前队列的请求数量。
Max  #表是当前队列最大的请求数量。
Limit  #表示队列的限制数量。

(2) Session rate
Cur  #每秒会话连接数量。
Max  #每秒会话数量最大值。囗 Limit:每秒会话数量的限制值。

(3) Sessions
Total  #总共会话数量。
Cur  #当前的会话数量。
Max  #最大会话数量。
Limit  #会话连接限制。
Lbtot  #选中一台服务器所用的总时间。
Last  #最后一次会话时间。

(4) Bytes
In   #网络会话输人字节数总量。
Out  #网络会话输出字节数总量。

(5) Denied
Req   #被拒绝的会话请求数量。
Resp  #拒绝回应的请求数量。

(6) Errors
Req   #错误的请求数量。
Conn  #错误连接数量。
Resp  #错误响应数量。

(7) Warnings
Retr   #重新尝试连接的请求数量。
Redis  #重新发送的请求数量。

(8) Server
status  #后端服务器状态,可以有 UP和 DOWN两种状状态。
LastChk  #持续检查后端服务器的时间。
Wght  #服务器权重。
Act  #活动后端服务器数量。
Bck  #后端备份服务器的数量。
Down  #状态为 Down的后端服务器数量。
Downtime  #服务器总的 Downtime时间。
Throttle  #状态 Backup变为 Active的服务器数量。

HAProxy配置参考

作为一个专业的负载均衡代理软件, HAProxy具有非常丰富的配置选项, HAProxy还有很多详细功能配置项,为了满足不同应用场景下用户的 HAProxy配置参考,本节将会对 HAProxy配置文件 haproxy.cfg中各个配置段的配置参数,以及这些参数的功能作用进行解释和总结,用户可以根据自己的需求在相应配置段中进行参数取舍,HAProxy各个配置段示例如下。

全局配置段参考

global

maxconn20000        #默认最大连接数
log $host_ip local0    #level为 err/warning/info/debug日志记录设备
chroot /var/haproxy/   #chroot运行的路径
uid 200           #HAProxy进程属组UID
gid 200           #HAproxy进程属组
daemon            #以后台形式运行HAProxy 
nbproc 2          #进程数量,可以设置多个进程提高性能
pidfile /var/run/haproxy.pid   #HAProixy的pid存放路径
ulimit-n 65535            #ulimit让的数量限制

默认配置段参考

defaults

log global          #使用global定义的日志记录设备
mode {tcp|http|health}   #设置实例的运行模式或协议,当实现内容交换时,前端和后端,必须作在同一种模式 
maxconn 20000        #最大连接数
option httplog       #日志类别为http日志格式
option httpclose        #每次请求完毕后主动关闭http通道 
option dontlognull      #不记录健康检查的日志信息
option forwardfor      #允许在发往服务器的请求头部中插入“X-Forwarded-For”头部
option Redispath       #serverid对应的服务器挂掉后,强制定向到其它健康的服务器
option abortonclose     #允许结束掉当前队列中一直pending的连接 
stats refresh 30       #统计页面刷新间隔
retries 3           #认为服务不可用的尝试连接次数
balance roundrobin     #默认的负载均衡的方式,这里为轮询方式,也可以是balance source
contimeout 5000       #连接超时
clitimeout 50000     #客户端超时
srvtimeout 50000      #服务器超时
timeout check 2000     #心跳检测超时

监控页面配置段参考

listen admin_status #对Frontend和Backend进行监控统计,监控组名称可以自定义
mode http        #使用协议
bind 192.168.142.110:8080 #监听地址和端口
stats enable       #启用信息统计功能
stats hide-version     #隐藏版本号
stats uri /HAproxy     #访问URL
stats realm HAProxy\Statistics #登录提示信息
stats auth admin:admin         #admin界面,验证成功后允许管理节点
stats refreah 10s              #页面刷新时间

#下面语句用于捕获并将指定的请求/响应首部记录到HAProxy的日志中,日志中记录的是指定首部的值:
capture request header host len 40
capture request header content-length len 10
capture request header referer len 200
capture request header server len 40
capture response header content-length len 10
capture response header cache-control len 8

FrontEnd配置段参考

FrontEnd配置段主要通过bind配置监听的虚拟IP地址和端口,同时Frontend配置里面可以定义多个acl以进行请求精确匹配,Frontend配置段中还可以定义与全局默认配置段重名的参数以覆盖全局配置段的参数。

frontend web_server   #定义前端名称,可自定义。
bind 0.0.0.0:80   #监听IP地址与端口
mode http  #使用http协议
log global  #应用全局的日志配置
option httplog #启用http的log
option httpclose  #每次请求完主动关闭http通道
option forwardfor 允许发往服务器的请求头部中插入“X-Forwarded For”头部
acl warrior_blog hdr_dom(host) -i blog.warrior.cn #如果请求的域名满足www.warrior.cn,则返回true,-i表示忽略大小写。
acl(缺)

BackEnd配置段参考:

Backend配置段主要配置负载均衡算法,定义后端服务器以及相应的健康检查方式等参数,同时Backend配置段也可以定义与默认全局配置段重名的参数,从而覆盖全局参数值以进行局部后端定义。

backend server_web  #后端名称
mode http    #http七层模式
balance roundrobin     #负载均衡的方式
option ignore-persist {if | unless} <condition>   #在某些条件下拒绝持续连接,适用于静态文件的负载均衡。
option independant-streams    #启用双向超时处理,如socket的read和write
option log-health-checks      #记录健康检查日志
option log—separate—errors    #对非完全成功的连接改变日志记录等级
option logasap     #传输大文件时可以提前记录日志
option mysql-check    #mysql健康检查
option  persist     #强制将http请求发往已经down掉的server 
option redispatch   #是否允许重新分配在session失败后 
option smtpchk    #smtp检查
option httpchk    #通过http协议进行健康检查
option socket-stats  #允许对单个socket进行统计
option  srvtcpka     #是否允许向server发送 keepalive 
option tcpka      #是否允许向 server和 client发送 keepalive 
option tcplog     #允许记录tcp连接的状态和时间 
option transparent     #允许客户端透明代理 
option httpchk GET /1b.html HTTP/1·0    #心跳检测的文件
tick-table type ip size 1024     #为当前后端配置粘性表;表存储条目类型为IP地址,允许存储1k大小的IP地址 
stick on dst        #定义一个请求模式dst,以将一个客户端同某个后端服务器关联起来 
timeout server 90m     #后端服务器最大等待时间,超过此时间则认为服务器不可用。     

如下进行多后端服务器定义, check inter 1500是检测心跳频率, rise 3表示3次检查结果正确则认为服务器可用,fall 3表示检测结果失败3次则认为服务器不可用, weight代表服务器权重。port 9200表示通过端口9200来进行基于 http的健康检查, backup表示该服务器是备份服务器,只有在其他非 backup服务器均不可用的情况下负载均衡器才会使用该后端服务器,默认情况下使用第一个标记为 backup的后端服务器, upon-marked-down shutdown-sessions表示当该服务器被认为是 shutdown的时候,关闭全部与该服务器的请求连接。

server 192.168.51.78 192.168.151.78:80 check inter 1500 rise 3 fall 3 weight 1 port 9200 backup on-marked-down shutdown-sessions

server 192.168.51.79 192.168.151.79:80 check inter 1500 rise 3 fall 3 weight 1 port 9200 backup on-marked-down shutdown-sessions

server  192.168.51.80  192.168.151.80:80  check  inter  1500  rise  3  fall  3  weight  1  port  9200  backup on-marked-down shutdown-sessions
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。