HAProxy是法国开发者 威利塔罗(Willy Tarreau) 在2000年使用C语言开发的一个开源软件,是一款具备高并发(一万以上)、高性能的TCP和HTTP负载均衡器,支持基于cookie的持久性,自动故障切换,支持正则表达式及web状态统计,
负载均衡(Load Balance,简称LB)是一种服务或基于硬件设备等实现的高可用反向代理技术,负载均衡将特定的业务(web服务、网络流量等)分担给指定的一个或多个后端特定的服务器或设备,从而提高了公司业务的并发处理能力、保证了业务的高可用性、方便了业务后期的水平动态扩展。
优势和作用
Web服务器的动态水平扩展-->对用户无感知
增加业务并发访问及处理能力-->解决单服务器瓶颈问题
节约公网IP地址-->降低IT支出成本
隐藏内部服务器IP-->提高内部服务器安全性
配置简单-->固定格式的配置文件
功能丰富-->支持四层和七层,
支持动态下线主机 性能较强-->并发数万甚至数十万
负载均衡类型分类:
四层:LVS(Linux Virtual Server) HAProxy(High Availability Proxy) Nginx(1.9)
七层:HAProxy Nginx
硬件:F5 Netscaler Array 深信服
应用 场景:
四层:Redis、Mysql、RabbitMQ、Memcache等
七层:Nginx、Tomcat、Apache、PHP 、图片、动静分离、API等
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
HAProxy安装
一.HAProxy安装直接安装
yum install haproxy -y
#验证haproxy版本
haproxy -v
HA-Proxy version 1.5.18 2016/05/10 Copyright 2000-2016 Willy Tarreau <willy@haproxy.org>
二.利用第三方 yum 仓库安装
[root@centos7 ~]# wget https://centos7.iuscommunity.org/ius-release.rpm
[root@centos7 ~]# rpm -Uvh ius-release*rpm
[root@centos7 ~]# yum -y install epel-release
[root@centos7 ~]# rpm -Uvh ius-release*rpm
[root@centos7 ~]# yum install haproxy
三.下载rpm包离线安装
#下载安装lua库对应的版本
[root@centos7 ~]# wget https://dl.iuscommunity.org/pub/ius/stable/CentOS/7/x86_64/lua53u-libs-5.3.4-1.ius.centos7.x86_64.rpm
#安装lua库
[root@centos7 ~]# yum -y install lua53u-libs-5.3.4-1.ius.centos7.x86_64.rpm
#下载haproxy
[root@centos7 ~]# wget https://dl.iuscommunity.org/pub/ius/stable/CentOS/7/x86_64/haproxy18u-1.8.20-
1.el7.ius.x86_64.rpm
#安装haproxy
[root@centos7 ~]# yum -y install haproxy18u-1.8.20-1.el7.ius.x86_64.rpm
四.HAProxy二进制安装
1、lua依赖包
yum install libtermcap-devel ncurses-devel libevent-devel readline-devel -y
yum install gcc gcc-c++ glibc glibc-devel -y
2、编译安装lua
HAProxy 支持基于lua实现功能扩展,lua是一种小巧的脚本语言,里的一个研究小组开发,其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。
wget http://www.lua.org/ftp/lua-5.3.5.tar.gz
cd /usr/local
tar xvf lua-5.3.5.tar.gz
cd lua-5.3.5
make linux test
# lua -v #当前系统版本
Lua 5.1.4 Copyright (C) 1994-2008 Lua.org, PUC-Rio
# pwd csrc/lua-5.3.5
[root@localhost7B lua-5.3.5]# ./src/lua -v #编译安装的版本
Lua 5.3.5 Copyright (C) 1994-2018 Lua.org, PUC-Rio
3、安装依赖包
yum install gcc gcc-c++ glibc glibc-devel pcre pcre-devel openssl openssl-devel systemd-devel zlib-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
4、编译安装
tar xvf haproxy-2.0.4.tar.gz -C /usr/local/src
cd /usr/local/src/haproxy-2.0.4
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/lua-5.3.5/src/ LUA_LIB=/usr/local/lua-5.3.5/src/ PREFIX=/usr/local/haproxy
make install PREFIX=/usr/local/haproxy
ln -sv /usr/local/haproxy/sbin/haproxy /usr/sbin/
5、验证HAProxy版本:
haproxy -v
HA-Proxy version 2.0.4 2019/08/06 - https://haproxy.org/
6、HAProxy启动脚本:cat /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
systemctl daemon-reload
7、创建并设置配置文件:
mkdir /etc/haproxy
cat /etc/haproxy/haproxy.cfg
global
maxconn 100000
chroot /usr/local/haproxy
stats socket /var/lib/haproxy/haproxy.sock mode 600 level admin
uid 99
gid 99
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
listen stats
mode http
bind 0.0.0.0:9999
stats enable
log global
stats uri /haproxy-status
stats auth admin:123456
listen web_port
bind 192.168.80.110:81 #IP地址
mode http
log global
server web1 192.168.80.110:80 check inter 3000 fall 2 rise 5
8、启动haproxy:
mkdir /var/lib/haproxy
chown 99:99 /var/lib/haproxy/ -R
systemctl start haproxy
systemctl enable haproxy
systemctl status haproxy
haproxy.cfg文件中定义了chroot、pidfile、user、group等参数,如果系统没有相应的资源会导致haproxy无法启动,具体参考日志文件/var/log/messages
9、测试
yum install nginx
echo 192.168.80.110 > /usr/share/nginx/html/index.html
[root@localhost7e ~]# curl 192.168.80.110:81
192.168.80.110
原文链接: https://www.cnblogs.com/Yuanbangchen/p/16506237.html
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/190509
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!