HAProxy基础
一.HAProxy 简介
1.1 简介
HAProxy 是一款免费的开源软件,它为 TCP 和基于 http 的应用程序提供了高可用性负
载均衡器和代理服务器解决方案,这些应用程序可以将请求分散到多个服务器上。它是用
C 语言写的,以速度快、效率高而著称(在处理器和内存使用方面)。HAProxy 被 GoDaddy、
GitHub、Bitbucket、Stack Overflow、Reddit、Speedtest.net、Tumblr、Twitter
和 Tuenti 等多家知名网站使用,并被用于亚马逊 AWS 的 OpsWorks 产品中。 – wiki
HAProxy 是一个免费、非常快速和可靠的解决方案。其提供高可用性,负载均衡,和基于
TCP 与 http 的应用程序的代理能。它特别适合高流量的网站并且目前已经使用在很多的
访问最多的网站上。经过多年的发展,它已经成为事实上的标准的开源负载均衡器,目前
会与大多数主流 Linux 发行版一起发布,并且通常默认部署在云平台上。 – haproxy.org
HAProxy 是由德国人Willy Tarreau
1在 2000 年使用 C 语言开发的,他是 Linux
内核的核心贡献者,现在仍然维护着这个项目。
另外,在 2013 年,公司HAProxy Technologies, LLC
成立,除了致力于开源社区的贡献外,
该公司提供一个商业版的 HAProxy,HAProxy 企业版。该公司提供技术支持和提供扩展 HAProxy
功能的附加模块。
1.2 企业版和社区版
社区版和企业版功能对比
Features/功能 | HAProxy Community | HAProxy Enterprise |
---|---|---|
Advanced HTTP/TCP Load Balancing and Persistence:高级 HTTP/TCP 负载均衡和持久性 | 支持 | 支持 |
Advanced Health Checks:高级健康检查 | 支持 | 支持 |
Application Acceleration:应用程序加速 | 支持 | 支持 |
Advanced Security:高级安装特性 | 支持 | 支持 |
Advanced Administration:高级管理功能 | 支持 | 支持 |
Backported Features From HAProxy Dev Branch:来自开发分支的新功能 | NO | 支持 |
24x7 Support:7*24 小时的支持 | NO | 支持 |
Real Time Dashboard:实时的管理界面 | NO | 支持 |
VRRP and Route Health Injection HA Tools:VRRP 等工具 | NO | 支持 |
ACL, Map, and TLS Ticket Key Synchronization:ACL,映射和 TLS 票证秘钥同步 | NO | 支持 |
Advanced Application-based DDoS and Bot Protection:基于应用的 DDos 和 Bot 保护 | NO | 支持 |
Bot Detection:Bot 机器人探测 | NO | 支持 |
Web Application Firewall:应用程序防火墙 | NO | 支持 |
HTTP Protocol Validation:HTTP 协议验证 | NO | 支持 |
Realtime Cluster-Wide Tracking:实时集群追踪功能 | NO | 支持 |
1.3 HAProxy 功能
-
HAProxy 功能特性如下
- 针对 TCP 和 HTTP 的反向代理和负载均衡功能
- URL 重写
- Gzip 压缩功能
- 代理协议支持
- 健康性检查
- 支持 HTTP/2 协议
- 多线程(单进程)
- 热加载配置(数千个并发的情况下,不丢失连接)
- 支持 gRPC 协议(google Remote Procedure Call)
- Lua 语言和 SPOE 支持
- 可以针对 HTTP 请求添加 cookie,进行路由后端服务器
- 可平衡负载至后端服务器,并支持持久连接
- 支持所有主服务器故障切换至备用服务器
- 支持专用端口实现监控服务
- 支持不影响现有连接情况下停止接受新连接请求
- 可以在双向添加,修改或删除 HTTP 报文首部
- 响应报文压缩
- 支持基于 pattern 实现连接请求的访问控制
- 通过特定的 URI 为授权用户提供详细的状态信息 目前不具备的功能
- 正向代理–squid,nginx
- 缓存代理–varnish
- web 服务–nginx、tengine、apache、php、tomcat
- UDP–目前不支持 UDP 协议,2.1 版本会支持 UDP 协议代理
- 单机性能–LVS
1.4 官方维护的版本说明
HAProxy 官方一般支持两个活动的稳定版本,两个长期支持的稳定版本。另外,还会
为比较旧的两个版本修复一些比较严重的错误。下图为官网目前维护的版本的截图:
HAProxy 的大致工作架构
二.HAProxy 安装及基础配置
2.1 Ubuntu 安装 HAProxy
2.1.1 apt 安装
# 查看目前源中有哪些版本可选,可以看到都是旧版
root@ubuntu-suosuoli-node1:~# apt-cache madison haproxy
haproxy | 1.8.8-1ubuntu0.9 | http://mirrors.aliyun.com/ubuntu bionic-security/main amd64 Packages
haproxy | 1.8.8-1ubuntu0.9 | http://mirrors.aliyun.com/ubuntu bionic-updates/main amd64 Packages
haproxy | 1.8.8-1ubuntu0.9 | https://mirrors.tuna.tsinghua.edu.cn/ubuntu bionic-updates/main amd64 Packages
haproxy | 1.8.8-1ubuntu0.9 | https://mirrors.tuna.tsinghua.edu.cn/ubuntu bionic-security/main amd64 Packages
haproxy | 1.8.8-1 | http://mirrors.aliyun.com/ubuntu bionic/main amd64 Packages
haproxy | 1.8.8-1 | https://mirrors.tuna.tsinghua.edu.cn/ubuntu bionic/main amd64 Packages
haproxy | 1.8.8-1 | http://mirrors.aliyun.com/ubuntu bionic/main Sources
haproxy | 1.8.8-1ubuntu0.9 | http://mirrors.aliyun.com/ubuntu bionic-security/main Sources
haproxy | 1.8.8-1ubuntu0.9 | http://mirrors.aliyun.com/ubuntu bionic-updates/main Sources1
# 安装必要的依赖
root@ubuntu-suosuoli-node1:~# apt-get install software-properties-common
# 安装HAProxy2.0版,增加有HAProxy 2.0的安装源
root@ubuntu-suosuoli-node1:~# add-apt-repository ppa:vbernat/haproxy-2.0
# 再次查看具有的HAProxy版本信息
root@ubuntu-suosuoli-node1:~# apt-cache madison haproxy
haproxy | 2.0.12-1ppa1~bionic | http://ppa.launchpad.net/vbernat/haproxy-2.0/ubuntu bionic/main amd64 Packages
......
# 安装
root@ubuntu-suosuoli-node1:~# apt install haproxy=2.0.12-1ppa1~bionic
# 查看版本验证安装情况
root@ubuntu-suosuoli-node1:~# haproxy -v
HA-Proxy version 2.0.12-1ppa1~bionic 2019/12/21 - https://haproxy.org/
2.2.2 编译安装
# Ubuntu1804上无lua,所以需要编译安装,HAProxy需要lua5.3版本以上
root@ubuntu-suosuoli-node1:~# apt-cache madison lua
root@ubuntu-suosuoli-node1:~#
root@ubuntu-suosuoli-node1:~# tar -xf /data/lua-5.3.5.tar.gz -C /usr/local/src/
root@ubuntu-suosuoli-node1:~# cd /usr/local/src/lua-5.3.5
root@ubuntu-suosuoli-node1:/usr/local/src/lua-5.3.5#pwd
/usr/local/src/lua-5.3.5
# 第一次编译出错
root@ubuntu-suosuoli-node1:/usr/local/src/lua-5.3.5# make linux test
gcc -std=gnu99 -O2 -Wall -Wextra -DLUA_COMPAT_5_2 -DLUA_USE_LINUX -c -o lua.o lua.c
lua.c:82:10: fatal error: readline/readline.h: No such file or directory
#include <readline/readline.h>
^~~~~~~~~~~~~~~~~~~~~
compilation terminated.
# 安装依赖
root@ubuntu-suosuoli-node1:/usr/local/src/lua-5.3.5# sudo apt-get install libreadline-dev
# 再次编译,成功
root@ubuntu-suosuoli-node1:/usr/local/src/lua-5.3.5# make linux
cd src && make linux
make[1]: Entering director