haproxy配置文件详解
Haproxy 仅仅,而且专门是一款的用于均衡负载的应用代理。其自身并不 能提供 http 服务。
但其配置简单,拥有非常不错的服务器健康检查功能还有专门的系统状态监控页面,当 其代理的后端服务器出现故障, HAProxy 会自动将该服务器摘除,故障恢复后再自动将 该服务器加入。自 1.3 版本开始还引入了 frontend,backend,frontend 根据任意 HTTP 请求 头内容做规则匹配,然后把请求定向到相关的 backend。 另外, 版本 1.3 是处于活跃开发阶段的版本, 它支持如下新特性: 内容交换 : 可以根据请求(request)的任何一部分 来选择一组服务器, 比如请求 的 URI , Host 头(header) , cookie , 以及其他任何东西. 当然,对那些静态分离的站点来 说,对此特性还有更多的需求。 全透明代理 : 可以用 客户端 IP 地址 或者任何其他地址来连接后端服务器. 这个特 性仅在 Linux 2.4/2.6 内核打了 cttproxy 补丁后才可以使用. 这个特性也使得为某特殊服务
连接拒绝 : 因为维护一个连接的打开的开销是很低的,有时我们很需要限制攻击蠕 虫(attack bots),也就是说限制它们的连接打开从而限制它们的危害。 这个已经为一个陷 于小型 DDoS 攻击的网站开发了而且已经拯救了很多站点。
细微的头部处理 : 使得编写基于 header 的规则更为简单,同时可以处理 URI 的某 部分。
HAProxy 特别适用于那些负载特大的 web 站点, 这些站点通常又需要会话保持或七层 处理。HAProxy 运行在当前的硬件上,完全可以支持数以万计的并发连接。并且它的运 行模式使得它可以很简单安全的整合进您当前的架构中, 同时可以保护你的 web 服务器 不被暴露到网络上。
其支持从 4 层至 7 层的网络交换,即覆盖所有的 TCP 协议。就是说, Haproxy 甚至还支持 Mysql 的均衡负载。。 如果说在功能上,能以 proxy 反向代理方式实现 WEB 均衡负载,这样的 产品有很多。包括 Nginx,ApacheProxy,lighttpd,Cheroke 等。 但要明确一点的,Haproxy 并不是 Http 服务器。以上提到所有带反向代理 均衡负载的产品,都清一色是 WEB 服务器。简单说,就是他们能自个儿 提供静态(html,jpg,gif..)或动态(php,cgi..)文件的传输以及处理。而
访问
contimeout 5000
#连接超时时间
clitimeout 50000
#客户端连接超时时间
srvtimeout 50000
#服务器端连接超时时间
listen app-balancer 0.0.0.0:80 mode http
# log 127.0.0.1 local3 #cookie ServerID insert nocache cookie ServerID prefix cookie JSESSIONID prefix capture request header Cookie len 200 capture request header X-Forwarded-For len 15 capture request header Host len 15 capture request header Referrer len 15 appsession JSESSIONID len 52 timeout 1080000 balance roundrobin option httpchk GET /ok.jsp HTTP/1.0 #健康检查
投机 I/O 处理 : 在一个套接字就绪前就尝试从它读取数据。poller 仅推测哪个可能 就绪哪个没有,尝试猜测,并且如果成功,一些开销很大的系统调用就可以省去了。如 果失败,就会调用这些系统调用。已知的使用 Linux epoll()已经净提升起码 10%了。
ACLs : 使用任意规则的任意组合作为某动作的执行条件。
HAproxy 均衡负载部署和配置文件详解
发表于 2 年前(2011-11-15 18:11) 阅读(3436) | 评论(0) 8 人收藏此文章, 我要收藏
赞0
HAproxy 均衡负载部署和配置文件详解 HAProxy 提供高可用性、负载均衡以及基于 TCP 和 HTTP 应用的代理,支持虚拟主机, 它是免费、快速并且可靠的一种解决方案。根据官方数据,其最高极限支持 10G 的并 发。
#日志类别,采用 httplog
option httpclose #每次请求完毕后主动关闭 http 通道,ha-proxy 不支持 keep-alive,只能模拟
这种模式的实现
option dontlognull option forwardfor #如果后端服务器需要获得客户端真实 ip 需要配置的参数,可以从 Http Header 中获得客户端 ip
TCP 协议检查 : 结合 ACL 来对请求的任意部分进行检查,然后再进行转发。这就 可以执行协议验证而不是盲目的进行转发。比如说允许 SSL 但拒绝 SSH。
更多的负载均衡算法 : 现在,动态加权轮循(Dynamic Round Robin), 加权源地址哈希(Weighted Source Hash),加权 URL 哈希和加权参数哈希 (Weighted Parameter Hash)已经实现。其他算法比如 Weighted Measured Response Time 也很快会实现。
maxconn 4096
#最大连接数
chroot /usr/local/haproxy #改变当前工作目录
uid 99
#所属运行的用户 uid
ቤተ መጻሕፍቲ ባይዱgid 99
#所属运行的用户组
daemon
#以后台形式运行 ha-proxy
nbproc 3
#启动 2 个 ha-proxy 实例
pidfile /usr/local/haproxy/run/haproxy.pid #pid 文件位置
安装:
1、从官网 http://haproxy.1wt.eu/#down 下载最新版本,如 haproxy-
1.4.16.tar.gz
2、解压缩, # tar zcvf haproxy-1.4.16.tar.gz 建议移动到工作目
录 /usr/local/haproxy/ 下,否则后续安装时还要用 PREFIX=/usr/local/haprpxy 指定安
配置: # vi haproxy.cfg
配置内容如下:
global
#全局设置
log 127.0.0.1 local0 #日志输出配置,所有日志都记录在本机,通过 local0 输出
#log 127.0.0.1 local1 notice
#log loghost local0 info ulimit-n 82000 #设置每个进程的可用的最大文件描述符
server app_1 192.168.0.243:8080 cookie app1 minconn 100 maxconn 40960 check inter 5000 rise 2 fall 5 weight 2
server app_2 192.168.0.242:8080 cookie app2 minconn 100 maxconn 40960 check inter 2000 rise 2 fall 5 weight 2
运行:
启动服务: # /usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/haproxy.cfg 重启服务: # /usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/haproxy.cfg -st `cat /usr/local/haproxy/logs/haproxy.pid` (没有换行) 停止服务: # killall haproxy 当然,为了方便系统在开机时加载,还可以创建启动脚本: # vim /etc/rc.d/init.d/haproxy 内容如下: #! /bin/sh set -e
option redispatch retries 2
#3 次连接失败就认为服务器不可用,主要通过后面的 check 检
查
maxconn 2000
#最大连接数
balance roundrobin
#负载均衡算法
stats uri /haproxy-stats
#haproxy 监控页面的访问地址,可通过 http://ip/haproxy-stats
stop() {
echo -n "Stopping $DESC: $PROGNAME" haproxy_pid=cat $PIDFILE kill $haproxy_pid echo "." }
装路径
3、运行 make install 即完成安装
程序为 /usr/local/haproxy 或 /usr/local/sbin/haproxy, 运行程序
haproxy,显示版本信息即说明安装成功
文档在/usr/local/doc/haproxy 下
2,haproxy的配置文件说明
2,haproxy的配置⽂件说明实验环境也很简单:HAProxy IP:192.168.4.192 Centos5.5-64bitWeb1 IP:192.168.4.45 Centos5.4-64bitWeb2 IP:192.168.21.45 FreeBSD8.0-64bithaproxy 的⽇志需要⾃⼰去rsyslog.conf 配置1 haproxy.cfg配置⽂件下⾯只是写了部分需要记住的配置:global log 127.0.0.1:514 local0 info # local3是指接收设备,指定使⽤127.0.0.1:514的syslog服务中的local0⽇志设备,514是指syslog chroot /application/haproxy-1.8.4/var/chroot #出现漏洞,这个会起到安全防护作⽤ pidfile /var/run/haproxy.pid #存放启动进程的进程号 user haproxy #设置服务运⾏的⽤户和组 group haproxy daemon #守护进程运⾏ maxconn 20480 #定义每个进程的最⼤连接数listen www 10.0.0.7:80 #www监听的名字,第⼆个为监听的ip和端⼝ mode http #模式 stats enable #激活webjiemian stats uri /admin?stats #web界⾯的uri stats auth proxy:oldboy #⽤户和密码 server www01 10.0.0.9:80 check server www02 10.0.0.80:80 check# ⼀个listen 就把他看做是⼀个虚拟主机。
Haproxy配置项及配置实例-Haproxy入门教程
Haproxy配置项及配置实例-Haproxy⼊门教程常⽤配置选项:OPTION 选项:option httpclose :HAProxy会针对客户端的第⼀条请求的返回添加cookie并返回给客户端,客户端发送后续请求时会发送此cookie到HAProxy,HAProxy会针对此cookie分发到上次处理此请求的服务器上,如果服务器不能忽略此cookie值会影响处理结果。
如果避免这种情况配置此选项,防⽌产⽣多余的cookie信息。
option forwardfor :如果服务器上的应⽤程序想记录发起请求的客户端的IP地址,需要在HAProxy上配置此选项,这样HAProxy会把客户端的IP信息发送给服务器,在HTTP请求中添加"X-Forwarded-For"字段。
option originalto :如果服务器上的应⽤程序想记录发起请求的原⽬的IP地址,需要在HAProxy上配置此选项,这样HAProxy 会添加"X-Original-To"字段。
option dontlognull :保证HAProxy不记录上级负载均衡发送过来的⽤于检测状态没有数据的⼼跳包。
BALANCE 选项:balance source :如果想让HAProxy按照客户端的IP地址进⾏负载均衡策略,即同⼀IP地址的所有请求都发送到同⼀服务器时,需要配置此选项。
balance roundrobin :HAProxy把请求轮流的转发到每⼀个服务器上,依据每台服务器的权重,此权重会动态调整。
最常见的默认配置。
COOKIE 选项:cookie JSESSIONID prefix :如果客户端只⽀持⼀个cookie,并且服务器上的应⽤程序已经对返回设置了cookie,HAProxy设置此选项可以改写应⽤程序设置的cookie信息,把服务器的信息添加到原cookie中去。
cookie SERVERID indirect :HAProxy会删除添加的cookie信息,避免此cookie信息发送到服务器。
haproxy参数
haproxy参数HAProxy是一款高性能、开源的负载均衡软件,支持TCP和HTTP 应用场景,它能够快速并且可靠地转发请求,将负载分散到多个服务器上,从而提高整体性能和可用性。
在使用HAProxy的过程中,不同的场景和需求需要使用不同的参数进行配置。
本文将从HAProxy的各个参数维度介绍相关的配置参数。
一、全局配置参数全局配置参数是一些全局的设置,包括进程数、用户账户、日志等级等,这些设置会影响整个HAProxy的行为。
具体的参数如下:1. daemon:设为1后HAProxy将在后台运行;2. nbproc:指定HAProxy使用的进程数;3. user/group:指定HAProxy运行的用户账号和组;4. chroot:指定HAProxy的chroot目录;5. log:指定运行HAProxy时的日志级别;6. maxconn:指定HAProxy对客户端的最大连接数;7. pidfile:指定HAProxy的pid文件;8. ulimit-n:指定HAProxy进程的最大打开文件数;9. stats socket:该参数允许您通过UNIX或TCP套接字控制HAProxy的运行。
二、默认配置参数所有frontend和backend的配置信息都可以包含在默认部分中。
这些信息在frontend或backend部分没有特别声明的情况下将应用于所有的部分。
默认配置参数还包括全局的一些设置(如timeout等)。
具体的参数如下:1. timeout connect:指定建立与后端服务器连接的超时时间;2. timeout client:指定客户端连接的超时时间;3. timeout server:指定从服务器接收数据的超时时间;4. timeout http-request:指定HTTP请求的超时时间;5. timeout http-keep-alive:指定HTTP keep-alive持续时间;6. timeout check:指定后端服务器健康检查的超时时间。
HAProxy配置文件详解
HAProxy配置⽂件详解⼀、HAProxy简介1.HAProxy 是⼀款提供⾼可⽤性、负载均衡以及基于TCP(第四层)和HTTP(第七层)应⽤的代理软件,⽀持虚拟主机,它是免费、快速并且可靠的⼀种解决⽅案。
2.HAProxy 实现了⼀种事件驱动、单⼀进程模型,此模型⽀持⾮常⼤的并发连接数。
3.HAProxy ⽀持全透明代理(已具备硬件防⽕墙的典型特点): 可以⽤客户端IP地址或者任何其他地址来连接后端服务器. 这个特性仅在Linux 2.4/2.6内核打了cttproxy补丁后才可以使⽤. 这个特性也使得为某特殊服务器处理部分流量同时⼜不修改服务⼆、HAProxy⼯作原理HAProxy由前端(frontend)和后端(backend),前端和后端都可以有多个。
也可以只有⼀个listen块来同时实现前端和后端。
这⾥主要讲⼀下frontend和backend⼯作模式。
前端(frontend)区域可以根据HTTP请求的header信息来定义⼀些规则,然后将符合某规则的请求转发到相应后端(backend)进⾏处理。
三、HAProxy性能HAProxy借助于OS上⼏种常见的技术来实现性能的最⼤化,所有的这些细微之处的优化实现了在中等规模负载之上依然有着相当低的CPU负载,甚⾄于在⾮常⾼的负载场景中,5%的⽤户空间占⽤率和95%的系统空间占⽤率也是⾮常普遍的现象,这意味着HAProxy进程消耗⽐系统空间消耗低20倍以上。
因此,对OS进⾏性能调优是⾮常重要的。
即使⽤户空间的占⽤率提⾼⼀倍,其CPU占⽤率也仅为10%,这也解释了为何7层处理对性能影响有限这⼀现象。
由此,在⾼端系统上HAProxy的7层性能可轻易超过硬件负载均衡设备。
在⽣产环境中,在7层处理上使⽤HAProxy作为昂贵的⾼端硬件负载均衡设备故障故障时的紧急解决⽅案也时长可见。
硬件负载均衡设备在“报⽂”级别处理请求,这在⽀持跨报⽂请求(request across multiple packets)有着较⾼的难度,并且它们不缓冲任何数据,因此有着较长的响应时间。
HAProxy详解
HAProxy详解1. HAProxy概述1.1 HAProxy简介HAProxy提供负载均衡以及基于TCP和HTTP应⽤的代理HAProxy只是http协议的反向代理,不提供缓存功能,但额外⽀持对tcp层对基于tcp通信的应⽤做LBhttp协议的反向代理tcp层的LBHAProxy的特性:HAProxy实现了⼀种事件驱动、单⼀进程模型,此模型⽀持⾮常⼤的并发连接数HAProxy中保存了数据的数据结构为弹性⼆叉树结构代理服务器的调度算法:取模法⼀致性哈希算法LB负载均衡器:TCP:lvs,haproxy,nginxapplication layer:http:haproxy,nginx,ats,apachemysql:mysql-proxy1.2 HAProxy性能上的优势单进程、事件驱动模型显著降低了上下⽂切换的开销及内存占⽤O(1)事件检查器(event check)允许其在⾼并发连接中对任何连接的任何时间实现即时探测在任何可⽤的情况下,单缓冲(single buffering)机制能以不复制任何数据的⽅式完成读写操作,这会节约⼤量的CPU时钟周期及内存带宽借助于Linux 2.6 (>= 2.6.27.19)上的splice()系统调⽤,HAProxy可以实现零复制转发(Zero-copy forwarding)在Linux 3.5及以上的OS中还可以实现零复制启动(zero-starting)内存分配器在固定⼤⼩的内存池中可以实现即时内存分配,这能够显著减少创建⼀个会话的时长树型存储:侧重于使⽤弹性⼆叉树,实现了以O(log(N))的低开销来保持计数器命令、保持运⾏队列命令及管理轮询及最少连接队列优化的HTTP⾸部分析:优化的⾸部分析功能避免了在HTTP⾸部分析过程中重读任何内存区域精⼼地降低了昂贵的系统调⽤,⼤部分⼯作都在⽤户空间完成,如时间读取、缓冲聚合及⽂件描述符的启⽤和禁⽤等1.3 负载均衡器的性能评估1. 会话率:会话建⽴的速率2. 会话并发能⼒:整体服务器的会话并发能⼒3. 数据率:在所有会话上数据传输速率1.4 正向代理与反向代理正向代理中,proxy和client同属⼀个LAN,对server透明反向代理中,proxy和server同属⼀个LAN,对client透明1.5 代理和缓存的作⽤代理的作⽤:web缓存(加速)、反向代理、内存路由(根据流量及内容类型等将请求转发⾄特定服务器)、转码器有些CDN会在代理服务器上添加Via⾸部缓存的作⽤:减少冗余内容传输节省带宽、缓解⽹络瓶颈降低了对原始服务器的请求压⼒降低了传输延迟2. HAProxy配置⽂件详解2.1 配置⽂件格式2.1.1 配置⽂件配置⽂件:/etc/haproxy/haproxy.cfg主程序:/usr/sbin/haproxyHAProxy的配置处理3类来主要参数来源:最优先处理的命令⾏参数,global配置段,⽤于设定全局配置参数proxy相关配置段,如“defaults”、“listen”、“frontend”和“backend”2.1.2 简单的配置格式:frontend # 前端,指明它要监听在某个地址的某个端⼝上,能够接受客户端的请求的use_backend # 指明所调⽤的后端组default_backend # 指明的默认的后端组backend # 后端,定义后端服务器组balance # 指定调度算法server # 指定主机serverlisten:# 指明监听的地址和端⼝server # 然后直接指明地址default # 默认的2.1.3 简单的配置⽰例配置⼀个监听在所有接⼝的80端⼝上HTTP Proxy服务,它转发所有的请求⾄后端监听在127.0.0.1:8000上的"server" globaldaemonmaxconn 25600defaultsmode httptimeout connect 5000mstimeout client 50000mstimeout server 50000msfrontend http-inbind *:80 # 监听在80端⼝上default_backend servers # 默认转发到后端的servers组内backend servers # 定义后端的servers组server server1 127.0.0.1:8080 maxconn 322.2 global配置内容详解2.2.1 简单的global配置# 这⾥⽇志只是转交给本地的local2设备,要在rsyslog中添加上local2的设备条⽬,记录到指定的⽂件中log 127.0.0.1 local2chroot /var/lib/haproxy # 切换根⽬录,haproxy是被切换到这个⽬录下以安全模式运⾏的pidfile /var/run/haproxy.pid # pid⽂件的保存位置maxconn 4000 # 最⼤连接数,这⾥⽐较保守,可以按需调整user haproxy # 进程启动时以haproxy⽤户的⾝份运⾏group haproxydaemon # 启动为守护进程# turn on stats unix socketstats socket /var/lib/haproxy/stats # 本地访问统计数据时可以基于共享内存的⽅式进程通信注意:记录⽇志时,要开启rsyslog服务,开启514/tcp和514/udp端⼝然后要加上对应设备的条⽬,以记录⽇志到指定的⽂件中:local2.* /var/log/haproxy.log2.2.2 global配置进阶进程管理及安全相关的参数:chroot <dir>修改haproxy的⼯作⽬录⾄指定的⽬录在放弃权限之前执⾏chroot()操作,可以提升haproxy的安全级别要确保指定的⽬录为空⽬录且任何⽤户均不能有写权限daemon:让haproxy以守护进程的⽅式⼯作于后台log <address> <facility> [max level [min level]]定义全局的syslog服务器,最多可以定义两个nbproc:指定启动的haproxy进程的个数,只能⽤于守护进程模式的haproxy默认只启动⼀个进程,鉴于调试困难等多⽅⾯的原因,⼀般只在单进程仅能打开少数⽂件描述符的场景中才使⽤多进程模式ulimit-n:设定每进程所能够打开的最⼤⽂件描述符数⽬,默认情况下其会⾃动进⾏计算,因此不推荐修改此选项性能调整相关的参数:maxconn <number>设定每个haproxy进程所接受的最⼤并发连接数,其等同于命令⾏选项 “-n”“ulimit -n” ⾃动计算的结果正是参照此参数设定的spread-checks <0..50, in percent>在haproxy后端有着众多服务器的场景中,在精确的时间间隔后统⼀对众服务器进⾏健康状况检查可能会带来意外问题此选项⽤于将其检查的时间间隔长度上增加或减⼩⼀定的随机时长0到50是百分⽐,可以选择向前百分之五⼗或者向后百分之五⼗2.3 代理配置详解代理相关的配置可以如下配置段中defaults <name>“defaults”段⽤于为所有其它配置段提供默认参数,这配置默认配置参数可由下⼀个“defaults”所重新设定frontend <name>“frontend”段⽤于定义⼀系列监听的套接字,这些套接字可接受客户端请求并与之建⽴连接backend <name>“backend”段⽤于定义⼀系列“后端”服务器,代理将会将对应客户端的请求转发⾄这些服务器listen <name>“listen”段通过关联“前端”和“后端”定义了⼀个完整的代理,通常只对TCP流量有⽤Fronted和backend的组合体,⽐如haproxy实例状态监控部分配置组合的⽅式直接定义frontend及相关的backend代理名称的使⽤规则:所有代理的名称只能使⽤⼤写字母、⼩写字母、数字、-(中线)、_(下划线)、.(点号)和:(冒号)ACL名称会区分字母⼤⼩写3. HAProxy配置⽂件中的关键字详解3.1 balance3.1.1 ⽤法balance <algorithm> [ <arguments> ]balance url_param <param> [check_post [<max_wait>]]3.1.2 作⽤定义负载均衡算法,可⽤于“defaults”、“listen”和“backend”<algorithm>⽤于在负载均衡场景中挑选⼀个server其仅应⽤于持久信息不可⽤的条件下或需要将⼀个连接重新派发⾄另⼀个服务器时指明调度算法:动态:权重可动态调整静态:调整权重不会实时⽣效3.1.3 ⽀持的算法roundrobin:动态基于权重进⾏轮询,动态算法,权重可以在运⾏时进⾏调整每个后端主机最多⽀持4128个连接static-rr:静态基于权重进⾏轮询,静态算法,在运⾏时调整其服务器权重不会⽣效每个后端主机⽀持的数量⽆上限leastconn:动态新的连接请求被被派发⾄具有最少连接数⽬的后端服务器较长时间会话的场景中推荐此算法,如LDAP,SQL等其不适⽤于较短会话的应⽤层协议,如HTTPsource:将请求的源地址进⾏hash运算,并由后端服务器的权重总数相除后发⾄某匹配的服务器这可以使得同⼀个客户端IP的请求始终被发派⾄特定的服务器但当服务器权重总数发⽣变化时,如果某服务器宕机,许多客户端的请求可能会被派发⾄与此前请求不同的服务器常⽤于负载均衡⽆cookie功能的基于TCP的协议其默认为静态,不过也可以使⽤hash-type修改此特性,hash-type如果是map-based则就是静态的,consistent则为动态使⽤⽰例:balance sourceserver web1 172.16.100.68:80 check weight 1server web2 172.16.100.69:80 check weight 3uri:对URI的左半部分或整个URI进⾏hash运算,并由服务器的总权重相除后派发⾄某匹配的服务器这可以使得对同⼀个URI的请求总是被派发⾄特定的服务器,除⾮服务器的权重总数发⽣了变化此算法常⽤于代理缓存或反病毒代理以提⾼缓存的命中率此算法仅应⽤于HTTP后端服务器场景其默认为静态算法,不过也可以使⽤hash-type修改此特性使⽤⽰例:balance urihash-type consistenturl_param:通过argument为Url指定的参数在每个HTTP GET请求中将会被检索如果找到了指定的参数且被赋予了⼀个值,那么此值将被执⾏hash运算并被服务器的总权重相除后派发⾄匹配的服务器在url中添加⼀个参数,然后把url中的url_param指定的那个参数的值做hash运算,并处除以总权重此算法可以通过追踪请求中的⽤户标识进⽽确保同⼀个⽤户ID的请求将被送往同⼀个特定的服务器,除⾮服务器的总权重发⽣了变化如果某请求中没有出现指定的参数或其没有有效值,则使⽤轮叫算法对相应请求进⾏调度此算法默认为静态的,不过可以使⽤hash-type修改此特性hdr(<name>):对于每个HTTP请求,通过<name>指定的HTTP⾸部将会被检索(根据请求报⽂中指定的http⾸部的值来进⾏调度,把指定的header的值做hash计算)如果相应的⾸部没有出现或其没有有效值,则使⽤轮叫算法对相应的请求进⾏调度此算法默认为静态的,不过其也可以⽤hash-type修改此特性使⽤⽰例:balance hdr(User-Agent)hash-type consistent3.2 hash-type3.2.1 ⽤法hash-type <method>3.2.2 作⽤定义⽤于将hash码映射⾄后端服务器的⽅法其不能⽤于frontend区段可⽤的⽅法有map-based和consistent,在⼤多数场景下推荐使⽤默认的map-based⽅法3.2.3 可⽤的⽅法map-based:(其实就是取模算法)hash表是⼀个包含了所有在线服务器的静态数组。
HAProxy日志输出及配置
HAProxy⽇志输出及配置正所谓,没有软件敢说没有bug,⼈⽆完⼈,software is not perfect software。
是软件就可能存在bug,那么如果出现bug,我们就要分析对我们业务的影响及可能如何避免bug的再现。
HAProxy也不例外,也可能在特殊场景下出现bug,因此我们就有必要记录下必要的⽇志信息。
今天来聊下HAProxy的⽇志输出及对应参数配置。
HAProxy⽀持两种主要的代理模式:"tcp"也即4层(⼤多⽤于邮件服务器、内部协议通信服务器等),和7层(HTTP)。
在4层模式下,HAproxy仅在客户端和服务器之间转发双向流量。
7层模式下,HAProxy会分析协议,并且能通过允许、拒绝、交换、增加、修改或者删除请求 (request)或者回应(response)⾥指定内容来控制协议,这种操作要基于特定规则。
说到四层模式及七层模式,我们就要回忆下,在RabbitMQ集群搭建过程中,有没有使⽤到四层模式呢?答案是有的,使⽤TCP协议进⾏双向的通信代理使⽤的就是四层协议。
HAProxy配置⽂件可以分为五部分,在上次RabbitMQ集群搭建也简单聊了下,1global: 全局配置参数段,主要⽤来控制Haproxy启动前的进程及系统相关设置2 defaults: 配置⼀些默认参数,如果frontend,backend,listen等段未设置则使⽤defaults段设置3 listen:监听配置4 frontend: ⽤来匹配接收客户所请求的域名,uri等,并针对不同的匹配,做不同的请求处理5 backend: 定义后端服务器集群,以及对后端服务器的⼀些权重、队列、连接数等选项的设置HAProxy的安装我们不再介绍,在安装完毕以后,进⾏的⽇志输出配置:根据实际需求,更改配置⽂件,我的配置如下global #全局设置log 127.0.0.1 local3 #local3是设备,对应于 /etc/rsyslog.conf中的配置,默认回收info的⽇志级别#log loghost local0 infomaxconn 4096 #最⼤连接数chroot /usr/local/haproxyuid 99 #所属运⾏的⽤户uidgid 99 #所属运⾏的⽤户组daemon #以后台形式运⾏haproxynbproc 2 #启动2个haproxy实例pidfile /usr/local/haproxy/haproxy.pid #将所有进程写⼊pid⽂件#debug#quiet defaults #默认设置#log globallog 127.0.0.1 local3 #⽇志⽂件的输出定向mode http #默认的模式mode { tcp|http|health },tcp是4层,http是7层,health只会返回OKoption httplog #⽇志类别,采⽤httplogoption dontlognulloption forwardfor #如果后端服务器需要获得客户端真实ip需要配置的参数,可以从Http Header中获得客户端ipoption httpclose #每次请求完毕后主动关闭http通道,haproxy不⽀持keep-alive,只能模拟这种模式的实现retries 3 #3次连接失败就认为服务器不可⽤,主要通过后⾯的check检查option redispatch #当serverid对应的服务器挂掉后,强制定向到其他健康服务器maxconn 2000 #最⼤连接数stats uri /stats #haproxy 监控页⾯的访问地址 浏览器中输⼊haproxy监控地址:http://10.10.100.39/stats查看状态contimeout 5000 #连接超时时间clitimeout 50000 #客户端连接超时时间srvtimeout 50000 #服务器端连接超时时间stats auth admin:admin #设置监控页⾯的⽤户和密码:Frankstats hide-version #隐藏统计页⾯的HAproxy版本信息frontend http-in #前台bind *:80mode httpoption httploglog globalacl web1 hdr(host) -i #acl后⾯是规则名称,-i是要访问的域名,如果访问 这个域名就分发到下⾯的webserver1 的作⽤域。
HAproxy均衡负载部署和配置文件详解
HAproxy均衡负载部署和配置文件详解HAproxy均衡负载部署和配置文件详解HAProxy提供高可用性、负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费、快速并且可靠的一种解决方案。
根据官方数据,其最高极限支持10G 的并发。
HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要会话保持或七层处理。
HAProxy运行在当前的硬件上,完全可以支持数以万计的并发连接。
并且它的运行模式使得它可以很简单安全的整合进您当前的架构中,同时可以保护你的web服务器不被暴露到网络上。
其支持从4层至7层的网络交换,即覆盖所有的TCP协议。
就是说,Haproxy甚至还支持Mysql 的均衡负载。
如果说在功能上,能以proxy反向代理方式实现WEB均衡负载,这样的产品有很多。
包括Nginx,ApacheProxy,lighttpd,Cheroke 等。
但要明确一点的,Haproxy 并不是Http 服务器。
以上提到所有带反向代理均衡负载的产品,都清一色是WEB 服务器。
简单说,就是他们能自个儿提供静态(html,jpg,gif..)或动态(php,cgi..)文件的传输以及处理。
而Haproxy 仅仅,而且专门是一款的用于均衡负载的应用代理。
其自身并不能提供http服务。
但其配置简单,拥有非常不错的服务器健康检查功能还有专门的系统状态监控页面,当其代理的后端服务器出现故障, HAProxy会自动将该服务器摘除,故障恢复后再自动将该服务器加入。
自1.3版本开始还引入了frontend,backend,frontend根据任意HTTP 请求头内容做规则匹配,然后把请求定向到相关的backend。
另外, 版本1.3 是处于活跃开发阶段的版本, 它支持如下新特性:●内容交换: 可以根据请求(request)的任何一部分来选择一组服务器, 比如请求的URI , Host头(header) , cookie , 以及其他任何东西.当然,对那些静态分离的站点来说,对此特性还有更多的需求。
HA绝大部分配置解析及示例
bind 192.168.10.9:80 mode http option forwardfor server web1 192.168.10.10:8080 check inter 3000 fall 3 rise 5 server web2 192.168.10.11:8080 check inter 3000 fall 3 rise 5
liten http_https_proxy #https监听 bind :80 bind :443 ssl crt /etc/haproxy/site.pem
listen http_https_proxy_explicit #监听ipv6、 ipv4和unix sock文件 bind ipv6@:80 bind ipv4@public_ssl:443 ssl crt /etc/haproxy/site.pem bind unix@ssl-frontend.sock user root mode 600 accept-proxy
listen external_bind_app1 #监听file descriptor bind "fd@${FD_APP1}"
backend web_prot_http_nodes mode http option forwardfor server 192.168.10.10:8080 check inter 3000 fall 3 rise 5 server 192.168.10.11:8080 check inter 3000 fall 3 rise 5
一致性hash: 该hash是动态的,支持在线调整权重,支持慢启动,优点在于当服务器的总权重发生变化时,对调度 结果影响是局部的,不会引起大的变动hash(o)modn listen web_host bind 192.168.10.9:80,:8801-8810,192.168.10.8:9001-9010 mode tcp
haproxy负载均衡配置文档剖析
基于haproxy的反向代理和负载均衡1 安装方法一:Centos下使用root权限,使用指令: yum install haproxy.x86_64安装完成后程序位置:/usr/sbin/, 配置文件位置: /etc/haproxy/方法二:下载.gz压缩包, 解压, make && make install (暂时无测试)2 配置以root权限打开/etc/haproxy/haproxy.cfg默认配置文件已有模板, 简单改动即可实现代理和均衡前端配置注释掉所有静态相关的配置(因为现在没有动静分离).Balance: 有roundrobin(轮询), source(ip哈希), weight(权重), url(网址)等, 更多的均衡方法请查看官方手册.Cookie: 设置cookie保持, 有rewrite, insert, prefix等, 具体说明请查看附录说明.Server: 设置后端服务器ip, cookie:设置cookie对应的server, check: 后端检查, weight: 权重设置.附录I1 cookiecookie <name> [ rewrite | insert | prefix ] [ indirect ] [ nocache ][ postonly ] [ preserve ] [ domain <domain> ]*[ maxidle <idle> ] [ maxlife <life> ]sections :defaults | frontend | listen | backendyes|no|yes|yesArguments :<name> cookie的名称,用于持久性的监视、修改和增加。
cookie在response中通过"Set-Cookie"头发送给客户端,并由客户端的所有request的"Cookie"头返回。
haproxy解析
- all those with a return code other than 200, 203, 206, 300, 301, 410,
provided that the server has not set a "Cache-control: public" header ;
option dontlognull 记录空连接
option forceclose 允许关闭session 在后端把response 发送后
option forwardfor [ except <network> ] [ header <name> ] 允许在request 中加入X-Forwarded-For header 发往server
Example:
acl nagios src 192.168.129.3
acl local_net src 192.168.0.0/16
acl auth_ok http_auth(L1)
http-request allow if nagios
http-request allow if local_net auth_ok
tune.sndbuf.server <number>
以上凭字面理解吧
debug 调试模式,输出启动信息到标准输出
quiet 安装模式,启动时无输出
二:defaults 块
作用于其后紧跟的listen块,直至下一个defaults 块,下一个default 将替换上一个块作用于以后的listen
