ubuntu20.04編譯安裝HAproxy
一 環境準備
1.1 設定時間同步
root@node-01:~# apt -y install chrony
root@node-01:~# systemctl enable chrony
1.2 建立haproxy使用者
root@node-01:~# groupadd -g 2021 haproxy
root@node-01:~# useradd -g haproxy -s /bin/false -u 2021 haproxy
root@node-01:~# id haproxy
uid=2021(haproxy) gid=2021(haproxy) groups=2021(haproxy)
二 安裝haproxy
社群官網:https://www.haproxy.org/
2.1 下載haproxy
root@node-01:/opt# wget https://www.haproxy.org/download/2.4/src/haproxy-2.4.8.tar.gz
2.2 檢視haproxy依賴
root@node-01:/opt# tar xf haproxy-2.4.8.tar.gz
root@node-01:/opt# cd haproxy-2.4.8/
root@node-01:/opt/haproxy-2.4.8# cat INSTALL
2.3 安裝haproxy依賴
root@node-01:~# apt -y install libpcre3-dev zlib1g-dev libsystemd-dev make gcc libssl-dev
2.4 安裝lua
官網:http://www.lua.org/start.html
2.4.1 下載lua
root@node-01:/opt# curl -R -O http://www.lua.org/ftp/lua-5.4.3.tar.gz
2.4.2 安裝lua
root@node-01:/opt# tar xf lua-5.4.3.tar.gz
root@node-01:/opt# cd lua-5.4.3/
root@node-01:/opt/lua-5.4.3# make linux test
2.5 安裝haproxy
root@node-01:/opt# cd haproxy-2.4.8/ root@node-01:/opt/haproxy-2.4.8# make -j $(nproc) 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=/opt/lua-5.4.3/src/ LUA_LIB=/opt/lua-5.4.3/src/ PREFIX=/usr/local/haproxy root@node-01:/opt/haproxy-2.4.8# make install PREFIX=/usr/local/haproxy
2.6 驗證版本
root@node-01:~# /usr/local/haproxy/sbin/haproxy -v
HAProxy version 2.4.8-d1f8d41 2021/11/03 - https://haproxy.org/
Status: long-term supported branch - will stop receiving fixes around Q2 2026.
Known bugs: http://www.haproxy.org/bugs/bugs-2.4.8.html
Running on: Linux 5.4.0-89-generic #100-Ubuntu SMP Fri Sep 24 14:50:10 UTC 2021 x86_64
三 準備haproxy.cfg
官方文件:http://cbonte.github.io/haproxy-dconv/2.4/snapshot/configuration.html
點選檢視程式碼
root@node-01:~# cat /usr/local/haproxy/haproxy.cfg global maxconn 100000 chroot /usr/local/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
stats enable
log global
stats uri /haproxy-status
stats auth haadmin:123456
四 準備haproxy.service
root@node-01:~# cat /lib/systemd/system/haproxy.service [Unit] Description=HAProxy Load Balancer After=syslog.target network.target
[Service]
ExecStartPre=/usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/haproxy.cfg -c -q
ExecStart=/usr/local/haproxy/sbin/haproxy -Ws -f /usr/local/haproxy/haproxy.cfg -p /var/lib/haproxy/haproxy.pid
ExecReload=/bin/kill -USR2 $MAINPID
[Install]
WantedBy=multi-user.target
五 啟動haproxy服務
root@node-01:~# chown -R haproxy.haproxy /var/lib/haproxy/ root@node-01:~# systemctl start haproxy root@node-01:~# systemctl status haproxy ● haproxy.service - HAProxy Load Balancer Loaded: loaded (/lib/systemd/system/haproxy.service; disabled; vendor preset: enabled) Active: active (running) since Wed 2021-11-10 13:15:08 CST; 4s ago Process: 20635 ExecStartPre=/usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/haproxy.cfg -c -q (code=exited, status=0/SUCCESS) Main PID: 20651 (haproxy) Tasks: 3 (limit: 2245) Memory: 27.9M CGroup: /system.slice/haproxy.service ├─20651 /usr/local/haproxy/sbin/haproxy -Ws -f /usr/local/haproxy/haproxy.cfg -p /var/lib/haproxy/haproxy.pid └─20653 /usr/local/haproxy/sbin/haproxy -Ws -f /usr/local/haproxy/haproxy.cfg -p /var/lib/haproxy/haproxy.pid
Nov 10 13:15:08 node-01 systemd[1]: Starting HAProxy Load Balancer...
Nov 10 13:15:08 node-01 systemd[1]: Started HAProxy Load Balancer.
Nov 10 13:15:08 node-01 haproxy[20651]: [NOTICE] (20651) : New worker #1 (20653) forked
root@node-01:~# systemctl enable haproxy
Created symlink /etc/systemd/system/multi-user.target.wants/haproxy.service → /lib/systemd/system/haproxy.service.
六 驗證haproxy埠
root@node-01:~# ss -tnlp
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
LISTEN 0 4096 0.0.0.0:9999 0.0.0.0:* users:(("haproxy",pid=20653,fd=6))