HaProxy介绍和安装
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