淺談HAProxy介紹及安裝
1️⃣ HAProxy簡介
- 使用
yum info haproxy
,查看haproxy描述
摘要:HAProxy是在高可用環境下提供TCP/HTTP proxy和Load Balance的工具。
描述:HAProxy 是一個適用於HA環境的 TCP/HTTP reverse proxy(譯者注:本身沒有HA功能,但是有proxy和LB功能,可以這樣理解,HA的proxy…… ),HAProxy可以:
- 路由依賴靜態分配cookies的HTTP請求。
- 在多個服務器之間擴展負載,同時確保通過使用HTTP cookie來保持服務器的持久性。
- 在主服務器fail時候,可以切換到備用服務器。
- 接受連接到特定端口的專用服務監控
- 在不斷開已有的鏈接的情況下,停止接受新的鏈接請求。
- 雙向添加,修改,刪除HTTP headers。
- 鎖定匹配特定模式的請求。
- 從一個被應用解析的URI來報告詳細狀態給認證過的用戶(譯者注:相當方便和強大)
- HAProxy是一個純粹的reverse proxy,能夠實現基於TCP的4層和基於HTTP的7層負載均衡功能
- 但是和Nginx不一樣,是沒有Web Server功能的,所以HAProxy後端通常會接Nginx或Apache httpd等Web Server。
- 通常HAproxy會和Keepalived配合使用,實現高可用的負載均衡
- 更多詳細的介紹可以看官方文檔:Introduction to HAProxy
2️⃣ HAProxy安裝
🅿 Ubuntu安裝
ubuntu內核版本比較高,所以按照官方的說明來安裝
apt-get install software-properties-common
add-apt-repository ppa:vbernat/haproxy-2.0 # 安裝過程要敲回車鍵
apt-get update
apt-cache madison haproxy # 查看haproxy版本
apt-get install haproxy=2.0.12-1ppa1~bionic -y
# 驗證haproxy版本
haproxy -v
HA-Proxy version 2.0.12-1ppa1~bionic 2019/12/21 - https://haproxy.org/
# 啓動haproxy並驗證狀態
systemctl enable --now haproxy
systemctl status haproxy
ps -ef | grep haproxy
🅿 centos編譯安裝
因爲centos內核版本低,導致yum安裝的haproxy版本太低
▶ 1.解決lua環境
- HAProxy 支持基於lua實現功能擴展
- 由於centos自帶的lua版本比較低並不符合HAProxy要求的lua低版本(5.3)的要求,因此需要編譯安裝較新版本的 lua環境,然後才能編譯安裝HAProxy
yum -y install epel-release
# 編譯環境
yum install libtermcap-devel ncurses-devel libevent-devel readline-devel
wget http://www.lua.org/ftp/lua-5.3.5.tar.gz
tar xvf lua-5.3.5.tar.gz
cd lua-5.3.5 # make linux test
pwd
/usr/local/src/lua-5.3.5
lua -v #當前系統版本
Lua 5.1.4 Copyright (C) 1994-2008 Lua.org, PUC-Rio
./src/lua -v #編譯安裝的版本
Lua 5.3.5 Copyright (C) 1994-2018 Lua.org, PUC-Rio
▶ 2.編譯安裝HAProxy
wget http://www.haproxy.org/download/2.0/src/haproxy-2.0.12.tar.gz
cd /usr/local/src
tar xvf haproxy-2.0.4.tar.gz
# 安裝編譯環境
yum install gcc gcc-c++ glibc glibc-devel pcre pcre-devel openssl openssl-devel systemd-devel net-tools
# HAProxy 1.8及1.9版本編譯參數:
make ARCH=x86_64 TARGET=linux2628 USE_PCRE=1 USE_OPENSSL=1 USE_ZLIB=1 USE_SYSTEMD=1 USE_CPU_AFFINITY=1 PREFIX=/usr/local/haproxy
# HAProxy 2.0編譯參數:
make 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=/usr/local/src/lua-5.3.5/src/ LUA_LIB=/usr/local/src/lua-5.3.5/src/ PREFIX=/usr/local/haproxy
make install PREFIX=/usr/local/haproxy \
cp haproxy /usr/sbin
# 查看haproxy版本
haproxy -v
HA-Proxy version 2.0.12 2019/12/21 - https://haproxy.org/
▶ 3.製作haproxy啓動腳本
vim /usr/lib/systemd/system/haproxy.service # 這是centos啓動腳本路徑
[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
▶ 4.製作配置文件
mkdir -p /etc/haproxy
useradd -s /sbin/nologin -r haproxy
vim /etc/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
#nbproc 4
#cpu-map 1 0
#cpu-map 2 1
#cpu-map 3 2
#cpu-map 4 3
pidfile /var/lib/haproxy/haproxy.pid
log 127.0.0.1 local3 info
defaults
option http-keep-alive
option forwardfor
maxconn 100000
mode http
timeout connect 300000ms
timeout client 300000ms
timeout server 300000ms
▶ 4.啓動HAProxy並驗證狀態
mkdir -p /var/lib/haproxy
chown -R haproxy.haproxy /var/lib/haproxy
# 加載啓動文件
systemctl daemon-reload
# 啓動驗證狀態
systemctl enable --now haproxy
systemctl status haproxy
ps -ef | grep haproxy