博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
haproxy实现反向代理和负载均衡
阅读量:5939 次
发布时间:2019-06-19

本文共 5466 字,大约阅读时间需要 18 分钟。

hot3.png

反向代理服务器功能:web缓存(加速)、反向代理、内容路由(根据流量及内容类型等将请求转发至特定服务器)、转码器

缓存:减少冗余内容传输;节省带宽、缓解网络瓶颈;降低了对原始服务器的请求压力;降低了传输延迟,公共缓存每个人都可以使用,带有敏感数据的私有缓存则只对限定某类或某个人使用

nginx可实现缓存功能,haproxy不能实现缓存功能,这里只说明其反向代理功能和负载均衡功能

yum install haproxy主配置文件haproxy.cfg开启日志功能:编辑/etc/rsyslog.conf文件$ModLoad imudp$UDPServerRun 514  #开启udp514端口local2.*                                                /var/log/haproxy.log编辑/etc/haproxy/haproxy.cfg文件:log         127.0.0.1 local2配置负载均衡后端主机:global    log         127.0.0.1 local2    chroot      /var/lib/haproxy    pidfile     /var/run/haproxy.pid    maxconn     4000  定义面向客户端的总的最大连接数(面向客户端那一面)    user        haproxy    group       haproxy    daemon    # turn on stats unix socket    stats socket /var/lib/haproxy/stats#---------------------------------------------------------------------# main frontend which proxys to the backends#---------------------------------------------------------------------frontend  main *:80  #第一种方式#        bind *:80    #第二种方式#        bind *:8080    #只能用于frontend, listen; #        maxconn  也可以定义在这里或listen后,定义了单个实例的最大并发连接数,如果在global段定义就是所有实例总的   default_backend             websrvs#---------------------------------------------------------------------# round robin balancing between the various backends#---------------------------------------------------------------------backend websrvs    balance     roundrobin    server  web1 192.168.20.7:80 check #定义的名字web1会被加到请求首部发到后端,当后端有虚拟主机时很有用    server  web2 192.168.20.8:80 check

balance: 指明调度算法;几种调度算法:

    动态:权重可动态调整

    静态:调整权重不会实时生效
        roundrobin: 轮询,动态算法,每个后端主机最多支持4128个连接;
        static-rr: 轮询,静态算法,每个后端主机支持的数量无上限;
        leastconn: 根据后端主机的负载数量进行调度;仅适用长连接的会话;动态;
hash-type:
    map-based:取模法;静态;
    consistent:一致性哈希法;动态;

下面的四种调度算法都基于上面的两种hash-type

        source:

        uri:对uri的左半部分(?标记之前的部分)或者整个uri做hash,除以后端服务器总权重后绑定到后端服务器
        url_param: 根据url中的指定的参数的值进行调度;把值做hash计算,并除以总权重;
        hdr(<name>)    :根据请求报文中指定的header(如use_agent, referer, hostname)进行调度;把指定的header的值做hash计算得值除以总权重;
示例:

backend websrvs    balance     hdr(User-Agent)    hash-type consistent    server  web1 192.168.20.7:80 check    server  web2 192.168.20.8:80 check

测试:

mode: 健康状态检测时基于何种协议

    HAProxy的工作模式;默认为tcp;有三种:tcp, http, health

    只有客户端和前端,后端都是用http通信才可以使用http模式

在front段也可以指定log:

frontend  main *:80     log global     log         127.0.0.2 local3

使用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 
:设定健康状态检查的时间间隔,单位为毫秒,默认为2000;也可以使用fastinter和downinter来根据服务器端状态优化此时间延迟;  rise 
:设定健康状态检查中,某离线的server从离线状态转换至正常状态需要成功检查的次数;  fall 
:确认server从正常状态转换为不可用状态需要检查的次数;cookie 
:为指定server设定cookie值,此处指定的值将在请求入站时被检查,第一次为此值挑选的server将在后续的请求中被选中,其目的在于实现持久连接的功能;maxconn 
:指定此服务器接受的最大并发连接数;如果发往此服务器的连接数目高于此处指定的值,其将被放置于请求队列,以等待其它连接被释放;maxqueue 
:设定请求队列的最大长度;observe 
:通过观察服务器的通信状况来判定其健康状态,默认为禁用,其支持的类型有“layer4”和“layer7”,“layer7”仅能用于http代理场景;redir 
:启用重定向功能,将发往此服务器的GET和HEAD请求均以302状态码响应;需要注意的是,在prefix后面不能使用/,且不能使用相对地址,以免造成循环;例如:  server srv1 172.16.100.6:80 redir http://imageserver.magedu.com checkweight 
:权重,默认为1,最大值为256,0表示不参与负载均衡;
option httpchkoption httpchk 
option httpchk 
 
  例如:backend https_relay    mode tcp    option httpchk OPTIONS * HTTP/1.1\r\nHost:\ www.lee123.com    server apache1 192.168.1.1:443 check port 80使用案例:server first  172.16.100.7:1080 cookie first  check inter 1000server second 172.16.100.8:1080 cookie second check inter 1000

基于浏览器cookie实现session sticky:定义健康检查方式可以使用option:

要点:(1) 每个server有自己惟一的cookie标识;(2) 在backend中定义为用户请求调度完成后操纵其cookiebackend websrvs    balance     roundrobin    cookie SERVERID insert nocache indirect    server  web1 192.168.20.7:80 check cookie websrv1    server  web2 192.168.20.8:80 check cookie websrv2

测试:注意到cookie头部的websrv1关键字了么?

开启统计页面:

listen statistics        bind *:9090        stats enable        stats hide-version        #stats scope .        stats uri /haproxyadmin?stats        stats realm "HAPorxy\ Statistics"        stats auth admin:mageedu        stats admin if TRUE

向日志中记录额外信息:

    capture request header
    capture response header

当mode为http时,记录丰富的日志信息:

    option httplog----默认是开启的

错误页面重定向:

    errorfile: 使用haproxy主机本地文件进行响应;
    errorloc, errorloc302: 使用指定的url进行响应,响应状态码为302;不适用于GET以外的其它请求方法;
    errorloc303:返回303状态码;

添加请求或响应报文首部:

    reqadd
    rspadd

frontend  main        bind *:80        bind *:8080    rspadd  Via:\ node1.lee.com    default_backend             websrvs

出现了Via:

动静分离的示例:frontend  main    bind *:80    bind *:8080    acl url_static       path_beg       -i /static /images /javascript /stylesheets    acl url_static       path_end       -i .jpg .gif .png .css .js    use_backend static          if url_static    default_backend             appsrvs#---------------------------------------------------------------------# static backend for serving up images, stylesheets and such#---------------------------------------------------------------------    backend static       balance roundrobin       server static1 192.168.20.7 check       server static2 192.168.20.8 check    backend appsrvs       balance     roundrobin       option forwardfor except 127.0.0.1 header X-Client       option httpchk       cookie SERVERID insert indirect nocache       server  web1 192.168.20.7:80 check cookie web1       server  web2 192.168.20.8:80 check cookie web2

 

转载于:https://my.oschina.net/u/3346994/blog/909405

你可能感兴趣的文章
(流式、lambda、触发器)实时处理大比拼 - 物联网(IoT)\金融,时序处理最佳实践
查看>>
什么Linux服务器最适合你?
查看>>
git 换行符问题,统一linux风格
查看>>
SQL on Linux Run on Docker
查看>>
C语言程序设计实践(OJ)-初识函数
查看>>
Spark机器学习9· 实时机器学习(scala with sbt)
查看>>
数据结构实践——队列数组
查看>>
从Demo到日千万PV,就是快! – 爱线下的上云实践
查看>>
Linux 时钟精度 与 PostgreSQL auto_explain (explain timing 时钟开销估算)
查看>>
架构师速成-架构目标之可用性
查看>>
云栖TechDay精华文章合集
查看>>
Java 深、浅克隆
查看>>
设计模式(八)之单例模式
查看>>
协同过滤算法 R/mapreduce/spark mllib多语言实现
查看>>
【云栖说第三期】发现大家对能模仿马云声音的ET有兴趣,我们找了阿里四位专家来聊聊ET背后的人工智能...
查看>>
在C#代码中应用Log4Net(一)简单使用Log4Net
查看>>
Visual Studio 2010生成SQL Server测试数据
查看>>
防止网页被嵌入框架的代码(续)
查看>>
语种名称代码
查看>>
apache httpd服务器403 forbidden的问题
查看>>