HAProxy源码编译安装与配置实践


参考资料:
http://blog.51yip.com/server/868.html
http://18567.blog.51cto.com/8567/665375

一,什么是haproxy
HAProxy提供高可用性、负载均衡以及基于TCP和HTTP应用的代理,其处理能力比Nginx弱一些,一般适用于访问量并发在1万以下的小型集群,自带的一些健康检查,session保留等功能非常实用。

二,安装haproxy
# wget http://haproxy.1wt.eu/download/1.4/src/haproxy-1.4.20.tar.gz
# tar zxvf haproxy-1.4.20.tar.gz
# cd haproxy-1.4.20
# uname -a //查看linux内核版本
# make TARGET=linux26 PREFIX=/opt/haproxy
# make install PREFIX=/opt/haproxy

三,配置haproxy
# mkdir -p /opt/haproxy/conf
# vim /opt/haproxy/conf/haproxy.conf

global
        maxconn 5120 #限制单个进程的最大连接数
        chroot /opt/haproxy
        uid 99 #所属运行用户,默认99为nobody
        gid 99 #所属运行用户组,默认99为nobody
        daemon #让进程作为守护进程在后台运行
        quiet
        nbproc 2 #指定作为守护进程运行时的进程数,推荐设置为与CPU核心数相同
        pidfile /opt/haproxy/run/haproxy.pid

defaults
        log     global
        mode    http
        option  httplog
        option  dontlognull #不记录空连接
        log 127.0.0.1 local3 info #日志级别[err warning info debug]
        retries 3 #设置在一个服务器上链接失败后的重连次数
        option redispatch #在连接失败或断开的情况下,允许当前会话被重新分发 
        maxconn 2000 #可被发送到后端服务器的最大并发连接数 
        contimeout      5000ms #设置等待连接到服务器成功的最大时间 
        clitimeout      50000ms #设置客户端的最大超时时间
        srvtimeout      50000ms #设置服务器端的最大超时时间

listen cluster 0.0.0.0:80 #运行的端口及主机名
       mode http #使用http的7层模式
       balance roundrobin #设置服务器负载分配算法
       option httpclose
       option forwardfor
       option httpchk GET /keepalive.html #健康检测页面
       server webapp1 192.168.203.134:80 weight 1 check inter 2000 rise 2 fall 3
       server webapp2 192.168.203.135:80 weight 1 check inter 2000 rise 2 fall 3
       server webapp3 192.168.203.136:80 weight 1 check inter 2000 rise 2 fall 3
       server webapp4 192.168.203.137:80 weight 1 check inter 2000 rise 2 fall 3
       # weight - 调节服务器的负重 
       # check - 允许对该服务器进行健康检查 
       # inter - 设置连续的两次健康检查之间的时间,单位为毫秒(ms),默认值 2000(ms) 
       # rise - 指定多少次连续成功的健康检查后,即可认定该服务器处于可操作状态,默认值 2 
       # fall - 指定多少次不成功的健康检查后,认为服务器为当掉状态,默认值 3 
       # maxconn - 指定可被发送到该服务器的最大并发连接数 

listen localhost 0.0.0.0:8888 #监控页面的端口
       mode http
       transparent
       stats refresh 30s #统计页面自动刷新时间
       stats uri /haproxy-stats #监控页面的访问地址
       stats realm Haproxy \ statistic #统计页面密码框上提示文本
       stats auth haproxyadmin:haproxypass #统计页面用户名和密码设置
       stats hide-version #隐藏统计页面上HAProxy的版本信息

四,配置haproxy服务脚本
# mkdir /opt/haproxy/init.d/
# mkdir -p /opt/haproxy/run/
# vim /opt/haproxy/init.d/haproxy

#! /bin/sh

PROGDIR=/opt/haproxy
PROGNAME=haproxy
DAEMON=$PROGDIR/sbin/$PROGNAME
CONFIG=$PROGDIR/conf/$PROGNAME.conf
PIDFILE=$PROGDIR/run/$PROGNAME.pid
DESC="HAProxy daemon"
SCRIPTNAME=/opt/haproxy/init.d/$PROGNAME

# Gracefully exit if the package has been removed.
test -x $DAEMON || exit 0

start()
{
    echo -n "Starting $DESC: $PROGNAME"
    $DAEMON -f $CONFIG
    echo "."
}

stop()
{
    echo -n "Stopping $DESC: $PROGNAME"
    cat $PIDFILE | xargs kill
    echo "."
}

case "$1" in
  start)
    start
    ;;
  stop)
    stop
    ;;
*)
    echo "Usage: $SCRIPTNAME {start|stop}" >&2
    exit 1
    ;;
esac
exit 0

# chmod +x /opt/haproxy/init.d/haproxy

优化系统参数
# vim /etc/security/limits.conf

* soft nofile 65535
* hard nofile 65535

# vim /etc/pam.d/login

session    required     pam_limits.so

#启动haproxy
# /opt/haproxy/init.d/haproxy start

通过统计监听页面,可以看到后端服务器的状态,如下图所示:
http://192.168.203.133:8888/haproxy-stats

通过浏览器直接访问http://192.168.203.133,可以发现,在多次刷新之后,请求会随机分配到后端的Web服务器上。

五,配置haproxy日志
# mkdir /opt/haproxy/log
# touch /opt/haproxy/log/haproxy.log

# vim /etc/sysconfig/syslog
修改以下配置:

SYSLOGD_OPTIONS="-m 0 -r -x"

# vim /etc/syslog.conf
添加以下配置:

local3.*         /opt/haproxy/log/haproxy.log

# /etc/init.d/syslog restart

# /opt/haproxy/init.d/haproxy stop
# /opt/haproxy/init.d/haproxy start

  1. #1 by 君临天下 on 2012/08/14 - 11:17

    借鉴参看了 非常感谢 非常好!

  2. #2 by 采菊篱下 on 2014/11/26 - 21:08

    你的启动脚本 start中少了一个-p 参数 指定pid文件的

    • #3 by mcsrainbow on 2014/11/27 - 12:11

      pid在配置文件中已经指定了,脚本里面主要是用于stop的时候获取它。

(will not be published)
*