浅谈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