第一步:准备

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

Keepalived + HAProxy 搭建【第一篇】HAProxy 的安装与配置的更多相关文章

  1. 从零开始使用git第一篇:下载安装配置

    从零开始使用git 第一篇:下载安装配置 第一篇:从零开始使用git第一篇:下载安装配置 第二篇:从零开始使用git第二篇:git实践操作 第三篇:从零开始使用git第三篇:git撤销操作.分支操作和 ...

  2. 第一篇博客 安装open live writer

    第一篇博客安装open live writer http://openlivewriter.org/ 有的人可能会打不开,所以我准备了一个百度云的链接地址 链接:https://pan.baidu.c ...

  3. 从零开始搭建系统2.8——HDFS安装及配置

    从零开始搭建系统2.8——HDFS安装及配置

  4. g4e基础篇#3 Git安装与配置

    g4e 是 Git for Enterprise Developer的简写,这个系列文章会统一使用g4e作为标识,便于大家查看和搜索. 章节目录 前言 1. 基础篇: 为什么要使用版本控制系统 Git ...

  5. NODEJS环境搭建 第一篇 安装和部署NODEJS

    一.下载安装文件 根据自己当前系统环境,下载相对应的安装文件 https://nodejs.org/en/download/ 二.双击安装 都傻瓜式的安装步骤,一步一步安装就好了. 三.检查安装结果 ...

  6. 《postfix MAIL服务搭建(第一篇):》RHEL6

    初级篇:搭建发送端.接收端.邮件别名的添加从而达到邮件群发功能的实现. 我们都知道邮件服务器是2个服务端也就是说2个端口,一个是发送的端口,一个是收邮件的端口,我们平常所使用的发送,接收邮件的过程,只 ...

  7. zabbix第一篇:zabbix安装及使用

    常用软件安装及使用目录 一:搭建zabbix命令集 cat /etc/redhat-release uname -r getenforce systemctl status firewalld.ser ...

  8. 第一篇 -- 下载并安装IDEA

    此篇讲的是安装IDEA企业版,社区版是免费的,就不多说了. 参考链接:https://www.exception.site/essay/how-to-free-use-intellij-idea-20 ...

  9. Python【第一篇】python安装、pip基本用法、变量、输入输出、流程控制、循环

    一.python安装 Ubuntu下 系统版本已经同时安装了python2和python3 如果没有python3,可以参考这个貌似是印度阿三的安装视频:http://v.youku.com/v_sh ...

  10. 第一篇 -- Jmeter的安装下载

    参考链接:https://blog.csdn.net/wust_lh/article/details/86095924 本篇介绍的是在Windows下安装Jmeter. 一.下载Jmeter 官网下载 ...

随机推荐

  1. js 如何判断鼠标点击事件还是js代码调用

    <html> <head> <meta http-equiv="Content-Type" content="text/html; char ...

  2. 最近iOS开发遇到的问题

    1)计算器,编辑框键盘: 2)类间参量引用传递: 3)饼状图: 4)折线图: 5)uicollection使用: 6)富文本开发: 7)separatorInset,layoutMargins uit ...

  3. Java经典案例之-“成绩等级划分”

    /** * 描述:在对话框中输入学习成绩,利用条件运算符的嵌套来完成此题:学习成绩>=90分的同学用A表示,60-89分之间的用B表示, * 60分以下的用C表示. * 分析:可以利用三目运算符 ...

  4. win8 64位+Oracle 11g 64位下使用PL/SQL Developer 的解决办法

    1)安装Oracle 11g 64位2)安装32位的Oracle客户端( instantclient-basic-win32-11.2.0.1.0)下载 instantclient-basic-win ...

  5. 使用Flex4容器若干技巧

    本文适用于正在寻找使用Flex 4容器和布局的快速参考指南的开发人员. 尽管这不一定是一个复杂问题,但这似乎是许多开发人员的挫折的来源,特别是对于那些Flex刚刚入门的开发人员. 当开发人员不知道如何 ...

  6. Java中的集合类型的继承关系图

    Java中的集合类型的继承关系图

  7. CodeForces757B

    B. Bash's Big Day time limit per test 2 seconds memory limit per test 512 megabytes input standard i ...

  8. easyui treegrid实现显示checkbox并能获取到选定值的

    闲聊: 小颖最近忙疯了,经常被加班,昨天都要下班了,又提了个需求,虽然写的代码不多只有几行,可是测试环境很难跑通,一会就ie崩溃了,所以弄得小颖最近老是头晕. 也不知道最近是怎么了,一向特别爱吃的小颖 ...

  9. ubuntu-16.04(linux)使用Reaver爆破wifi密码(路由器的WPS功能漏洞)

    路由器的WPS功能 很多路由器都有WPS功能, 这边的WPS不是office工具软件, 而是路由器的一个功能: 路由器中WPS是由Wi-Fi联盟所推出的全新Wi-Fi安全防护设定(Wi-Fi Prot ...

  10. 做一个项目前搭建一个tabBar(一)框架

    前言 通常做一个项目前,不算开始讨论需求,分析产品等等,一开始会给我们搭建一个框架,今天简单说一下搭建框架. github网址:https://github.com/Moonths/iWatch.gi ...