HAproxy 反向代理
负载均衡简介
负载均衡:Load Balance,简称LB,是一种服务或基于硬件设备等实现的高可用反向代理技术,负载均衡将特定的服务分担给指定的一个或多个后端特定的服务器,从而提高了公司业务的并发处理能力、保证了业务的高可用性、方便了业务后期的水平动态扩展
为什么使用负载均衡:
Web服务器的动态水平扩展:对用户无感知
增加业务并发访问及处理能力:解决单服务器瓶颈问题
节约公网IP地址:降低IT支出成本
隐藏内部服务器IP:提高内部服务器安全性
配置简单:固定格式的配置文件
功能丰富:支持四层和七层,支持动态下线主机
性能较强:并发数万甚至数十万
负载均衡类型
#四层:
LVS
HAproxy
Nginx
应用场景:Redis、Mysql、Memcache等
#七层:
HAproxy
Nginx
应用场景:Nginx、Tomcat、Apache、PHP、图片、动静分离、API等
通过LVS实现四层和Nginx实现七层的负载均衡对机器资源消耗比较大,并且管理复杂度提升,运维总监要求,目前需要对前端负载均衡服务进行一定的优化和复用,能否用一种服务同既能实现七层负载均衡,又能实现四层负载均衡,并且性能高效,配置管理容易,而且还是开源
前端负载均衡设备为重中之重,在软件选择上,能满足业务的前提,尽可能降低复杂度,提高易维护性
HAproxy 介绍
HAProxy是法国开发者 威利塔罗(Willy Tarreau) 在2000年使用C语言开发的一个开源软件,是一款具备高并发(一万以上)、高性能的TCP和HTTP负载均衡器,支持基于cookie的持久性,自动故障切换,支持正则表达式及web状态统计,目前最新TLS版本为2.0
支持的功能:
TCP和HTTP反向代理
SSL/TSL服务器
支持动态程序的反向代理
支持基于数据库的反向代理
可以针对HTTP请求添加cookie,进行路由后端服务器
可平衡负载至后端服务器,并支持持久连接
支持所有主服务器故障切换至备用服务器
支持专用端口实现监控服务
支持停止接受新连接请求,而不影响现有连接
响应报文压缩
支持基于pattern实现连接请求的访问控制
通过特定的URI为授权用户提供详细的状态信息
不支持的功能:
正向代理–squid,nginx
缓存代理–varnish
web服务–nginx、tengine、apache、php、tomcat
UDP–目前不支持UDP协议
单机性能–相比LVS性能较差
HAproxy 安装
Ubuntu安装 https://haproxy.debian.net/
apt install haproxy -y
haproxy -v
#最新版安装
apt-get install software-properties-common
add-apt-repository ppa:vbernat/haproxy-2.0
apt-get update
apt-get install haproxy=2.0.\*
haproxy -v
HA-Proxy version 2.0.13-2ppa1~bionic 2020/04/02 - https://haproxy.org/
Centos 安装 https://pkgs.org/download/haproxy
#互联网安装新版本
wget https://centos7.iuscommunity.org/ius-release.rpm
rpm -ivh https://mirrors.aliyun.com/centos/7/extras/x86_64/Packages/epel-release-7-11.noarch.rpm
rpm -Uvh ius-release*rpm
yum install haproxy18u -y
haproxy -v
HA-Proxy version 1.8.25 2020/04/02
HAproxy编译安装
lua安装 http://www.lua.org/start.html
wget http://www.lua.org/ftp/lua-5.3.5.tar.gz
ll
-rw-r--r-- 1 root root 2684568 Apr 7 22:29 haproxy-2.1.4.tar.gz
-rw-r--r-- 1 root root 303543 Jun 27 2018 lua-5.3.5.tar.gz
#lua编译
yum install gcc readline-devel -y
tar xf lua-5.3.5.tar.gz -C /opt/
cd /opt/lua-5.3.5/
make linux test
src/lua -v
Lua 5.3.5 Copyright (C) 1994-2018 Lua.org, PUC-Rio
#Haproxy编译
#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=/opt/haproxy
yum install gcc openssl-devel pcre-devel systemd-devel -y
tar xf haproxy-2.1.4.tar.gz -C /opt/
cd /opt/haproxy-2.1.4/
#参考INSTALL文件进行编译安装
make ARCH=x86_64 TARGET=linux-glibc USE_PCRE=1 USE_OPENSSL=1 USE_ZLIB=1 USE_SYSTEMD=1 USE_LUA=1 LUA_INC=/opt/lua-5.3.5/src/ LUA_LIB=/opt/lua-5.3.5/src/
make install PREFIX=/opt/haproxy
ln -s /opt/haproxy/sbin/haproxy /usr/sbin/
haproxy -v
HA-Proxy version 2.1.4 2020/04/02 - https://haproxy.org/
haproxy -vv #更加详细,包括编译参数
useradd -r -s /sbin/nologin haproxy -d /var/lib/haproxy
mkdir /etc/haproxy
mkdir /var/lib/haproxy
chown -R haproxy.haproxy /var/lib/haproxy/
#准备service文件和配置文件
vim /etc/haproxy/haproxy.cfg
....
vim /lib/systemd/system/haproxy.service
...
vim /etc/sysctl.conf
sysctl -p
net.ipv4.ip_nonlocal_bind = 1
net.ipv4.ip_forward = 1
systemctl daemon-reload
systemctl start haproxy
http://10.0.0.8:9999/status