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来演示相关操作。
- 准备lua环境
1.1 安装依赖包
lua的编译安装需要用到gcc和readline-devel这两个包,需提前安装好。
1.2 编译安装lua
lua的源码包可通过官网获取(官网地址:http://www.lua.org/download.html),目前已更新到5.4.4版本,且时间接近半年,笔者就直接安装最新版。lua的编译安装比较简单,且官网中也有说明如何操作,笔者就直接按官网的操作进行。
安装完成后,以笔者的路径为例,新生成的lua是放在/usr/local/src/lua-5.4.4/src目录下的,需要记好这个位置,后面HAProxy在编译安装时需要用到。
- 编译安装HAProxy
2.1 安装依赖包
HAProxy的编译安装需要openssl-devel、pcre-devel和systemd-devel这三个包,如果lua是直接通过yum方式安装的,还需额外安装gcc。
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版本。
2.3 编译安装
进入到解压目录后,可以看到HAProxy已经自动生成了Makefile文件,因此可以直接进行编译,编译时需要添加以上编译安装的lua存放路径,编译时要用到的一些选项可以在Makefile中查看,并根据自己企业的实际需求进行增删。
安装环节可指定HAProxy的程序安装路径。
2.4 生成软链接
为了方便使用HAProxy服务,可以通过生成PATH变量或者软链接的形式来实现,因为就一个服务,笔者就直接创建软链接。
2.5 创建service文件
HAProxy的service文件可参考yum安装的内容,根据自己的路径或其他设置进行修改。
2.6 创建配置文件
2.6.1 HAProxy配置文件
根据service文件中的设置,HAProxy配置文件是放在/etc/haproxy/目录下,但该目录尚不存在,因此需创建好。配置文件的内容如下图所示,需要注意的是,HAProxy的配置文件必须是以cfg为后缀的。
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服务一般是用于反向代理的,用户只要是系统非可登录用户即可,不过为了便于管理,也可创建服务专属用户。
2.8 加载并启动HAProxy服务
重新加载服务后,即可使用systemd方式启动HAProxy服务,因为并未做任何的代理转发设置,故并未打开任何端口。