HAProxy是法国开发者 威利塔罗(Willy Tarreau) 在2000年使⽤C语⾔开发的⼀个开源软件,是⼀款具备⾼并发(⼀万以上)、⾼性能的TCP和HTTP负载均衡器,⽀持基于cookie的持久性,⾃动故障切换,⽀持正则表达式及web状态统计。
HAProxy功能:
TCP和HTTP反向代理
SSL/TSL服务器
可以针对HTTP请求添加cookie,进⾏路由后端服务器
可平衡负载⾄后端服务器,并⽀持持久连接
⽀持所有主服务器故障切换⾄备⽤服务器
⽀持专⽤端⼝实现监控服务
⽀持不影响现有连接情况下停⽌接受新连接请求
可以在双向添加,修改或删除HTTP报⽂⾸部
响应报⽂压缩
⽀持基于pattern实现连接请求的访问控制
通过特定的URI为授权⽤⼾提供详细的状态信息
不具备的功能:
正向代理--squid,nginx
缓存代理--varnish
web服务--nginx、tengine、apache、php、tomcat
UDP--⽬前不⽀持UDP协议,2.1版本会⽀持UDP协议代理
单机性能--LVS(DR)
![图片[1]-HAProxy部署安装-李佳程的个人主页](http://www.lijiach.com/wp-content/uploads/2022/12/image-13.png)
1、Ubuntu安装
~# apt-get install software-properties-common
~# add-apt-repository ppa:vbernat/haproxy-2.0
~# apt update
~# apt-cache madison haproxy
~# apt install haproxy=2.0.4-1ppa1~bionic
#验证haproxy版本
# haproxy -v
HA-Proxy version 2.0.4-1ppa1~bionic 2019/08/09 -
https://haproxy.org/
2、Centos 安装
在centos 系统上通过yum、编译等多种安装⽅式。
2.1、默认yum源
默认的base仓库中包含haproxy的安装包⽂件,但是版本⽐较旧,是1.5.18的版本,距离当前版本已经有较⻓时间没有更新,由于版本⽐较旧所以有很多功能不⽀持,如果对功能和性能没有要求可以使⽤此版本,否则推荐使⽤新版本。
# yum install haproxy -y
# 验证haproxy版本
# haproxy -v
HA-Proxy version 1.5.18 2016/05/10
Copyright 2000-2016 Willy Tarreau <willy@haproxy.org>
2.2、第三⽅安装包
https://pkgs.org/download/haproxy # 下载rpm包
#基于互联⽹在线安装
# wget http://www.nosuchhost.net/~cheese/fedora/packages/epel-7/x86_64/cheese-release-7-1.noarch.rpm
# rpm -ivh cheese-release-7-1.noarch.rpm
# yum install haproxy-1.8.14-1.el7.x86_64.rpm -y
# 验证haproxy版本
# haproxy -v
HA-Proxy version 1.8.14-52e4d43 2018/09/20
Copyright 2000-2018 Willy Tarreau <willy@haproxy.org>
3、编译安装HAProxy
编译安装HAProxy 2.0 LTS版本,更多源码包下载地址:http://www.haproxy.org/download/
3.1、解决lua环境
HAProxy ⽀持基于lua实现功能扩展,lua是⼀种⼩巧的脚本语⾔,于1993年由巴西⾥约热内卢天主教⼤学(Pontifical Catholic University of Rio deJaneiro)⾥的⼀个研究⼩组开发,其设计⽬的是为了嵌⼊应⽤程序中,从⽽为应⽤程序提供灵活的扩展和定制功能。
Lua 应⽤场景
游戏开发
独⽴应⽤脚本
Web 应⽤脚本
扩展和数据库插件,如MySQL Proxy
安全系统,如⼊侵检测系统
Ubuntu 基础环境:
# apt install iproute2 ntpdate tcpdump telnet
traceroute nfs-kernel-server nfs-common lrzsz tree
openssl libssl-dev libpcre3 libpcre3-dev zlib1g-dev
ntpdate tcpdump telnet traceroute gcc openssh-server
lrzsz tree openssl libssl-dev libpcre3 libpcre3-dev
zlib1g-dev ntpdate tcpdump telnet traceroute iotop unzip zip libreadline-dev libsystemd-dev
#安装基础命令及编译依赖环
# pwd
/usr/local/src
# 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
# ./src/lua -v
Lua 5.3.5 Copyright (C) 1994-2018 Lua.org, PUC-Rio
或安装系统⾃带的lua
# apt install lua5.3=5.3.3-1ubuntu0.18.04.1
# lua5.3 -v
Lua 5.3.3 Copyright (C) 1994-2016 Lua.org, PUC-Rio
Centos 基础环境:
由于centos⾃带的lua版本⽐较低并不符合HAProxy要求的lua最低版本(5.3)的要求,因此需要编译安装较新版本的lua环境,然后才能编译安装HAProxy,过程如下:
# yum install libtermcap-devel ncurses-devel libevent-devel readline-devel
# yum install gcc gcc-c++ glibc glibc-devel pcre pcre-devel openssl openssl-devel systemd-devel net-tools vim iotop bc zip unzip zlib-devel lrzsz tree screen lsof tcpdump wget ntpdate
#安装基础命令及编译依赖环境
# 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
3.2、编译安装HAProxy
[root@haproxy01 ~]# cd /usr/local/src/
[root@haproxy01 src]# wget http://www.lua.org/ftp/lua-5.4.4.tar.gz
[root@haproxy01 src]# tar xvf lua-5.4.4.tar.gz
[root@haproxy01 src]# cd lua-5.4.4/
[root@haproxy01 lua-5.4.4]# make linux test
[root@haproxy01 lua-5.4.4]# lua -v
Lua 5.1.4 Copyright (C) 1994-2008 Lua.org, PUC-Rio
[root@haproxy01 lua-5.4.4]# ./src/lua -v
Lua 5.4.4 Copyright (C) 1994-2022 Lua.org, PUC-Rio
[root@haproxy01 src]# wget http://www.haproxy.org/download/2.0/src/haproxy-2.0.30.tar.gz
# 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编译参数:
[root@haproxy01 haproxy-2.0.30]# 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.4.4/src/ LUA_LIB=/usr/local/src/lua-5.4.4/src/ PREFIX=/apps/haproxy
[root@haproxy01 haproxy-2.0.30]# make install PREFIX=/apps/haproxy
[root@haproxy01 haproxy-2.0.30]# cp haproxy /usr/sbin/
3.3、验证HAProxy版本
[root@haproxy01 ~]# haproxy -v
HA-Proxy version 2.0.30-2ad13fe 2022/12/09 - https://haproxy.org/
3.4、HAProxy启动脚本
[root@haproxy01 ~]# 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
3.5、配置⽂件
[root@haproxy01 ~]# mkdir /etc/haproxy
[root@haproxy01 ~]# vim /etc/haproxy/haproxy.cfg
listen stats
mode http
bind 0.0.0.0:9999
stats enable
log global
stats uri /haproxy-status
stats auth haadmin:q1w2e3r4ys
listen nginx:80
bind 192.168.1.61:80
mode tcp
server 192.168.1.51 192.168.1.51:80 check inter 3s fall 3 rise 5
server 192.168.1.52 192.168.1.52:80 check inter 3s fall 3 rise 5
3.6、启动haproxy
[root@haproxy01 ~]# mkdir /var/lib/haproxy
[root@haproxy01 ~]# chown 99.99 /var/lib/haproxy/ -R
3.7、验证haproxy状态
haproxy.cfg⽂件中定义了chroot、pidfile、user、group等参数,如果系统没有相应的资源会导致haproxy⽆法启动,具体参考⽇志⽂件/var/log/messages
![图片[2]-HAProxy部署安装-李佳程的个人主页](http://www.lijiach.com/wp-content/uploads/2022/12/image-15.png)
[root@haproxy02 ~]# curl http://192.168.1.61
192.168.1.51 Hello
[root@haproxy02 ~]# curl http://192.168.1.61
192.168.1.52 Hello
[root@haproxy02 ~]#
[root@haproxy02 ~]# curl http://192.168.1.61
192.168.1.51 Hello
[root@haproxy02 ~]# curl http://192.168.1.61
192.168.1.52 Hello
[root@haproxy02 ~]# curl http://192.168.1.61
192.168.1.51 Hello
[root@haproxy02 ~]# curl http://192.168.1.61
192.168.1.52 Hello
[root@haproxy02 ~]# curl http://192.168.1.61
192.168.1.51 Hello
[root@haproxy02 ~]# curl http://192.168.1.61
192.168.1.52 Hello
![图片[3]-HAProxy部署安装-李佳程的个人主页](http://www.lijiach.com/wp-content/uploads/2022/12/image-14.png)
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END