• 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 已成功安装完成!

  • 相关阅读:
    MSMQ实现自定义序列化存储
    流程部署的查询、删除、流程
    使用trello管理你的项目
    CentOS 6.4 编译安装 gcc 4.8.1
    jquery实现无限滚动瀑布流实现原理
    系统分析员备考之经济管理篇(二)
    架构、架构师和架构设计
    ASP.net Web API综合示例
    c中函数参数传递
    准备抽象NHibernate和EntityFramework
  • 原文地址:https://www.cnblogs.com/RUReady/p/6489024.html
Copyright © 2020-2023  润新知