文档章节

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

刺猬一号
 刺猬一号
发布于 2017/05/26 10:29
字数 1615
阅读 1
收藏 0
点赞 0
评论 0

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

测试:

wKioL1Y4epeRl-WVAACLgXcUsIs267.jpg

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 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:定义健康检查方式可以使用option:

要点:

(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

wKioL1Y4qbmzOZf2AAIwdL1Eqd0065.jpg测试:注意到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

wKiom1Y4rQLD9KOkAAViXWw2_QI398.jpg

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

wKiom1Y4vFPgmX6qAAIDhluDxZE046.jpg出现了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

 

© 著作权归作者所有

共有 人打赏支持
刺猬一号
粉丝 9
博文 321
码字总数 542412
作品 0
深圳
高可用高性能负载均衡软件HAproxy详解指南-第一章(简介、安装)

第一章:HAproxy简介及安装配置 对Linux有兴趣的朋友加入QQ群:476794643 在线交流 本文防盗链:http://zhang789.blog.51cto.com 目录 HAproxy简介 为什么要使用HAproxy haproxy 性能特点 负...

好笔记运维
06/26
0
0
HAproxy均衡负载部署和配置文件详解

HAproxy均衡负载部署和配置文件详解 HAProxy提供高可用性、负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费、快速并且可靠的一种解决方案。根据官方数据,其最高极限支持10G的...

木雨山
2011/11/15
0
0
haproxy,能够实现将来自用户的80端口的http请求转发至后端8000上的server服务

部署配置haproxy,能够实现将来自用户的80端口的http请求转发至后端8000上的server服务,写出其配置过程。 HAPorxy 是免费的、极速且可靠的用于为TCP和基于HTTP应用程序提供高可用、负载均衡...

春天的金缕
06/27
0
0
LVS,Nginx及HAProxy三种负载均衡器比较

三种负载均衡器的优缺点: LVS负载均衡 lvs优点: 1.抗负载能力强,工作在第4层仅作分发之用没有流量的产生。这个特点也决定了它在负载均衡软件里的性能最强的;无流量,同时保证了均衡器IO的...

运维小当家
06/29
0
0
使用Haproxy做Percona XtraDB Cluster或Mariadb Galera Cluster的负载均衡器

环境情况: 系统:CentOS release 6.4 (Final),2.6.32-358.el6.x86_64 haproxy版本:1.4.25 haproxy节点:10.0.60.190 mysql集群:10.0.60.104(mariadb01)、10.0.60.105(mariadb02)、10.0.......

AnthonyYau
2014/06/09
0
0
LVS、HAProxy和Nginx比较

负载均衡的实现,常见的硬件有比较昂贵的NetScaler、F5、Radware和Array等商用的负载均衡器,它的优点就是有专业的维护团队来对这些服务进行维护、缺点就是花销太大,所以对于规模较小的网络...

求学ing
2015/11/19
0
0
HAProxy实现RabbitMQ负载均衡

最近看了一下RabbitMQ的负载均衡策略,对于RabbitMQ集群来说,主要有两类负载均衡,客户端内部的和服务端的,客户端内部主要是采用负载均衡算法,服务端主要是采用代理服务器,这里记录一下,...

DFKyun
07/05
0
0
关于代理服务器及负载均衡的一些想法

研究代理服务及负载均衡服务有一段时间了,也发现了不少问题。当然我这里的问题主要集中在我所负责的网络应用环境中。 需求:为正向代理做负载 方案一:LVS+Nginx 方案二:LVS+Squid 方案三:...

zisehuainian
06/28
0
0
负载均衡之Haproxy安装配置篇

目前市场上,有关实现负载均衡的软件,使用比较多的是haproxy、nginx和lvs。 首先,介绍一下:什么是负载均衡?负载均衡一般通过两种方式来实现:基于操作系统的负载实现和基于第三方应用的负...

优果馥思
07/02
0
0
基于keepalived的Haproxy高可用配置

一、概述: HAProxy是一个用于4层或7层的高性能负载均衡软件,在大型网站的大型Web服务器群集中,HAProxy可用来替代专业的硬件负载均衡设备,节省大量的开支。 通常情况下,为了避免整个体系...

OutManLinux
07/01
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

回想过往,分析当下,着眼未来

好久没有真正的在纸质笔记本上写过东西了,感觉都快不会写字了,笔画都不知道怎么写了。接下来就说说咱们的正事。 2018年7月22日,我做了一个决定,那就是去参加安全培训(可能是我职业生涯中...

yeahlife
40分钟前
1
0
关于工作中的人际交往

关于工作中的人际交往 Intro 写了篇发泄情绪的博客,但不会发布出来。 大概就是,要么忍,要么滚。 以及一些不那么符合社会主义核心价值观,不满于大资本家与小资本家剥削的废话。

uniqptr
46分钟前
0
0
springMVC的流程

1.用户发送请求至前端控制器DispatcherServlet 2.DispatcherServlet收到请求调用HandlerMapping处理器映射器。 3.处理器映射器根据请求url找到具体的处理器,生成处理器对象及处理器拦截器(...

JavaSon712
今天
0
0
大数据教程(3.2):Linux系统软件安装之自动化脚本

博主前面文章有介绍过软件的安装,可以帮助IT人员顺利的完成功能软件安装;但是,对于我们运维人员或者需要管理软件安装的项目经理来说,有些应用一次行需要搭建很多台相同的软件环境(如tom...

em_aaron
今天
0
1
Spring Boot 2.0.3 JDBC整合Oracle 12

整合步骤 1. Oracle驱动引入 Oracle驱动一般不能通过maven仓库直接下载得到,需自行下载并导入到项目的lib目录下,建议通过如下pom依赖引入下载的Oracle驱动 <!-- Oracle 驱动 -->...

OSC_fly
今天
0
0
java 8 并行流 - 1

下面创建一个并行流,与顺序流 //顺序流Stream.iterate(0L, i -> i + 1) .limit(Integer.MAX_VALUE) .reduce(0L, Long::sum);//并行流Stream.iterate(0L, i -> i......

Canaan_
今天
0
0
数据结构与算法5

二分法采用向下取整的方法 使用有序数组的好处是查找的速度比无序数组快的多,不好的方面是因为要将所有靠后的数据移开,所以速度较慢,有序数组和无序数组的删除操作都很慢。 有序数组在查找...

沉迷于编程的小菜菜
昨天
1
1
SpringBoot | 第十一章:Redis的集成和简单使用

前言 上几节讲了利用Mybatis-Plus这个第三方的ORM框架进行数据库访问,在实际工作中,在存储一些非结构化或者缓存一些临时数据及热点数据时,一般上都会用上mongodb和redis进行这方面的需求。...

oKong
昨天
5
0
对基于深度神经网络的Auto Encoder用于异常检测的一些思考

一、前言 现实中,大部分数据都是无标签的,人和动物多数情况下都是通过无监督学习获取概念,故而无监督学习拥有广阔的业务场景。举几个场景:网络流量是正常流量还是攻击流量、视频中的人的...

冷血狂魔
昨天
0
0
并发设计之A系统调用B系统

A-->B A在发送请求之前,用乐观锁,减少对B的重复调用,这样一定程度上是幂等性。 比如A系统支付功能,要调用B系统进行支付操作,但是前端对"支付"按钮不进行控制,即用户会不断多次点击支付...

汉斯-冯-拉特
昨天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部