HAProxy是法国开发者威利塔罗(Willy Tarreau) 在2000年使用C语言开发的一个开源软件,是一款具备高并发(一万以上)、高性能的TCP和HTTP负载均衡器,支持基于cookie的持久性、自动故障切换、支持正则表达式及web状态统计。

    HAProxy在编译安装时需要用到lua,并且lua的最低版本要求为5.3。目前CentOS8或者Rocky8系列通过yum安装lua是符合版本要求的,而CentOS7及之前版本的Linux系统则无法达到该要求,因此要使用CentOS7或之前版本的Linux系统进行编译安装HAProxy,必须先编译安装较新版本的lua环境,此次试验笔者将通过CentOS7来演示相关操作。

  1. 准备lua环境

1.1 安装依赖包

    lua的编译安装需要用到gcc和readline-devel这两个包,需提前安装好。

HAProxy的编译安装及全局配置段说明_lua

1.2 编译安装lua

    lua的源码包可通过官网获取(官网地址:http://www.lua.org/download.html,目前已更新到5.4.4版本,且时间接近半年,笔者就直接安装最新版。lua的编译安装比较简单,且官网中也有说明如何操作,笔者就直接按官网的操作进行。

HAProxy的编译安装及全局配置段说明_编译安装_02

HAProxy的编译安装及全局配置段说明_配置文件_03

    安装完成后,以笔者的路径为例,新生成的lua是放在/usr/local/src/lua-5.4.4/src目录下的,需要记好这个位置,后面HAProxy在编译安装时需要用到。

HAProxy的编译安装及全局配置段说明_配置文件_04


  1. 编译安装HAProxy

2.1 安装依赖包

    HAProxy的编译安装需要openssl-devel、pcre-devel和systemd-devel这三个包,如果lua是直接通过yum方式安装的,还需额外安装gcc。

HAProxy的编译安装及全局配置段说明_lua_05

2.2 获取源码并解压

    HAProxy开源版源码可通过官网获取(官网:​https://www.haproxy.org/​),目前已更新到2.6主版本,2.7版本尚在开发中,在选择HAProxy版本时要选择偶数版本的,如2.2、2.4、2.6之类的带LTS长期支持版,考虑到2.6版本5月底才更新,笔者下载的为2.4.17版本。

HAProxy的编译安装及全局配置段说明_lua_06

HAProxy的编译安装及全局配置段说明_lua_07

2.3 编译安装

    进入到解压目录后,可以看到HAProxy已经自动生成了Makefile文件,因此可以直接进行编译,编译时需要添加以上编译安装的lua存放路径,编译时要用到的一些选项可以在Makefile中查看,并根据自己企业的实际需求进行增删。

HAProxy的编译安装及全局配置段说明_配置文件_08

    安装环节可指定HAProxy的程序安装路径。

HAProxy的编译安装及全局配置段说明_编译安装_09

2.4 生成软链接

    为了方便使用HAProxy服务,可以通过生成PATH变量或者软链接的形式来实现,因为就一个服务,笔者就直接创建软链接。

HAProxy的编译安装及全局配置段说明_配置文件_10

2.5 创建service文件

    HAProxy的service文件可参考yum安装的内容,根据自己的路径或其他设置进行修改。

HAProxy的编译安装及全局配置段说明_配置文件_11

2.6 创建配置文件

2.6.1 HAProxy配置文件

    根据service文件中的设置,HAProxy配置文件是放在/etc/haproxy/目录下,但该目录尚不存在,因此需创建好。配置文件的内容如下图所示,需要注意的是,HAProxy的配置文件必须是以cfg为后缀的。

HAProxy的编译安装及全局配置段说明_配置文件_12

2.6.2 配置段说明

    在以上的配置文件中,global语句块为全局配置配置段,default语句块为默认配置段。

    ①global全局配置段说明:

    maxconn表示每个HAProxy进程的最大连接数;

    chroot表示将锁定运行目录;

    stats socket设置套接字文件的的权限和对应进程;

    uid、gid或者user、group表示可以运行HAProxy的身份,两对任用一对即可;

    daemon表示HAProxy以守护进程的形式运行在后台;

    nbproc可以设置HAProxy的进程数,默认是一个;

    cpu-map可以将HAProxy的进程绑定到指定的CPU核心上,进程数从1开始计算,CPU核心数从0开始计算;

    pidfile可以指定pid文件路径;

    log部分定义全局的syslog服务器,日志服务器需要开启udp协议,最多可以定义两个;

    除了以上这些,常用的全局配置段参数还包括nbthread、maxsslconn、maxconnrate和spread-checks。nbthread可以指定每个HAProxy进程的线程数,默认为一个,但是该参数会与nbproc互斥(CentOS8中的HAProxy1.8版本无此问题);maxsslconn表示每个HAProxy进程ssl的最大连接数,用于HAProxy配置了证书的情况;maxconnrate表示每个进程每秒创建的最大连接数;spread-checks可以设置后端server状态检查的随机提前或延迟百分比时间,默认为0,建议设为2-5,即20%-50%。

    ②default默认配置段说明:

    default为默认配置段,针对frontend、backend和listen生效,可以有多个name,也可以没有name。

    option http-keep-alive表示开启与客户端的会话保持;

    option forwardfor可以将客户端的ip透传给后端服务器;

    maxconn表示默认配置段内的进程最大连接数;

    mode可以设置默认工作类型,有tcp和http两个选项,使用tcp可以减小服务器压力,性能会更好;

    timeout部分单位为毫秒,timeout connect可以设置客户端请求经过HAProxy服务器到后端server的最长等待时间;timeout client可以设置HAProxy服务器与客户端的最长非活动时间;timeout server可以设置客户端请求从HAProxy服务器到后端server的处理超时时长(tcp连接之后),建议值与timeout client部分保持一致,同时为了避免出现502错误,可以将值调大一点。

2.7 其他准备项

    根据HAProxy配置文件和service文件中的设置,socket文件和pid文件的存放路径为/var/lib/haproxy/,但是该目录也不存在,需提前创建好。其实HAProxy服务一般是用于反向代理的,用户只要是系统非可登录用户即可,不过为了便于管理,也可创建服务专属用户。

HAProxy的编译安装及全局配置段说明_lua_13

2.8 加载并启动HAProxy服务

    重新加载服务后,即可使用systemd方式启动HAProxy服务,因为并未做任何的代理转发设置,故并未打开任何端口。

HAProxy的编译安装及全局配置段说明_lua_14