HAProxy概述
简介
HAProxy提供高可用性、负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费、快速并且可靠的一种解决方案。根据官方数据,其最高极限支持10G的并发。
HAProxy特别适用于那些负载特大的web站点, 这些站点通常又需要会话保持或七层处理。HAProxy运行在当前的硬件上,完全可以支持数以万计的并发连接。并且它的运行模式使得它可以很简单安全的整合进您当前的架构中, 同时可以保护你的web服务器不被暴露到网络上。
其支持从4层至7层的网络交换,即覆盖所有的TCP协议。就是说,Haproxy 甚至还支持 Mysql的均衡负载。
拥有非常不错的服务器健康检查功能还有专门的系统状态监控页面,当其代理的后端服务器出现故障, HAProxy会自动将该服务器摘除,故障恢复后再自动将该服务器加入。
和nginx的异同
相同点:在功能上,Haproxy通过反向代理方式实现 WEB均衡负载。和 Nginx,ApacheProxy,lighttpd,Cheroke 等一样。
不同点:Haproxy 仅仅是一款的用于均衡负载的应用代理。其自身并不能提供web服务。
HAProxy负载均衡算法
source 根据请求源IP
static-rr 根据权重
leastconn 最少连接者先处理
uri 根据请求的uri
url_param 根据请求的url参数
rdp-cookie 据据cookie(name)来锁定并哈希每一次请求
hdr(name) 根据HTTP请求头来锁定每一次HTTP请求
roundrobin 轮询方式
实验流程
结构
基础实验
实验环境:10端作为haproxy服务器,11端作为http1,12端作为http2
11、12http客户端下载httpd,并创建默认网站页面
10服务器端
yum -y install haproxy
vim /etc/haproxy/haproxy.cfg
修改端口和需要轮询的服务器
检测配置文件
haproxy -f /etc/haproxy/haproxy.cfg -c
systemctl start haproxy
netstat -anput | grep haproxy
服务器端curl 本机IP
配置文件详解
#---------------------------------------------------------------------
# Example configuration for a possible web application. See the
# full configuration options online.
#
# http://haproxy.1wt.eu/download/1.4/doc/configuration.txt
#
#---------------------------------------------------------------------
#---------------------------------------------------------------------
# Global settings #全局配置
#---------------------------------------------------------------------
global
# to have these messages end up in /var/log/haproxy.log you will
# need to:
#
# 1) configure syslog to accept network log events. This is done
# by adding the '-r' option to the SYSLOGD_OPTIONS in
# /etc/sysconfig/syslog
#
# 2) configure local2 events to go to the /var/log/haproxy.log
# file. A line like the following can be added to
# /etc/sysconfig/syslog
#
# local2.* /var/log/haproxy.log
#
log 127.0.0.1 local2 #日志文件的输出定向。产生的日志级别为local3. 系统中local1-7,用户自己定义
chroot /var/lib/haproxy
pidfile /var/run/haproxy.pid
maxconn 4000 #最大连接数
user haproxy #用户名
group haproxy #用户组
daemon #以后台形式运行haproxy
# turn on stats unix socket
stats socket /var/lib/haproxy/stats
#---------------------------------------------------------------------
# common defaults that all the 'listen' and 'backend' sections will
# use if not designated in their block
#其他配置段设置默认参数,会覆盖之前的配置。
#---------------------------------------------------------------------
defaults
mode http #工作模式,所处理的类别,默认采用http模式,可配置成tcp作4层消息转发
log global #应用全局的日志配置
option httplog #日志类别,记载http日志
option dontlognull # 启用该项,日志中将不会记录空连接。
option http-server-close #每次请求完毕后主动关闭http通道,haproxy不支持keep-alive,只能模拟这种模式的实现
option forwardfor except 127.0.0.0/8 #如果后端服务器需要获得客户端真实ip需要配置的参数,可以从Http Header中获得客户端ip
option redispatch #当serverid对应的服务器挂掉后,强制定向到其他健康服务器
retries 3 #3次连接失败就认为服务器不可用,主要通过后面的check检查
timeout http-request 10s #http请求超时时间
timeout queue 1m #一个请求在队列里的超时时间
timeout connect 10s #连接超时时间
timeout client 1m #客户端连接超时时间
timeout server 1m #服务器端连接超时时间
timeout http-keep-alive 10s #连接保持
timeout check 10s #检测超时
maxconn 3000 #最大连接数(局部配置)
#---------------------------------------------------------------------
# main frontend which proxys to the backends
# 描述了一组监听的套接字,它们接受客户端连接
#---------------------------------------------------------------------
frontend main *:80 #监听地址为80
acl url_static path_beg -i /static /images /javascript /stylesheets
acl url_static path_end -i .jpg .gif .png .css .js #这里定义了一个acl规则
use_backend static if url_static #如果匹配到了acl,则访问后端的static模块
default_backend app #定义一个名为app前端部分。此处将对应的请求转发给后端
#---------------------------------------------------------------------
# static backend for serving up images, stylesheets and such
#使用了静态动态分离(如果url_path匹配 .jpg .gif .png .css .js静态文件则访问此后端)
#---------------------------------------------------------------------
backend static
balance roundrobin
server static 127.0.0.1:80 check #静态文件部署在本机(也可以部署在其他机器或者squid缓存服务器)
#---------------------------------------------------------------------
# round robin balancing between the various backends
#---------------------------------------------------------------------
backend app #定义一个名为app后端部分,需要与frontend里面配置项default_backend 值相一致
balance roundrobin
server app1 192.168.1.11:80 weight 1 check #默认为wrr算法,默认权重为1:1
server app2 192.168.1.12:80 weight 2 check
# server web03 172.31.2.35:80 check inter 2000 fall 3 weight 30 #定义的多个后端
haproxy健康检测
选项
server node1 192.168.179.131:8081 check inter 2000 rise 3 fall 3 weight 30
check:启动健康检测
inter 2000 健康检查时间间隔2秒
rise 3 检测多少次才认为是正常的
fall 3 失败多少次才认为是不可用的
weight 30 权重
发布者:LJH,转发请注明出处:https://www.ljh.cool/6087.html