HAProxy负载均衡

HAProxy的安装和运行

安装

为HAProxy创建用户和用户组,此例中用户和用户组都是"haproxy"。注意,如果想要让HAProxy监听1024以下的端口,则需要以root用户来启动

下载并解压

wget http://www.haproxy.org/download/1.7/src/haproxy-1.7.2.tar.gz
tar -xzf haproxy-1.7.2.tar.gz

编译并安装

make PREFIX=/usr/local/haproxy TARGET=linux2628
make install PREFIX=/usr/local/haproxy

PREFIX为指定的安装路径,TARGET则根据当前操作系统内核版本指定

创建HAProxy配置文件

mkdir -p /usr/local/haproxy/conf
vi /home/ha/haproxy/conf/haproxy.cfg
global #全局属性
    daemon  #以daemon方式在后台运行
    maxconn 256  #最大同时256连接
    pidfile /usr/local/haproxy/run/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 *:8080  #监听8080端口
    default_backend servers  #请求转发至名为"servers"的后端服务

backend servers #后端服务servers
    server server1 127.0.0.1:8000 maxconn 32  #backend servers中只有一个后端服务,名字叫server1,起在本机的8000端口,HAProxy同时最多向这个服务发起32个连接

将HAProxy注册为系统服务

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

#! /bin/sh
set -e

PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/haproxy/sbin
PROGDIR=/usr/local/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\n"
       $DAEMON -f $CONFIG
       echo "."
}

stop()
{
       echo -e "Stopping $DESC: $PROGNAME\n"
       haproxy_pid="$(cat $PIDFILE)"
       kill $haproxy_pid
       echo "."
}

restart()
{
       echo -e "Restarting $DESC: $PROGNAME\n"
       $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

运行

  • 添加日志

HAProxy不会直接输出文件日志,所以我们要借助Linux的rsyslog来让HAProxy输出日志

在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

  • 为rsyslog添加haproxy日志的配置

    vi /etc/rsyslog.d/haproxy.conf
    
    $ModLoad imudp
    $UDPServerRun 514
    $FileCreateMode 0644  #日志文件的权限
    $FileOwner ha  #日志文件的owner
    local0.*     /var/log/haproxy.log  #local0接口对应的日志输出文件
    local1.*     /var/log/haproxy_warn.log  #local1接口对应的日志输出文件
    
  • 修改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"
  • 重启rsyslog和HAProxy

    service rsyslog restart
    service haproxy restart
    

此时就应该能在/var/log目录下看到haproxy的日志文件了

  • 用logrotate进行日志切分

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

    并配置在crontab中运行:

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

搭建L7负载均衡器

搭建L4负载均衡器

使用Keepalived实现HAProxy高可用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值