阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

HAproxy实现反向代理和负载均衡

139次阅读
没有评论

共计 5508 个字符,预计需要花费 14 分钟才能阅读完成。

反向代理服务器功能: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

测试:

HAproxy 实现反向代理和负载均衡

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

定义健康检查方式可以使用 option:

option httpchk
option httpchk <uri>
option httpchk <method> <uri> 
例如:
backend https_relay
    mode tcp
    option httpchk OPTIONS * HTTP/1.1\r\nHost:\ www.linuxidc.com
    server apache1 192.168.1.1:443 check port 80
使用案例:
server first  172.16.100.7:1080 cookie first  check inter 1000
server second 172.16.100.8:1080 cookie second check inter 1000

基于浏览器 cookie 实现 session sticky:

要点:
(1) 每个 server 有自己惟一的 cookie 标识;
(2) 在 backend 中定义为用户请求调度完成后操纵其 cookie
backend 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 关键字了么?

HAproxy 实现反向代理和负载均衡

开启统计页面:

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

HAproxy 实现反向代理和负载均衡

向日志中记录额外信息:
    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:

HAproxy 实现反向代理和负载均衡

动静分离的示例:
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

Haproxy+Keepalived 搭建 Weblogic 高可用负载均衡集群 http://www.linuxidc.com/Linux/2013-09/89732.htm

Keepalived+HAProxy 配置高可用负载均衡 http://www.linuxidc.com/Linux/2012-03/56748.htm

CentOS 6.3 下 Haproxy+Keepalived+Apache 配置笔记 http://www.linuxidc.com/Linux/2013-06/85598.htm

Haproxy + KeepAlived 实现 WEB 群集 on CentOS 6 http://www.linuxidc.com/Linux/2012-03/55672.htm

HAProxy+Keepalived 实现高可用负载均衡 http://www.linuxidc.com/Linux/2016-06/132225.htm

使用 HAProxy 配置 HTTP 负载均衡器 http://www.linuxidc.com/Linux/2015-01/112487.htm

Ubuntu 16.04 下安装 HAProxy 1.5.11 做 tcp 负载均衡 http://www.linuxidc.com/Linux/2016-06/132689.htm

HAproxy 的详细介绍:请点这里
HAproxy 的下载地址:请点这里

本文永久更新链接地址:http://www.linuxidc.com/Linux/2016-12/138749.htm

正文完
星哥说事-微信公众号
post-qrcode
 
星锅
版权声明:本站原创文章,由 星锅 2022-01-21发表,共计5508字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中