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

反向代理服务器功能: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 <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.magedu.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.lee123.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关键字了么?

开启统计页面:

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

时间: 2024-10-13 12:09:17

haproxy实现反向代理和负载均衡的相关文章

Nginx的反向代理及负载均衡

1.集群的简介 简单来说,集群就是指一组相互独立的计算机,利用高速通信网络组成的一个较大的计算机服务系统,每个集群节点都是运行各自服务的独立服务器.这些服务器之间可以彼此通信,协同向用户提供应用程序.系统资源和数据,并以单一系统的模式加以管理.当用户客户机请求集群系统时,集群给用户的感觉就是一个单一的服务器,而实际上用户请求的是一组集群服务器. 集群主要包括几大特点:高性能.价格有效性.可伸缩性.高可用性.透明性.可管理性和可编程性. 2.负载均衡集群 常见的负载均衡的架构包括有负载均衡集群.高

nginx 反向代理实现负载均衡理论

Nginx负载均衡集群介绍 负载均衡集群提供了一种廉价,有效,透明的方法,来扩展网络设备和服务器的负载,带宽和吞吐量,同时加强了网络数据处理能力,提高了网络的灵活性和可用性. 搭建负载均衡服务的需求: (1)把单台计算机无法承受的大规模并发访问或数据流量分担到多台节点设备上,分别进行处理,减少用户等待响应的时间,提升用户体验. (2)单个重负载的运算分担到多台节点设备上做并行处理,每个节点设备处理结束后,将结果汇总,返回给用户,系统处理能力得到大幅度提高. (3)7*24小时的服务保证,任意一个

nginx详解反向代理、负载均衡、LNMP架构上线动态网站

nginx介绍 Nginx是俄罗斯人编写的十分轻量级的HTTP服务器,Nginx,它的发音为“engine X”,是一个高性能的HTTP和反向代理服务器,同时也是一个IMAP/POP3/SMTP 代理服务器.Nginx是由俄罗斯人 Igor Sysoev为俄罗斯访问量第二的 Rambler.ru站点开发的,它已经在该站点运行超过两年半了.Igor Sysoev在建立的项目时,使用基于BSD许可. nginx和apache区别 Nginx 轻量级,采用 C 进行编写,同样的 web 服务,会占用更

Nginx反向代理,负载均衡,redis session共享,keepalived高可用

相关知识自行搜索,直接上干货... 使用的资源: nginx主服务器一台,nginx备服务器一台,使用keepalived进行宕机切换. tomcat服务器两台,由nginx进行反向代理和负载均衡,此处可搭建服务器集群. redis服务器一台,用于session的分离共享. nginx主服务器:192.168.50.133 nginx备服务器:192.168.50.135 tomcat项目服务器1:192.168.50.137 tomcat项目服务器2:192.168.50.139 redis服

nginx实现反向代理与负载均衡

nginx在LB Cluster集群中也可以扮演一定的角色,即反向代理与负载均衡.在一个Web服务中,来自客户端的请求可以经由nginx服务器转发至后端服务器,并且按照一定的算法实现负载均衡. 1.反向代理 1)在192.168.10.17/24与192.168.10.77/24主机上安装nginx,提供web服务. 编辑两台主机的主页文件内容分别为 inode17 page 和inode77 page 2)主机172.16.10.66提供nginx的反向代理服务 为了与后端主机进行通信,此主机

Nginx反向代理、负载均衡、页面缓存、URL重写及读写分离详解

大纲 一.前言 二.环境准备 三.安装与配置Nginx 四.Nginx之反向代理 五.Nginx之负载均衡 六.Nginx之页面缓存 七.Nginx之URL重写 八.Nginx之读写分离 注,操作系统为 CentOS 6.4 x86_64 , Nginx 是版本是最新版的1.4.2,所以实验用到的软件请点击这里下载:http://yunpan.cn/QXIgqMmVmuZrm 一.前言 在前面的几篇博文中我们主要讲解了Nginx作为Web服务器知识点,主要的知识点有nginx的理论详解.ngin

Web服务之Nginx反向代理与负载均衡

一.代理 正向代理: 正向代理是一个位于客户端和目标服务器之间的服务器,为了从目标服务器取得内容,客户端向代理发送一个请求并指定目标服务器,然后代理向目标服务器转交请求并将获得的内容返回给客户端.客户端必须要进行一些特别的设置才能使用正向代理. 作用: 访问无法访问的服务器(翻墙,懂得) 加速访问目标服务器(链路加速) Cache缓存(访问加速) 实现客户端访问授权 隐藏访问者 反向代理: 反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转

Nginx反向代理以及负载均衡配置

前提:最近在研究nginx的用法,在windows上小试了一下,由于windows下不支持nginx缓存配置,所以本文主要是讲nginx,以及反向代理与负载均衡. [一.为什么要使用nginx] 要回答为什么要使用nginx,那就先说说nginx能做些什么. 首先,nginx能做反向代理,那么什么是反向代理呢,举个栗子,我想在本地使用 www.mickey.com 的域名去访问 www.taobao.com.那么这个时候我们就可以通过nginx去实现. 再者,nginx能实现负载均衡,什么是负载

Tomcat:利用Apache配置反向代理、负载均衡

Apache 反向代理.负载均衡 准备工作 1.  2 个tomcat实例 2.  安装Apache server2.2 基于apache server配置反向代理 在这个配置中,只使用到了apache server,没有使用到tomcat. 1)  ${apacheserver}/conf/extra/httpd-vhosts.conf在配置一个使用反向代理的虚拟主机 <VirtualHost *:80> ServerAdmin [email protected] ServerName ww