zoukankan      html  css  js  c++  java
  • Keepalived + HAProxy 搭建【第一篇】HAProxy 的安装与配置

    第一步:准备

    1. 操作系统

    CentOS-7-x86_64-Everything-1511

    2. 安装包

    haproxy-1.7.2.tar.gz

    第二步:安装

    # tar zxvf haproxy-1.7.2.tar.gz
    # cd haproxy-1.7.2
    # make PREFIX=/root/haproxy TARGET=linux2628
    # make install PREFIX=/root/haproxy
    • PREFIX 为指定的安装路径
    • TARGET则根据当前操作系统内核版本指定
      • - linux22 for Linux 2.2
      • - linux24 for Linux 2.4 and above (default)
      • - linux24e for Linux 2.4 with support for a working epoll (> 0.21)
      • - linux26 for Linux 2.6 and above
      • - linux2628 for Linux 2.6.28, 3.x, and above (enables splice and tproxy)

    本文的操作系统内核版本为3.10.0,TARGET指定为 linux2628。

    第三步:配置

    1. 创建配置文件

    # cd haproxy
    # mkdir conf
    # touch haproxy.cfg

    2. 编辑配置文件

    配置文件内容如下:

    global #全局属性
        daemon  #以daemon方式在后台运行
        maxconn 256  #最大同时256连接
        pidfile /root/haproxy/conf/haproxy.pid  #指定保存HAProxy进程号的文件
    
    defaults #默认参数
        mode http  #http模式
        timeout connect 5000ms  #连接server端超时5s
        timeout client 50000ms  #客户端响应超时50s
        timeout server 50000ms  #server端响应超时50s
    
    frontend http-in #前端服务http-in
        bind 192.168.6.128:9090  #监听9090端口
        default_backend servers  #请求转发至名为"servers"的后端服务
    
    backend servers #后端服务servers
    balance roundrobin #使用RR负载均衡算法 server server1 192.168.6.128:8080 maxconn 32 #backend servers中只有一个后端服务,名字叫server1,启在本机的8000端口,HAProxy同时最多向这个服务发起32个连接
    server server2 192.168.6.129:8080 maxconn 32
    server server3 192.168.6.130:8080 maxconn 32

    注意:HAProxy 要求系统的 ulimit -n 参数大于 [maxconn*2+18],在设置较大的 maxconn 时,注意检查并修改 ulimit -n 参数。

    3. 将HAProxy注册为系统服务

    1)在 /etc/init.d 目录下添加 HAProxy 服务的启停脚本:

    # vi /etc/init.d/haproxy

    启停脚本内容如下:

    #!/bin/sh
    set -e
    
    PATH=/sbin:/bin:/usr/sbin:/usr/bin:/home/ha/haproxy/sbin
    PROGDIR=/root/haproxy
    PROGNAME=haproxy
    DAEMON=$PROGDIR/sbin/$PROGNAME
    CONFIG=$PROGDIR/conf/$PROGNAME.cfg
    PIDFILE=$PROGDIR/conf/$PROGNAME.pid
    DESC="HAProxy daemon"
    SCRIPTNAME=/etc/init.d/$PROGNAME
    
    # Gracefully exit if the package has been removed.
    test -x $DAEMON || exit 0
    
    start()
    {
           echo -e "Starting $DESC: $PROGNAME
    "
           $DAEMON -f $CONFIG
           echo "."
    }
    
    stop()
    {
           echo -e "Stopping $DESC: $PROGNAME
    "
           haproxy_pid="$(cat $PIDFILE)"
           kill $haproxy_pid
           echo "."
    }
    
    restart()
    {
           echo -e "Restarting $DESC: $PROGNAME
    "
           $DAEMON -f $CONFIG -p $PIDFILE -sf $(cat $PIDFILE)
           echo "."
    }
    
    case "$1" in
     start)
           start
           ;;
     stop)
           stop
           ;;
     restart)
           restart
           ;;
     *)
           echo "Usage: $SCRIPTNAME {start|stop|restart}" >&2
           exit 1
           ;;
    esac
    
    exit 0

    2)将启动脚本添加可执行权限

    # chmod +x haproxy

    4. 配置日志

    HAProxy 不会直接输出文件日志,需要借助 Linux 的 rsyslog 来让 HAProxy 输出日志。

    1)修改 haproxy.cfg

    在配置文件的 global 和 defaults 域中添加以下字段:

    global
        ...
        log 127.0.0.1 local0 info
        log 127.0.0.1 local1 warning
        ...
    
    defaults
        ...
        log global
        ...

    意思是将 info 级(及以上)的日志推送到 rsyslog 的 local0 接口,将 warn 级(及以上)的日志推送到 rsyslog 的 local1 接口,并且所有 frontend 都默认使用 global 中的日志配置。

    注意:info 级的日志会打印 HAProxy 处理的每一条请求,会占用很大的磁盘空间,在生产环境中,建议将日志级别调整为 notice。

    2)为 rsyslog 添加 haproxy 日志的配置

    # vi /etc/rsyslog.d/haproxy.conf

    配置文件内容如下:

    $ModLoad imudp
    $UDPServerRun 514
    $FileCreateMode 0644  #日志文件的权限
    $FileOwner root  #日志文件的owner
    local0.*     /var/log/haproxy.log  #local0接口对应的日志输出文件
    local1.*     /var/log/haproxy_warn.log  #local1接口对应的日志输出文件

    3)修改 rsyslog 的启动参数

    # vi /etc/sysconfig/rsyslog

    配置文件内容如下:

    # Options for rsyslogd
    # Syslogd options are deprecated since rsyslog v3.
    # If you want to use them, switch to compatibility mode 2 by "-c 2"
    # See rsyslogd(8) for more details
    SYSLOGD_OPTIONS="-c 2 -r -m 0"

    4)重启 rsyslog

    # service rsyslog restart

    返回信息:

    5)用 logrotate 进行日志切分

    通过 rsyslog 输出的日志是不会切分的,所以需要通过 Linux 提供的 logrotate 来对日志文件进行切分。

    使用 root 用户,创建 haproxy 日志切分配置文件:

    # mkdir /root/logrotate
    # vi /root/logrotate/haproxy

    配置文件内容如下:

    /var/log/haproxy.log /var/log/haproxy_warn.log {  #切分的两个文件名
        daily        #按天切分
        rotate 7     #保留7份
        create 0644 root root  #创建新文件的权限、用户、用户组
        compress     #压缩旧日志
        delaycompress  #延迟一天压缩
        missingok    #忽略文件不存在的错误
        dateext      #旧日志加上日志后缀
        sharedscripts  #切分后的重启脚本只运行一次
        postrotate   #切分后运行脚本重载rsyslog,让rsyslog向新的日志文件中输出日志
        /bin/kill -HUP $(/bin/cat /var/run/syslogd.pid 2>/dev/null) &>/dev/null
        endscript
    }

    6)将 logrotate 配置在 crontab 中:

    0 0 * * * /usr/sbin/logrotate /root/logrotate/haproxy

    第四步:启动

    1. 启动

    # service haproxy start

    返回信息:

    2. 重启

    # service haproxy stop

     返回信息:

    3. 停止

    # service haproxy restart

    返回信息:

    第五步:测试

    1. 查看进程

    执行以下命令:

    # ps -ef|grep haproxy|grep -v grep

    返回信息:

    2. 查看端口

    执行以下命令:

    # lsof -i:9090

    返回信息:

    3. 查看日志

    执行以下命令:

    # cat /var/log/haproxy.log

    返回信息:

    4. 转发测试

    提供服务的 server 为 Nginx,每个 nginx 上放入带有本机 IP 的 HTML 页面,相关信息如下:

    IP Nginx 端口 HAProxy端口
    192.168.6.128 8080 9090
    192.168.6.129 8080 9090
    192.168.6.130 8080 9090


    页面显示转发到了 192.168.6.130 主机上,返回信息:访问地址:http://192.168.6.128:9090/hello.html

    日志显示:

    1)HAProxy 日志

    2)Nginx 日志

    此时,HAPxoxy 已成功安装完成!

  • 相关阅读:
    7月的尾巴,你是XXX
    戏说Android view 工作流程《下》
    “燕子”
    Android开机动画bootanimation.zip
    戏说Android view 工作流程《上》
    ViewController里已连接的IBOutlet为什么会是nil
    My first App "Encrypt Wheel" is Ready to Download!
    iOS开发中角色Role所产生的悲剧(未完)
    UIScrollView实现不全屏分页的小技巧
    Apple misunderstood my app,now my app status changed to “In Review”
  • 原文地址:https://www.cnblogs.com/RUReady/p/6489024.html
Copyright © 2011-2022 走看看