• centos7下haproxy1.7的使用与配置


    centos7下haproxy1.7的使用与配置

    haproxy是一个使用C语言编写的自由及开放源代码软件,其提供高可用性、负载均衡,以及基于TCP和HTTP的应用程序代理。

    一、haproxy下载

    http://www.haproxy.org/#down

    如:haproxy-1.7.2.tar.gz

    二、安装haproxy

    查看内核版本

    > uname -r

    解压haproxy,并安装

    > tar xf haproxy-1.7.2.tar.gz
    > cd haproxy-1.7.2
    > make TARGET=linux2628 PREFIX=/data/haproxy
    > make install PREFIX=/data/haproxy

    安装成功后,查看版本

    > /data/haproxy/sbin/haproxy -v

    复制haproxy文件到/usr/sbin下
    因为下面的haproxy.init启动脚本默认会去/usr/sbin下找,当然你也可以修改,不过比较麻烦。

    > cp /data/haproxy/sbin/haproxy /usr/sbin/

    复制haproxy脚本,到/etc/init.d下

    > cp ./examples/haproxy.init /etc/init.d/haproxy
    > chmod 755 /etc/init.d/haproxy

    我们可以查看一下这个haproxy.init文件

    #$BASENAME默认就是haproxy
    BASENAME=`basename $0`
    if [ -L $0 ]; then
    BASENAME=`find $0 -name $BASENAME -printf %l`
    BASENAME=`basename $BASENAME`
    fi
    
    #执行文件路径
    BIN=/usr/sbin/$BASENAME
    #配置文件路径
    CFG=/etc/$BASENAME/$BASENAME.cfg
    #pid文件路径
    PIDFILE=/var/run/$BASENAME.pid
    #锁文件路径
    LOCKFILE=/var/lock/subsys/$BASENAME

    创建系统账号

    > useradd -r haproxy

    创建配置文件

    > mkdir /etc/haproxy
    > vi /etc/haproxy/haproxy.cfg
    
    #全局配置
    global
        #设置日志
        log 127.0.0.1 local3 info
        chroot /data/haproxy
        #用户与用户组
        user haproxy
        group haproxy
        #守护进程启动
        daemon
        #最大连接数
        maxconn 4000
    
    #默认配置
    defaults
        log global
        mode http
        option httplog
        option dontlognull
        timeout connect 5000
        timeout client 50000
        timeout server 50000
    
    #前端配置,http_front名称可自定义
    frontend http_front
        bind *:80
        #haproxy的状态管理页面,通过/haproxy?stats来访问
        stats uri /haproxy?stats
        default_backend http_back
    
    #后端配置,http_back名称可自定义
    backend http_back
        #负载均衡方式
        #source 根据请求源IP
        #static-rr 根据权重
        #leastconn 最少连接者先处理
        #uri 根据请求的uri
        #url_param 根据请求的url参数
        #rdp-cookie 据据cookie(name)来锁定并哈希每一次请求
        #hdr(name) 根据HTTP请求头来锁定每一次HTTP请求
        #roundrobin 轮询方式
        balance roundrobin
        #设置健康检查页面
        option httpchk GET /index.html
        #传递客户端真实IP
        option forwardfor header X-Forwarded-For
        # inter 2000 健康检查时间间隔2秒
        # rise 3 检测多少次才认为是正常的
        # fall 3 失败多少次才认为是不可用的
        # weight 30 权重
        server node1 192.168.1.222:8080 check inter 2000 rise 3 fall 3 weight 30
        server node2 192.168.1.222:8082 check inter 2000 rise 3 fall 3 weight 30

    打开rsyslog配置

    > vi /etc/rsyslog.conf

    去掉下面两行前面的#号

    $ModLoad imudp
    $UDPServerRun 514

    并添加下面一行

    local3.* /var/log/haproxy.log

    重启rsyslog

    > systemctl restart rsyslog

    启动haproxy

    > service haproxy start
    

      

    三、haproxy的acl规则

    frontend http_front
        bind *:80
        stats uri /haproxy?stats
    
        #创建一个acl,is_http_back2是acl的名称,可自定义,用于判断主机名是否为www.back2.com
        acl is_http_back2 hdr_end(host) www.back2.com
        #通过正则判断主机名中是否为bbs.back.com或forum.back.com
        acl is_host_bbs hdr_reg(host) -i ^(bbs.back.com|forum.back.com)
        #判断ua是否为android
        acl is_ua_android hdr_reg(User-Agent) -i android
        #判断主机名开头是否为img.或css.或js.
        acl is_host_static hdr_beg(host) -i img. css. js.
        #判断url路径中是否有/bbs
        acl is_path_bbs path_beg -i /bbs
        #判断url文件结尾
        acl is_php path_end -i .php
        #通过正则判断url中结尾以
        acl is_static_file url_reg -i /*.(css|jpg|png|jpeg|gif)$
        #效果同上
        acl is_static_file2 path_end -i .css .jpg .png .jpeg .gif
    
        #如果主机名是www.back2.com那么就使用后端http_back2
        use_backend http_back2 if is_http_back2
    
        #默认使用的后端
        default_backend http_back
    
    backend http_back
        balance roundrobin
        option httpchk GET /index.html
        option forwardfor header X-Forwarded-For
        server node1 192.168.1.222:8080 check inter 2000 rise 3 fall 3 weight 30
    
    backend http_back2
        balance roundrobin
        option httpchk GET /index.html
        option forwardfor header X-Forwarded-For
        server node2 192.168.1.222:8082 check inter 2000 rise 3 fall 3 weight 30
    

      

    四、haproxy的动态管理

    在/etc/haproxy/haproxy.cfg的global配置中添加如下项:

    stats socket /data/haproxy/haproxy.sock mode 600 level admin
    stats timeout 2m

    安装socat工具

    > yum install socat

    查看帮助

    > echo "help" | socat stdio /data/haproxy/haproxy.sock

    查看信息

    > echo "info" | socat stdio /data/haproxy/haproxy.sock

    关闭后台主机

    > echo "disable server http_back/node1" | socat stdio /data/haproxy/haproxy.sock

    打开后台主机

    > echo "enable server http_back/node1" | socat stdio /data/haproxy/haproxy.sock
    

      

    五、可调优的参数

    配置端口可用范围

    > cat /proc/sys/net/ipv4/ip_local_port_range

    配置端口复用

    > cat /proc/sys/net/ipv4/tcp_tw_reuse

    修改timeout的时间(不建议修改)

    > cat /proc/sys/net/ipv4/tcp_fin_timeout
    

      

  • 相关阅读:
    jQuery validate 的valid()方法一直返回true
    Webstrom 使用过程中遇到的问题以及解决方案
    CSS选择符 新的认识
    前端常用正则匹配
    魔术师
    node 安装express
    为什么报错说req未定义,createServer只接受匿名函数吗?
    nodejs报错 events.js:72 throw er; // Unhandled 'error' event
    我对 javascript 闭包的理解
    ORM框架,sqlsugar学习一
  • 原文地址:https://www.cnblogs.com/jkko123/p/6442363.html
Copyright © 2020-2023  润新知