Haproxy

Posted 成为DBA

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Haproxy相关的知识,希望对你有一定的参考价值。

Haproxy简介

HAProxy是一款提供高可用性、负载均衡以及基于TCP(第四层)和HTTP(第七层)应用的代理软件,HAProxy是完全免费的、借助HAProxy可以快速并且可靠的提供基于TCP和HTTP应用的代理解决方案。

四层负载均衡和七层负载均衡的区别

四层负载平衡:根据IP范围和端口转发用户流量,快速,负载均衡器将用户的请求转发给后端服务器的Web后端组。无论选择哪个后端服务器,都将直接响应用户的请求。通常,Web后端中的所有服务器应该提供相同的内容 - 否则用户可能会收到不一致的内容。

七层负载平衡:识别用户发送的url,可以实现动静分离(可以将服务器分为静态服务器、和动态服务器),可以根据用户的需求分配到不同的服务器,有效的提升了服务器的性能。因此可以用于大型的web站点,使得可以建立多个服务器集群,服务器又可以扮演不同的角色,大大的提高了服务器的性能。

Haproxy的特点

能够实现负载均衡还有lvs、nginx

LVS

即Linux虚拟服务器,是一个虚拟的服务器集群系统。抗负载能力强、工作稳定但是只能工作在tcp四层。

Nginx

  • 轻量级别的web服务器,工作在七层之上,可以针对http做一些分流的策略;

  • Nginx对网络稳定性的依赖非常小,理论上能ping通就能进行负载功能,这个是它的优势之一;

  • 可以承担高负载压力且稳定,在硬件不差的情况下一般能支撑几万次的并发量,负载度比LVS相对小些。

  • Nginx可以通过端口检测到服务器内部的故障,比如根据服务器处理网页返回的状态码,超时等等,并且会把返回错误的请求重新提交到另一个节点,不过 其中缺点就是不支持url来检测。

Haproxy

支持虚拟主机

HAproxy的优点能够补充Nginx的一些缺点,比如支持Session的保持,Cookie的引导:同时支持通过获取指定的url来检测后端服务器的状态;

HAproxy跟LVS类似,本身就只是一款负载均衡软件;单纯从效率上来讲HAproxy会比Nginx有更出色的负载均衡速度,在并发处理上也是优于Nginx的;

HAproxy支持TCP协议的负载均衡转发,可以对mysql读进行负载均衡,对后端的MySQL节点进行检测和负载均衡。

Haproxy原理

负载均衡服务器作为web服务器流量的入口,处理来自客户端用户的请求。Haproxy作为负载均衡服务器具有四层(tcp)负载均衡处理,在四层处理时候,haproxy只具有分发功能,将请求分发到各服务器,因此需要集群中各服务器具有相同的数据。当haproxy作为七层负载均衡处理时候,haproxy可以识别用户发送url,可以实现动静分离的功能,将用户的请求分门别类分发到不同的服务器上,可以大提高服务器的效率。

Haproxy配置文件

# Global settings

#---------------------------------------------------------------------

global

    # to have thesemessages end up in /var/log/haproxy.log you will

    # need to:

    #

    # 1) configure syslogto accept network log events.  This isdone

    #    by adding the '-r' option to theSYSLOGD_OPTIONS in

    #    /etc/sysconfig/syslog

    #

    # 2) configure local2events to go to the /var/log/haproxy.log

    #   file. A line like the following can be addedto

    #   /etc/sysconfig/syslog

    #

    #    local2.*                       /var/log/haproxy.log

    #

    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 unixsocket

    stats socket/var/lib/haproxy/stats

#---------------------------------------------------------------------

# common defaults that all the 'listen' and 'backend' sectionswill

# use if not designated in their block

#---------------------------------------------------------------------

defaults

    mode                    http

    log                     global

    option                  httplog

    option                  dontlognull

    optionhttp-server-close

    optionforwardfor       except 127.0.0.0/8

    option                  redispatch

    retries                 3

    timeouthttp-request    10s

    timeout queue           1m

    timeout connect         10s

    timeout client          1m

    timeout server          1m

    timeouthttp-keep-alive 10s

    timeout check           10s

    maxconn                 3000

#---------------------------------------------------------------------

# main frontend which proxys to the backends

#---------------------------------------------------------------------

frontend  main *:5000

    acl url_static       path_beg       -i /static /images /javascript/stylesheets

    acl url_static       path_end       -i .jpg .gif .png .css .js

 

    use_backendstatic          if url_static

    default_backend             app

#---------------------------------------------------------------------

# static backend for serving up images, stylesheets and such

#---------------------------------------------------------------------

backend static

    balance     roundrobin

    server      static 127.0.0.1:4331 check

#---------------------------------------------------------------------

# round robin balancing between the various backends

#---------------------------------------------------------------------

backend app

    balance     roundrobin

    server  app1 127.0.0.1:5001 check

    server  app2 127.0.0.1:5002 check

    server  app3 127.0.0.1:5003 check

server  app4 127.0.0.1:5004 check

 

haproxy 的配置文件由两部分组成:全局设定和对代理的设定,共分为五段:global,defaults,frontend,backend,listen。

global:参数是进程级的。这些参数一般只设置一次,如果配置无误,就不需要再次配置进行修改

defaults:配置默认参数的,这些参数可以被利用配置到frontend,backend,listen组件;

frontend:接收请求的前端虚拟节点,Frontend可以根据规则直接指定具体使用后端的backend。

backend:后端服务集群的配置,是真实的服务器,一个Backend对应一个或者多个实体服务器。


以上是关于Haproxy的主要内容,如果未能解决你的问题,请参考以下文章

haproxy

HAProxy杂记

Haproxy-负载均衡

HAproxy配置

haproxy

HAProxy介绍