RELATEED CONSULTING
相关咨询
选择下列产品马上在线沟通
服务时间:9:30-18:00
你可能遇到了下面的问题
关闭右侧工具栏
CentOS-7 Keepalived + HAProxy 搭建HAProxy 的安装和配置
  • 作者:爱牛网络
  • 发表时间:2017-03-02 07:21
  • 来源:爱牛网络

爱牛网络安全全面解决企业网络安全问题,提供SSL证书申请购买安装,ssl数字证书,赛门铁克ssl,verisign证书,代码签名证书,https加密,ev ssl证书,服务器证书,云服务器安全,网站安全,web安全,防DDoS攻击,防CC攻击,CDN加速,网站加速,高防DNS。

第一步:准备
 
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。爱牛网络安全全面解决企业网络安全问题,提供SSL证书申请购买安装,ssl数字证书,赛门铁克ssl,verisign证书,代码签名证书,https加密,ev ssl证书,服务器证书,云服务器安全,网站安全,web安全,防DDoS攻击,防CC攻击,CDN加速,网站加速,高防DNS。
 
第三步:配置
 
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注册为系统服务   爱牛网络安全全面解决企业网络安全问题,提供SSL证书申请购买安装,ssl数字证书,赛门铁克ssl,verisign证书,代码签名证书,https加密,ev ssl证书,服务器证书,云服务器安全,网站安全,web安全,防DDoS攻击,防CC攻击,CDN加速,网站加速,高防DNS。
 
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\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
复制代码
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 已成功安装完成!

爱牛网络安全全面解决企业网络安全问题,提供SSL证书申请购买安装,ssl数字证书,赛门铁克ssl,verisign证书,代码签名证书,https加密,ev ssl证书,服务器证书,云服务器安全,网站安全,web安全,防DDoS攻击,防CC攻击,CDN加速,网站加速,高防DNS。