CentOS 7下Keepalived + HAProxy 搭建配置详解

CentOS 7Keepalived + 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.0TARGET指定为 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\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

 

日志显示:

1HAProxy 日志


2Nginx 日志


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

以下文章点击率最高

Loading…

     

如果这文章对你有帮助,请扫左上角微信支付-支付宝,给于打赏,以助博客运营