HaProxy源码安装(Rocky8)

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

这里对安装社区免费的版本进行介绍(3.1):Index of /download/3.1/src

bash 复制代码
wget https://www.haproxy.org/download/3.1/src/haproxy-3.1.3.tar.gz

解压到/etc/local/src

bash 复制代码
tar -zxvf haproxy-3.1.3.tar.gz -C /usr/local/src/

[root@localhost ~]# ll /usr/local/src/
total 4
drwxrwxr-x. 13 root root 4096 Jan 29 21:20 haproxy-3.1.3

我们可以在安装好的这个目录中找到INSTALL这个文件,more INSTALL,这里提供的是官方文档,我们找到Build environment,这里提到了编译环境的要求几个软件包的版本,比如:

HAProxy requires a working GCC or Clang toolchain and GNU make :

  • GNU make >= 3.80. Note that neither Solaris nor OpenBSD's make work with

the GNU Makefile. If you get many syntax errors when running "make", you

may want to retry with "gmake" which is the name commonly used for GNU make

on BSD systems.

  • GCC >= 4.2 (up to 14 tested). Older versions can be made to work with a

few minor adaptations if really needed. Newer versions may sometimes break

due to compiler regressions or behaviour changes. The version shipped with

your operating system is very likely to work with no trouble. Clang >= 3.0

is also known to work as an alternative solution. Recent versions may emit

a bit more warnings that are worth reporting as they may reveal real bugs.

TCC (https://repo.or.cz/tinycc.git) is also usable for developers but will

not support threading and was found at least once to produce bad code in

some rare corner cases (since fixed). But it builds extremely quickly

(typically half a second for the whole project) and is very convenient to

run quick tests during API changes or code refactoring.

  • GNU ld (binutils package), with no particular version. Other linkers might

work but were not tested.

我们检查一下自己的安装的make和gcc版本

bash 复制代码
[root@localhost haproxy-3.1.3]# yum list make
Installed Packages
make.x86_64                           1:4.2.1-11.el8
[root@localhost haproxy-3.1.3]# yum list gcc
Installed Packages
gcc.x86_64                         8.5.0-23.el8_10                          @appstream

可以看到是满足上述要求的,未安装的话可以yum安装,这里还建议安装openssl-devel(haproxy加密通信),pcre-devel(正则请求匹配和处理),systemd-devel(使用systemd管理 haproxy)这几个软件,提供额外的功能支持:yum install openssl-devel pcre-devel systemd-devel -y

haproxy是对lua是有要求的,比如以下信息说明至少要大于等于5.3,这在编译haproxy时应该是需要的,我们要指定USE_LUA=1,然后在默认情况下haproxy会寻找lua5.4,lua54,lua5.3这种名字,找不到的话可能会报错,所有这里在编译的时候官方也建议使用变量'LUA_LIN_NAME'。如果读者的系统为CentOS7 之前版本自带的lua版本比较低并不符合HAProxy要求的lua最低版本(5.3)的要求,因此需要编译安装较新版本的lua环境,然后才能编译安装HAProxy

查看本地默认lua版本信息

bash 复制代码
[root@localhost haproxy-3.1.3]# yum list lua
Available Packages
lua.x86_64                           5.3.4-12.el8                            appstream

可以yum直接安装,或者源码安装,这里我选择源码安装5.4版本的。官网地址:Lua: download

我们下载下来之后,根据上图haproxy的提示的extracted and built步骤或者lua官网提示步骤,进行操作

bash 复制代码
tar -zxvf lua-5.4.7.tar.gz -C /opt/
ll /opt
#total 0
#drwxr-xr-x. 4 1026 1000 58 Jun 14  2024 lua-5.4.7
cd /opt/lua-5.4.7/
make all test
#-------------------------------------------------
sed -n '/lua-5.4.6/ p' /usr/local/src/haproxy-3.1.3/INSTALL
  $ cd /opt/lua-5.4.6
    USE_LUA=1 LUA_INC=/opt/lua-5.4.6/src LUA_LIB=/opt/lua-5.4.6/src

cd /usr/local/src/haproxy-3.1.3/
编译
make  ARCH=x86_64 TARGET=linux-glibc  USE_PCRE=1 USE_OPENSSL=1 USE_ZLIB=1  USE_SYSTEMD=1  USE_LUA=1 LUA_INC=/opt/lua-5.4.7/src LUA_LIB=/opt/lua-5.4.7/src
#上面将我们之前安装的软件对应的服务打开,在编译的时候使用变量名=1
安装
make -p /app/haproxy
make install PREFIX=/apps/haproxy
[root@localhost haproxy]# tree
.
├── doc
│   └── haproxy
│       ├── 51Degrees-device-detection.txt
│       ├── configuration.txt
│       ├── cookie-options.txt
│       ├── DeviceAtlas-device-detection.txt
│       ├── intro.txt
│       ├── linux-syn-cookies.txt
│       ├── lua.txt
│       ├── management.txt
│       ├── netscaler-client-ip-insertion-protocol.txt
│       ├── network-namespaces.txt
│       ├── peers.txt
│       ├── peers-v2.0.txt
│       ├── proxy-protocol.txt
│       ├── regression-testing.txt
│       ├── seamless_reload.txt
│       ├── SOCKS4.protocol.txt
│       ├── SPOE.txt
│       └── WURFL-device-detection.txt
├── sbin
│   └── haproxy
└── share
    └── man
        └── man1
            └── haproxy.1

最后添加到环境变量或在创建软连接

bash 复制代码
ln -s /app/haproxy/sbin/haproxy /usr/sbin/

验证是否安装成功:

bash 复制代码
[root@localhost ~]# haproxy -v
HAProxy version 3.1.3-929bedf 2025/01/29 - https://haproxy.org/
Status: stable branch - will stop receiving fixes around Q1 2026.
Known bugs: http://www.haproxy.org/bugs/bugs-3.1.3.html
Running on: Linux 4.18.0-553.el8_10.x86_64 #1 SMP Fri May 24 13:05:10 UTC 2024 x86_64

安装就正式完成了,但是启动还需要一定的配置,我们现在还需要配置一下pid文件和系统配置文件让它能够通过systemctl启动,然后再配置下haproxy的配置文件

首先先创建pid的目录,这个目录应该是haproxy可以读写的,所以这里需要创建一个用户haproxy,它的家目录就是pid文件所在目录。

bash 复制代码
mkdri /var/lib/haproxy
useradd -r -s /sbin/nologin -d /var/lib/haproxy haproxy#-r表示系统用户-s用于设置登录权限-d指定家目录

haproxy的配置文件

bash 复制代码
make /etc/haproxy
vim /etc/haproxy/haproxy.cfg
global
        maxconn 100000
        chroot /app/haproxy
        stats socket /var/lib/haproxy/haproxy.sock mode 600 level admin
        user  haproxy
        group haproxy
        daemon
        pidfile /var/lib/haproxy/haproxy.pid
        log 127.0.0.1 local2 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#监听端口设置为9999
        stats enable
        log global
        stats uri    /haproxy#后面用于登录的路由
        stats auth   haproxy:123456#用户和密码

上面这个配置内容是参考官方给的示例设置的:比如下面的都是参考内容

[root@localhost haproxy]# tree /usr/local/src/haproxy-3.1.3/examples/

/usr/local/src/haproxy-3.1.3/examples/

├── basic-config-edge.cfg

├── content-sw-sample.cfg

├── errorfiles

│ ├── 400.http

│ ├── 403.http

│ ├── 408.http

│ ├── 500.http

│ ├── 502.http

│ ├── 503.http

│ ├── 504.http

│ └── README

├── haproxy.init

├── lua

│ ├── event_handler.lua

│ ├── mailers.lua

│ └── README

├── mptcp-backend.py

├── mptcp.cfg

├── option-http_proxy.cfg

├── quick-test.cfg

├── socks4.cfg

├── traces.cfg

├── transparent_proxy.cfg

└── wurfl-example.cfg

创建系统启动haproxy的配置文件:vim /usr/lib/systemd/system/haproxy.service

bash 复制代码
[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

bash 复制代码
systemctl start haproxy
systemctl status haproxy

关闭防火墙和selinux之后进入192.168.118.130:9999/haproxy

输入配置文件中的设置的用户和密码,即可完成登录:

相关推荐
A ?Charis1 小时前
k8s-对接NFS存储
linux·服务器·kubernetes
DC_BLOG5 小时前
Linux-GlusterFS进阶配置
linux·运维·服务器
我们的五年5 小时前
MAC地址是如何在局域网中工作的?
linux
浮华落定7 小时前
Centos开机自启动
linux·运维·centos
去看日出7 小时前
CentOS 7 企业级Redis 7部署指南
linux·redis·centos
End9289 小时前
如何安装虚拟机cenos7系统
大数据·linux·运维
果汁分你一半l9 小时前
c++标准io与线程,互斥锁
linux·开发语言·c++·算法·vim
WineMonk10 小时前
CentOS查看IP地址
linux·centos
5:0010 小时前
Linux:进程间通信(一.初识进程间通信、匿名管道与命名管道、共享内存)
linux·运维·服务器
ARM+FPGA+AI工业主板定制专家10 小时前
Software PLC Solution for RK3568+Codesys ARM+LINUX Hardware Platform
linux·plc·rk3568·codesys