haproxy实现反向代理和负载均衡
反向代理服务器功能:web缓存(加速)、反向代理、内容路由(根据流量及内容类型等将请求转发至特定服务器)、转码器
创新互联长期为千余家客户提供的网站建设服务,团队从业经验10年,关注不同地域、不同群体,并针对不同对象提供差异化的产品和服务;打造开放共赢平台,与合作伙伴共同营造健康的互联网生态环境。为浏阳企业提供专业的网站设计制作、网站制作,浏阳网站改版等技术服务。拥有十载丰富建站经验和众多成功案例,为您定制开发。缓存:减少冗余内容传输;节省带宽、缓解网络瓶颈;降低了对原始服务器的请求压力;降低了传输延迟,公共缓存每个人都可以使用,带有敏感数据的私有缓存则只对限定某类或某个人使用
nginx可实现缓存功能,haproxy不能实现缓存功能,这里只说明其反向代理功能和负载均衡功能
yuminstallhaproxy 主配置文件haproxy.cfg 开启日志功能: 编辑/etc/rsyslog.conf文件 $ModLoadimudp $UDPServerRun514#开启udp514端口 local2.*/var/log/haproxy.log 编辑/etc/haproxy/haproxy.cfg文件: log127.0.0.1local2 配置负载均衡后端主机: global log127.0.0.1local2 chroot/var/lib/haproxy pidfile/var/run/haproxy.pid maxconn4000定义面向客户端的总的连接数(面向客户端那一面) userhaproxy grouphaproxy daemon #turnonstatsunixsocket statssocket/var/lib/haproxy/stats #--------------------------------------------------------------------- #mainfrontendwhichproxystothebackends #--------------------------------------------------------------------- frontendmain*:80#第一种方式 #bind*:80#第二种方式 #bind*:8080#只能用于frontend,listen; #maxconn也可以定义在这里或listen后,定义了单个实例的并发连接数,如果在global段定义就是所有实例总的 default_backendwebsrvs #--------------------------------------------------------------------- #roundrobinbalancingbetweenthevariousbackends #--------------------------------------------------------------------- backendwebsrvs balanceroundrobin serverweb1192.168.20.7:80check#定义的名字web1会被加到请求首部发到后端,当后端有虚拟主机时很有用 serverweb2192.168.20.8:80check
balance: 指明调度算法;几种调度算法:
动态:权重可动态调整
静态:调整权重不会实时生效
roundrobin: 轮询,动态算法,每个后端主机最多支持4128个连接;
static-rr: 轮询,静态算法,每个后端主机支持的数量无上限;
leastconn: 根据后端主机的负载数量进行调度;仅适用长连接的会话;动态;
hash-type:
map-based:取模法;静态;
consistent:一致性哈希法;动态;
下面的四种调度算法都基于上面的两种hash-type
source:
uri:对uri的左半部分(?标记之前的部分)或者整个uri做hash,除以后端服务器总权重后绑定到后端服务器
url_param: 根据url中的指定的参数的值进行调度;把值做hash计算,并除以总权重;
hdr(
示例:
backendwebsrvs balancehdr(User-Agent) hash-typeconsistent serverweb1192.168.20.7:80check serverweb2192.168.20.8:80check
测试:
mode: 健康状态检测时基于何种协议
HAProxy的工作模式;默认为tcp;有三种:tcp, http, health
只有客户端和前端,后端都是用http通信才可以使用http模式
在front段也可以指定log:
frontendmain*:80 logglobal log127.0.0.2local3
使用use_backend 和acl定义后段
use_backend dynamic if url_dyn
use_backend static if url_css url_img extension_img
server段后可加的参数:
backup:设定为备用服务器,仅在负载均衡场景中的其它server均不可用于启用此server; check:启动对此server执行健康状态检查,其可以借助于额外的其它参数完成更精细的设定,如: inter
optionhttpchk optionhttpchk
基于浏览器cookie实现session sticky:定义健康检查方式可以使用option:
要点: (1)每个server有自己惟一的cookie标识; (2)在backend中定义为用户请求调度完成后操纵其cookie backendwebsrvs balanceroundrobin cookieSERVERIDinsertnocacheindirect serverweb1192.168.20.7:80checkcookiewebsrv1 serverweb2192.168.20.8:80checkcookiewebsrv2
测试:注意到cookie头部的websrv1关键字了么?
开启统计页面:
listenstatistics bind*:9090 statsenable statshide-version #statsscope. statsuri/haproxyadmin?stats statsrealm"HAPorxyStatistics" statsauthadmin:mageedu statsadminifTRUE
向日志中记录额外信息:
capture request header
capture response header
当mode为http时,记录丰富的日志信息:
option httplog----默认是开启的
错误页面重定向:
errorfile: 使用haproxy主机本地文件进行响应;
errorloc, errorloc302: 使用指定的url进行响应,响应状态码为302;不适用于GET以外的其它请求方法;
errorloc303:返回303状态码;
添加请求或响应报文首部:
reqadd
rspadd
frontendmain bind*:80 bind*:8080 rspaddVia:node1.lee.com default_backendwebsrvs
出现了Via:
动静分离的示例: frontendmain bind*:80 bind*:8080 aclurl_staticpath_beg-i/static/images/javascript/stylesheets aclurl_staticpath_end-i.jpg.gif.png.css.js use_backendstaticifurl_static default_backendappsrvs #--------------------------------------------------------------------- #staticbackendforservingupimages,stylesheetsandsuch #--------------------------------------------------------------------- backendstatic balanceroundrobin serverstatic1192.168.20.7check serverstatic2192.168.20.8check backendappsrvs balanceroundrobin optionforwardforexcept127.0.0.1headerX-Client optionhttpchk cookieSERVERIDinsertindirectnocache serverweb1192.168.20.7:80checkcookieweb1 serverweb2192.168.20.8:80checkcookieweb2
本文标题:haproxy实现反向代理和负载均衡
浏览地址:http://myzitong.com/article/cghisc.html