码迷,mamicode.com
首页 > 其他好文 > 详细

Haproxy负载均衡

时间:2018-04-30 16:38:09      阅读:130      评论:0      收藏:0      [点我收藏+]

标签:Haproxy

千万级高并发负载均衡软件有硬件负载均衡(F5,A10,BIG-IP)、软件负载均衡(Nginx、LVS、HAProxy)在软件负载均衡产品中,又分为两种实现方式(基于操作系统和基于第三方应用的软负载实现)LVS是基于Linux系统实现的一种软负载均衡,HAProxy是基于第三方应用实现的软负载均衡。开源的、高性能的、基于TCP(四层)/HTTP(七层)应用的负载均衡软件

*可靠性和稳定性非常好,可以和硬件级的F5负载均衡设备相媲美。
*最高可同时维护40000~50000个并发连接,单位时间最大请求数为20000,最大数据处理能力可达10Gps。作为软件负载均衡来说,性能可见一斑。
*支持多于8种负载均衡算法,同时也支持session保持。(会话保持)
*支持虚拟主机功能,这样实现web负载均衡更加灵活。
*支持连接拒绝、全透明代理等功能。
*拥有一个功能强大的服务器状态监控界面,实时了解系统的运行状况。

HAProxy借助于操作系统的技术特性来实现性能最大化的,因此,在使用HAProxy时,对操作系统进行性能调优非常重要。在业务方面,非常适合高并发且需要持久连接或四层和七层处理机制的web系统,例如门户网站或电商网站等。另外。HAProxy也可以用于MySQL数据库(读操作)的负载均衡。

四层负载均衡器(F5、LVS)
分析IP层及TCP/UDP层的流量实现的基于“IP+端口”的负载均衡。
通过四层负载均衡器,修改请求的目的地址,修改源地址(根据需求)。

七层负载均衡器(Nginx、HAProxy)
根据报文内容,再配合负载均衡算法来选择后端服务器。(URL、访问域名、浏览器类别、语言。。)
以TCP为例,负载均衡器要获取报文的内容,因此只能先代替后端服务器和客户端建立连接,接着才能收到客户端的报文内容,然后根据报文和负载均衡算法决定服务的内部服务器。对比四层负载均衡,七层负载均衡需要和客户端内部服务器都建立一次TCP连接,而四层只建立一次TCP连接。七层负载均衡设备对设备的要求高,而七层负载均衡的处理能力也必然低于四层模式的负载均衡。

Haproxy的负载均衡算法:

roundrobin:基于权重轮询
static-rr:静态基于权重轮询
source:基于源IP,(IP_HASH)
leastconn:(将新的连接请求到最少连接数的服务器)
uri:(uri hash)
uri_param:(url路径)
hdr:(http头进行转发)

一、Haproxy安装

A、源码包安装
1、解压源码包:
        tar -zxvf ~
2、编译安装:
    make TARGET=linux26 PREFIX=/usr/local/haproxy
    make install PREFIX=/usr/local/haproxy
3、配置文件
        mkdir /usr/local/haproxy/conf
        cp examples/haproxy.cfg  /usr/local/haproxy/conf
        mkdir -p  /usr/local/haproxy/conf  #创建配置文件目录
        mkdir -p /etc/haproxy  #创建配置文件目录
        touch  /usr/local/haproxy/conf/haproxy.cfg  #创建配置文件
        ln -s  /usr/local/haproxy/conf/haproxy.cfg   /etc/haproxy/haproxy.cfg  #添加配置文件软连接
        cp -r  /usr/local/src/haproxy-1.6.9/examples/errorfiles  /usr/local/haproxy/errorfiles  #拷贝错误页面
        ln -s  /usr/local/haproxy/errorfiles  /etc/haproxy/errorfiles  #添加软连接
        mkdir -p  /usr/local/haproxy/log  #创建日志文件目录
        touch  /usr/local/haproxy/log/haproxy.log  #创建日志文件
        ln -s  /usr/local/haproxy/log/haproxy.log  /var/log/haproxy.log  #添加软连接
        cp /usr/local/src/haproxy-1.6.9/examples/haproxy.init  /etc/rc.d/init.d/haproxy  #拷贝开机启动文件
        chmod +x  /etc/rc.d/init.d/haproxy  #添加脚本执行权限
        chkconfig haproxy on  #设置开机启动
        ln -s  /usr/local/haproxy/sbin/haproxy  /usr/sbin  #添加软连接

B、yum 安装
        yum install haproxy -y
        service haproxy start
        chkconfig haproxy on

二、修改配置文件/etc/haproxy/haproxy.cfg

#---------------------------------------------------------------------
# Global settings
#---------------------------------------------------------------------
global
    log    127.0.0.1 local2          ###[err warning info debug] 
    chroot  /usr/local/haproxy
    pidfile  /var/run/haproxy.pid   ###haproxy的pid存放路径,启动进程的用户必须有权限访问此文件 
    maxconn  4000                   ###最大连接数,默认4000
    user   haproxy
    group   haproxy
    daemon                          ###创建1个进程进入deamon模式运行。此参数要求将运行模式设置为"daemon"

#---------------------------------------------------------------------
# common defaults that all the ‘listen‘ and ‘backend‘ sections will 
# use if not designated in their block
#---------------------------------------------------------------------
defaults
    mode   http             ###默认的模式mode { tcp|http|health },tcp是4层,http是7层,health只会返回OK
    log    global           ###采用全局定义的日志
    option  dontlognull     ###不记录健康检查的日志信息
    option  httpclose       ###每次请求完毕后主动关闭http通道 
    option  httplog         ###日志类别http日志格式 
    option  forwardfor      ###如果后端服务器需要获得客户端真实ip需要配置的参数,可以从Http Header中获得客户端ip  
    option  redispatch      ###serverId对应的服务器挂掉后,强制定向到其他健康的服务器
    timeout connect 10000   #default 10 second timeout if a backend is not found
    timeout client 300000   ###客户端连接超时
    timeout server 300000   ###服务器连接超时
    maxconn     60000       ###最大连接数
    retries     3           ###3次连接失败就认为服务不可用,也可以通过后面设置 
####################################################################
listen stats
        bind 0.0.0.0:1080           #监听端口  
        stats refresh 30s           #统计页面自动刷新时间  
        stats uri /stats            #统计页面url  
        stats realm Haproxy Manager #统计页面密码框上提示文本  
        stats auth admin:admin      #统计页面用户名和密码设置  
        #stats hide-version         #隐藏统计页面上HAProxy的版本信息
#---------------------------------------------------------------------
# main frontend which proxys to the backends
#---------------------------------------------------------------------
frontend main
    bind 0.0.0.0:80
    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     ###满足策略要求,则响应策略定义的backend页面
    default_backend   dynamic            ###不满足则响应backend的默认页面

#---------------------------------------------------------------------
# static backend for serving up images, stylesheets and such
#---------------------------------------------------------------------

backend static
    balance     roundrobin                 ###负载均衡模式轮询
    server      static 127.0.0.1:80 check ###后端服务器定义

backend dynamic
    balance    roundrobin
    server         websrv1 10.252.97.106:80 check maxconn 2000
    server         websrv2 10.117.8.20:80 check maxconn 2000

#---------------------------------------------------------------------
# round robin balancing between the various backends
#---------------------------------------------------------------------
errorfile 403 /etc/haproxy/errorfiles/403.http
errorfile 500 /etc/haproxy/errorfiles/500.http
errorfile 502 /etc/haproxy/errorfiles/502.http
errorfile 503 /etc/haproxy/errorfiles/503.http
errorfile 504 /etc/haproxy/errorfiles/504.http

配置文件详解
(1)global部分(用来设置全局配置参数,属于进程级的配置,通常和操作系统配置有关)
(2)default部分
(3)frontend部分(设置请求前端的虚拟节点)
(4)backend部分(用于设置集群后端服务集群的配置)
(5)listen部分

日志配置策略:
由于为了节省读写I/O所消耗的性能,没有自动配置日志输出功能,但是为了维护和调试方便,日志输出还是很有必要的。
rsyslog管理系统日志,可以实现UDP日志接收、将日志写入文件、将日志写入数据库等功能。

rpm -qa rsyslog
vim /etc/rsyslog.d/haproxy.conf
    $ModLoad imudp
    $UDPServerRun 514
    local3.* /usr/local/haproxy/logs/haproxy.log
    local0.* /usr/local/haproxy/logs/haproxy.log

vim /etc/rsysconfig/rsyslog
    SYSLOGD_OPTIONS="-c 2 -r -m 0"

server rsyslog restart

Haproxy负载均衡

标签:Haproxy

原文地址:http://blog.51cto.com/gdutcxh/2109241

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!