zoukankan      html  css  js  c++  java
  • Haproxy安装配置及日志输出问题

    简介:
    软件负载均衡一般通过两种方式来实现:基于操作系统的软负载实现和基于第三方应用的软负载实现。LVS就是基于Linux操作系统实现的一种软负载,HAProxy就是开源的并且基于第三应用实现的软负载。    
    HAProxy支持两种主要的代理模式:"tcp"也即4层(大多用于邮件服务器、内部协议通信服务器等),和7层(HTTP)。在4层模式 下,HAproxy仅在客户端和服务器之间转发双向流量。7层模式下,HAProxy会分析协议,并且能通过允许、拒绝、交换、增加、修改或者删除请求 (request)或者回应(response)里指定内容来控制协议,这种操作要基于特定规则。

    特点:
    haproxy支持四七层,而LVS是四层应用,nginx是七层应用

    支持双机热备,高可用,负载均衡、虚拟主机,应用代理、

    基于TCP和HTTP的 图形界面查看信息

    服务器节点健康检查功能

    一般是lvs在前面做4层,haproxy在后面做七层。

    HAproxy配置文件可以分为五部分:

    1
    2
    3
    global:    全局配置参数段,主要用来控制Haproxy启动前的进程及系统相关设置
     
    defaults:  配置一些默认参数,如果frontend,backend,listen等段未设置则使用defaults段设置
    1
    listen: <br>frontend:  用来匹配接收客户所请求的域名,uri等,并针对不同的匹配,做不同的请求处理 <br>backend:  定义后端服务器集群,以及对后端服务器的一些权重、队列、连接数等选项的设置  

    1.安装

    1
    2
    3
    4
    5
    6
    7
    8
    9
    wget http://haproxy.1wt.eu/download/1.3/src/haproxy-1.3.20.tar.gz
    tar zcvf haproxy-1.3.20.tar.gz
    cd haproxy-1.3.20
    make TARGET=linux26 PREFIX=/usr/local/haproxy          
    make install PREFIX=/usr/local/haproxy
    (注意,TARGET后面根据本机操作系统内核版本来填写,PREFIX是要安装到的目录)
     
    net.ipv4.ip_forward = 1 #基于NAT模式的负载均衡器都要打开系统转发功能。
    sysctl -p  #使修改生效

    2.配置
    安装完毕后,进入安装目录配置文件,默认情况下目录里是没有.cfg配置文件的,可以回到安装文件目录下将examples下的haproxy.cfg拷贝到usr/local/haproxy下。

    cd /usr/local/haproxy
    vi haproxy.cfg

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    根据实际需求,更改配置文件,我的配置如下
            global                                    #全局设置
           log 127.0.0.1   local0                 #日志输出配置,所有日志都记录在本机,通过local0输出
           #log loghost    local0 info
           maxconn 4096                         #最大连接数
           chroot /usr/local/haproxy
           uid 99                                #所属运行的用户uid
           gid 99                                #所属运行的用户组
           daemon                               #以后台形式运行haproxy
           nbproc 2                             #启动2个haproxy实例
           pidfile /usr/local/haproxy/haproxy.pid     #将所有进程写入pid文件
           #debug
           #quiet
     
        defaults                           #默认设置
     
           #log    global
     
           log     127.0.0.1       local3         #日志文件的输出定向
     
           mode    http                        #默认的模式mode { tcp|http|health },tcp是4层,http是7层,health只会返回OK
     
           option  httplog                     #日志类别,采用httplog
     
           option  dontlognull
     
           option  forwardfor                  #如果后端服务器需要获得客户端真实ip需要配置的参数,可以从Http Header中获得客户端ip
     
           option  httpclose                   #每次请求完毕后主动关闭http通道,haproxy不支持keep-alive,只能模拟这种模式的实现
     
           retries 3                           #3次连接失败就认为服务器不可用,主要通过后面的check检查
     
           option  redispatch                  #当serverid对应的服务器挂掉后,强制定向到其他健康服务器
     
           maxconn 2000                        #最大连接数
     
           stats uri /stats                    #haproxy 监控页面的访问地址
                                             浏览器中输入haproxy监控地址:http://10.10.100.39/stats查看状态
     
           contimeout      5000                #连接超时时间
     
           clitimeout      50000               #客户端连接超时时间
     
           srvtimeout      50000               #服务器端连接超时时间
     
          stats auth  admin:admin              #设置监控页面的用户和密码:Frank
     
          stats hide-version                   #隐藏统计页面的HAproxy版本信息
     
     
     
    frontend http-in                            #前台
     
           bind *:80
     
           mode    http
     
           option  httplog
     
           log     global
           
           acl web1 hdr(host) -i www.9888.cn 9888.cn
          #acl后面是规则名称,-i是要访问的域名,如果访问www.9888.cn 这个域名就分发到下面的webserver1 的作用域。
           
            use_backend webserver1 if web1
     
           
    backend webserver1                                #后台
         mode http
         balance   roundrobin                         #负载均衡算法
         option  httpchk /index.html                  #健康检查
         server     web01 10.10.100.41:80  check cookie 1 inter 2000 fall 3 weight 30
         server     web02 10.10.100.18:80  check cookie 2 inter 2000 fall 3 weight 30
      #cookie 1表示serverid为1,check inter 1500 是检测心跳频率
      #rise 2是2次正确认为服务器可用,fall 3是3次失败认为服务器不可用,weight代表权重.           

    启动haproxy:
    /usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/conf/haproxy.cfg  

    实现haproxy301域名跳转:

    1
    redirect prefix http://oldboy.blog.51.com code 301 if www.9888.cn #当访问www.9888.cn时跳转至http://oldboy.blog.51.com

    实现haproxy基于URL地址目录做7层跳转
    比如根据目录进行过滤转发:

    1
    2
    3
    4
    5
    acl oldboy_java path_beg /java/   
    acl oldboy_php path_beg /php/
         
    use_backend webserver if oldboy_java         #如果是java就找webserver这个池    
    use_backend webserver if oldboy_php

    实现haproxy基于扩展名做7层跳转:

    1
    2
    acl oldboy_pic path_end .gif .png .jpg .css .js
    use_backend nginxpools if olboy_static or oldboy_pic

    实现haproxy基于user_agent做7层跳转

    1
    2
    3
    4
    5
    6
    7
    acl iphone_users hdr_sub(user-agent) -i iphone
     
    redirect prefix http://www.51cto.com if iphone users  
     
    acl android_users hdr_sub(user-agent) -i android
     
    redirect prefix http://www.baidu.com if android_users

    实现haproxy基于ip和端口过滤

    1
    2
    3
    acl valid_ip src 192.168.1.0/24
     
    block if !valid_ip  #如果不符合valid_ip的规则就block拒绝掉

    让haproxy错误页面优雅的显示

    1
    errorfile 403 /tec/haproxy/errorfiles/403forbild.html

    基于HTTP的直接IP URL方式的健康检查:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    1.>第一种HEAD配置方法
     
        option httpchk HEAD /check.html HTTP/1.0
        这种检测方式就相当于通过curl -i http://127.0.0.1/check.html
        或者 wget http://127.0.0.1/check.html访问地址。
        **check.html文件必须在网站根目录下创建
         
        健康检查的频率、时间等参数:
         
        maxconn 控制节点的并发连接的
        weight 12 权重,权重越大,请求越多
         
    2.>第二种GET配置方式
     
    GET后端server的web页面
     
    option httpchk GET /index.html HTTP/1.0

    backup 和allbackups参数:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    server      web1 10.10.100.66:80  check inter 2000 fall 3 weight 30
    server      web2 10.10.100.67:80  check inter 2000 fall 3 weight 30
    server      web3 10.10.100.68:80  check inter 2000 fall 3 weight 30 backup 
     
    当web1和web2服务停止后,web3再提供服务,这样可以达到高可用的目的
     
     
    option allbackups
     
    server      web1 10.10.100.66:80  check inter 2000 fall 3 weight 30
    server      web2 10.10.100.67:80  check inter 2000 fall 3 weight 30
    server      web3 10.10.100.68:80  check inter 2000 fall 3 weight 30 backup
    server      web4 10.10.100.69:80  check inter 2000 fall 3 weight 30 backup
     
    加上 option allbackups后,当web1和web2挂掉后,web3和web4都启动起来提供服务,不加allbackups则只有一台提供服务.

    haproxy下的RS无法记录客户端真实ip的问题

    1
    2
    3
    4
    5
    6
    7
    在haproxy配置文件里加入如下参数:
     
    listen www
     
            option forwardfor 
            提示:参数最好放在listen www里面
            然后在nginx日志格式中加"$http_x_forwarded_for" 

    ###################################################################################

    关于haproxy日志输出的问题:
    CentoS6.5下HAProxy日志配置详解:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    syslog这个服务,在Centos5.x中的目录为:/etc/init.d/syslog
    而到了Centos6.x中变成了:/etc/init.d/rsyslog
    在配置前,我们先来了解下日志的level: local0~local7 1623保留为本地使用
    emerg 0       系统不可用
    alert 1       必须马上采取行动的事件
    crit 2        关键的事件
    err 3        错误事件
    warning 4      警告事件
    notice 5      普通但重要的事件
    info 6       有用的信息
    debug 7      调试信息

    vim haproxy.conf(在default处添加如下信息)

    1
    2
    3
    4
    5
    6
    ########################################
    defaults
    log global
    option httplog
    log 127.0.0.1 local3
    ########################################

    vim /etc/rsyslog.conf(添加如下内容)

    1
    local3.*    /var/log/haproxy.log

    vim /etc/sysconfig/rsyslog

    1
    2
    把SYSLOGD_OPTIONS="-m 0"
    改成 SYSLOGD_OPTIONS="-r -m 0"

    相关解释说明:
    -r:   打开接受外来日志消息的功能,其监控514 UDP端口;
    -x:   关闭自动解析对方日志服务器的FQDN信息,这能避免DNS不完整所带来的麻烦;
    -m:  修改syslog的内部mark消息写入间隔时间(0为关闭),例如240为每隔240分钟写入一次"--MARK--"信息;
    -h:   默认情况下,syslog不会发送从远端接受过来的消息到其他主机,而使用该选项,则把该开关打开,所有接受到的信息都可根据syslog.conf中定义的@主机转发过去.  

    配置完毕后关闭sellinux然后重启rsyslog和haproxy 即可.

    1
    /etc/init.d/rsyslog restart

      

    haproxy实现负载均衡的方式:

    haproxy + heartbeat

    haproxy + keepalive

  • 相关阅读:
    SQL开窗函数
    mysql中可以实现类似if判断的方法
    sql中COUNT(*)、COUNT(字段名)的区别
    shiro学习笔记_0600_自定义realm实现授权
    shiro学习笔记_0500_授权
    shiro学习笔记_0400_自定义realm实现身份认证
    shiro学习笔记_0300_jdbcRealm和认证策略
    shiro学习笔记_0200_认证
    点击div跳转的方法
    jq获取网页url
  • 原文地址:https://www.cnblogs.com/liqing1009/p/10246337.html
Copyright © 2011-2022 走看看