当前位置: 首页 > news >正文

HaProxy源码安装(Rocky8)

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

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

wget https://www.haproxy.org/download/3.1/src/haproxy-3.1.3.tar.gz

解压到/etc/local/src

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版本

[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版本信息

[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官网提示步骤,进行操作

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

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

ln -s /app/haproxy/sbin/haproxy /usr/sbin/

验证是否安装成功:

[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文件所在目录。

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

 haproxy的配置文件

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

[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

systemctl start haproxy
systemctl status haproxy

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

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

相关文章:

  • Deepseek本地部署
  • C#中的静态类以及常见用途
  • 《深度揭秘:DeepSeek如何解锁自然语言处理密码》
  • STM32创建静态库lib
  • 【每日论文】Latent Radiance Fields with 3D-aware 2D Representations
  • STL 语句表编程
  • 破解微服务疑难杂症:2025年全解决方案
  • Spring Cache 详细讲解
  • Jmeter如何计算TPS
  • JVM中的线程池详解:原理→实践
  • 代码随想录 第一章 数组 27.移除元素
  • 菜鸟之路Day15一一IO流(一)
  • Chrome多开终极形态解锁!「窗口管理工具+IP隔离插件
  • 请解释一下Standford Alpaca格式、sharegpt数据格式-------deepseek问答记录
  • mysql主从配置(2025)
  • 【十】Golang 切片
  • MySQL数据库入门到大蛇尚硅谷宋红康老师笔记 基础篇 part 14
  • 以太网详解(八)传输层协议:TCP/UDP 协议
  • 基于Springboot+Vue前后端分离的农场投入品运营线上管理系统设计与实现+万字文档+指导搭建视频
  • c/c++蓝桥杯经典编程题100道(19)汉诺塔问题
  • 出走的苏敏阿姨一路走到了戛纳,这块红毯因她而多元
  • 高新波任西安电子科技大学校长
  • 跨越三十年友情,61岁余隆和60岁齐默尔曼在上海再度合作
  • 2000多年前的“新衣”长这样!马王堆文物研究新成果上新
  • “免签圈”扩容,旅游平台:今年以来巴西等国入境游订单显著增加
  • 押井守在30年前创造的虚拟世界何以比当下更超前?