Keepalived + HAProxy 搭建【第一篇】HAProxy 的安装和配置
第一步:准备
1. 操作系统
CentOS-7-x86_64-Everything-1511
2. 安装包
haproxy-1.7.2.tar.gz
第二步:安装
# tar zxvf haproxy-.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连接
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:9 #监听9090端口
default_backend servers #请求转发至名为"servers"的后端服务
backend servers #后端服务servers
balance roundrobin #使用RR负载均衡算法
server server1 192.168.6.128: maxconn #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
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
;;
esac
exit
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 by "-c 2" # See rsyslogd() 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份
create root root #创建新文件的权限、用户、用户组
compress #压缩旧日志
delaycompress #延迟一天压缩
missingok #忽略文件不存在的错误
dateext #旧日志加上日志后缀
sharedscripts #切分后的重启脚本只运行一次
postrotate #切分后运行脚本重载rsyslog,让rsyslog向新的日志文件中输出日志
/bin/kill -HUP $(/bin/cat /var/run/syslogd.pid >/dev/null) &>/dev/null
endscript
}
6)将 logrotate 配置在 crontab 中:
* * * /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:
返回信息:

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 的安装和配置的更多相关文章
- 从零开始使用git第一篇:下载安装配置
从零开始使用git 第一篇:下载安装配置 第一篇:从零开始使用git第一篇:下载安装配置 第二篇:从零开始使用git第二篇:git实践操作 第三篇:从零开始使用git第三篇:git撤销操作.分支操作和 ...
- 第一篇博客 安装open live writer
第一篇博客安装open live writer http://openlivewriter.org/ 有的人可能会打不开,所以我准备了一个百度云的链接地址 链接:https://pan.baidu.c ...
- 从零开始搭建系统2.8——HDFS安装及配置
从零开始搭建系统2.8——HDFS安装及配置
- g4e基础篇#3 Git安装与配置
g4e 是 Git for Enterprise Developer的简写,这个系列文章会统一使用g4e作为标识,便于大家查看和搜索. 章节目录 前言 1. 基础篇: 为什么要使用版本控制系统 Git ...
- NODEJS环境搭建 第一篇 安装和部署NODEJS
一.下载安装文件 根据自己当前系统环境,下载相对应的安装文件 https://nodejs.org/en/download/ 二.双击安装 都傻瓜式的安装步骤,一步一步安装就好了. 三.检查安装结果 ...
- 《postfix MAIL服务搭建(第一篇):》RHEL6
初级篇:搭建发送端.接收端.邮件别名的添加从而达到邮件群发功能的实现. 我们都知道邮件服务器是2个服务端也就是说2个端口,一个是发送的端口,一个是收邮件的端口,我们平常所使用的发送,接收邮件的过程,只 ...
- zabbix第一篇:zabbix安装及使用
常用软件安装及使用目录 一:搭建zabbix命令集 cat /etc/redhat-release uname -r getenforce systemctl status firewalld.ser ...
- 第一篇 -- 下载并安装IDEA
此篇讲的是安装IDEA企业版,社区版是免费的,就不多说了. 参考链接:https://www.exception.site/essay/how-to-free-use-intellij-idea-20 ...
- Python【第一篇】python安装、pip基本用法、变量、输入输出、流程控制、循环
一.python安装 Ubuntu下 系统版本已经同时安装了python2和python3 如果没有python3,可以参考这个貌似是印度阿三的安装视频:http://v.youku.com/v_sh ...
- 第一篇 -- Jmeter的安装下载
参考链接:https://blog.csdn.net/wust_lh/article/details/86095924 本篇介绍的是在Windows下安装Jmeter. 一.下载Jmeter 官网下载 ...
随机推荐
- linux下启动tomcat----Cannot find ./catalina.sh
参考:http://dearseven.blog.163.com/blog/static/1005379222013764440253/ linux 下启动tomcat [root@test233 b ...
- Selenium2(java)环境搭建 一
Selenium2(java)环境搭建 1.下载JDK http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2 ...
- Bootstrap兼容IE8
使用BootStrap3.x写的公司一个响应式项目在IE下面错误百出,经过一番折腾.全部解决了IE8下的兼容问题. 这里汇总一下,希望对大家有所帮助. 1. Bootstrap UI整体在IE8下变窄 ...
- linux学习笔记----权限与命令之间的关系(极重要)
一.权限与命令之间的关系 二.文件与目录的默认权限与隐藏权限 1)umask为默认的权限(通过umask -S)查看你的系统的默认权限. umask的分数是指该默认值需要减掉的权限,比如说umask= ...
- 查找子字符串----KMP算法深入剖析
假设主串:a b a b c a b c a c b a b 子串:a b c a c 1.一般匹配算法 逐个字符的比较,匹配过程如下: 第一趟匹配 a b a b c a b c a c ...
- spring mvc ajax请求
jar包中增加 jackson-annotations-2.5.0.jar jackson-core-2.5.0.jar jackson-databind-2.5.0.jar springmvx.xm ...
- Android内存泄露---检测工具篇
内存使用是程序开发无法回避的一个问题.如果我们毫不在意肆意使用,总有一天会为此还账,且痛不欲生...所以应当防患于未然,把内存使用细化到平时的每一行代码中. 内存使用概念较大,本篇先讲对已有app如何 ...
- java7 invokedynamic命令深入研究
在看java虚拟机字节码执行引擎的时候,里面提到了java虚拟机里调用方法的字节码指令有5种: invokestatic //调用静态方法 invokespecial //调用私有方法.实例构造器方法 ...
- 为 Jenkins 配置 .Net 持续集成环境
去年年底,得益于公司引入 Jenkins,让我们在持续集成方面迈出了第一步,本文不赘述如何安装 Jenkins,主要关注点在于配置 .Net 环境.另外本文是在 Windows 环境下安装的 Jenk ...
- mac下导出kindle单词本的单词
平常都是用kindle来看电子书,偶尔也会看上一些英文书籍,不可避免的会遇到不少陌生的单词,而kindle专门针对这种需求,做了不少优化,可以直接在kindle上面查阅单词,甚至可以背单词.但是毕竟不 ...