Haproxy安装配置

2015/10/08 鼎马科技

Ø
Haproxy概念

Haproxy提供高可用性、负载均衡以及基于TCP和HTTP应用的代理，支持虚拟主机，它是免费、快速并且可靠的一种解决方案。Haproxy特别适用于那些负载特大的web站点，这些站点通常又需要会保持或七层处理。Haproxy运行在当前的硬件上，完全可以支持数以万计的并发连接。并且它的运行模式使得它可以很简单安全的整合进您当前的架构中，同时可以保护你的web服务器不被暴露到网络上。

Ø
安装Haproxy—绿色版—未验证

复制文件夹到服务器上，例如：/data/setupfiles/haproxy15下面

Ø
安装Haproxy—源码版

复制源码文件到服务器上，一般：/data/softwares/haproxy15下面

修改Makefile 安装路径PREFIX = /data/setupfiles/haproxy15

命令：

cd /data/softwares/haproxy15

uname –a #查看当前内核版本

make TARGET=linux31 #备注：如果内核是3.10就用linux31，一般有linux24,linux26

make install #安装，根据之前配置的prefix路径安装

复制绿色版下的haproxy.cfg、start.sh、shutdown.sh文件到安装根目录下

Ø
启动&关闭程序

用root用户启动，已验证

l  命令：

启动

cd /data/softwares/haproxy15

./sbin/haproxy -f /data/setupfiles/haproxy15/haproxy.cfg

关闭

ps -ef |grep
'/data/setupfiles/haproxy15/sbin/haproxy' |awk '{print $2}'|xargs kill -9

l  脚本：

启动

cd /data/softwares/haproxy15

sh start.sh

关闭

cd /data/softwares/haproxy15

sh shutdown.sh

Ø
配置文件详解

Haproxy配置中分成五部分内容，当然这些组件不是必选的，可以根据需要选择作为配置。

•global：参数是进程级的，通常和操作系统(OS)相关。这些参数一般只设置一次，如果配置无误，就不需要再次配置进行修改；

•default：配置默认参数的，这些参数可以被利用配置到frontend，backend，listen组件；

•frontend：接收请求的前端虚拟节点，Frontend可以根据规则直接指定具体使用后端的backend(可动态选择)；

•backend：后端服务集群的配置，是真实的服务器，一个Backend对应一个或者多个实体服务器；

•listen：Frontend和Backend的组合体。

编写haproxy.cfg文件：

global

maxconn 51200

chroot /usr/local/haproxy

uid 99

gid 99

daemon

#quiet

nbproc 1 #进程数

pidfile /usr/local/haproxy/logs/haproxy.pid

defaults

mode http #默认的模式mode { tcp|http|health
}，tcp是4层，http是7层，health只会返回OK

#retries 2 #两次连接失败就认为是服务器不可用，也可以通过后面设置

option redispatch #当serverId对应的服务器挂掉后，强制定向到其他健康的服务器

option abortonclose #当服务器负载很高的时候，自动结束掉当前队列处理比较久的链接

timeout connect 5000ms #连接超时

timeout client 30000ms #客户端超时

timeout server 30000ms #服务器超时

#timeout check 2000 #=心跳检测超时

log 127.0.0.1 local0 err #[err warning info
debug]

balance roundrobin
#负载均衡算法

#        option  httplog                        #日志类别,采用httplog

#        option  httpclose   #每次请求完毕后主动关闭http通道,ha-proxy不支持keep-alive,只能模拟这种模式的实现

#        option  dontlognull

#        option  forwardfor  #如果后端服务器需要获得客户端真实ip需要配置的参数，可以从Http Header中获得客户端ip

listen admin_stats

bind 0.0.0.0:8888 #监听端口

option httplog #采用http日志格式

stats refresh
30s #统计页面自动刷新时间

stats uri /stats #统计页面url

stats realm Haproxy
Manager #统计页面密码框上提示文本

stats auth admin:admin #统计页面用户名和密码设置

#stats hide-version #隐藏统计页面上HAProxy的版本信息

listen test1

bind :12345

mode tcp

server t1 192.168.1.101:8881

server t2 192.168.1.102:8881

listen test2 :80

option httpclose

option forwardfor

server s1 192.168.1.101:8080 check weight 1 minconn 1 maxconn 3 check inter 40000

server s2 192.168.1.102:8080 check weight 1 minconn 1 maxconn 3 check inter 40000

Ø
随系统启动

l  编写haproxy脚本

[root@node3 ~]# cat /etc/rc.d/init.d/haproxy

#!/bin/bash

BASE_DIR="/usr/local/haproxy"

ARGV="$@"

start()

{

echo "START
HAPoxy SERVERS"

$BASE_DIR/sbin/haproxy -f $BASE_DIR/haproxy.cfg

}

stop()

{

echo "STOP
HAPoxy Listen"

kill -TTOU $(cat
$BASE_DIR/logs/haproxy.pid)

echo "STOP
HAPoxy process"

kill -USR1 $(cat
$BASE_DIR/logs/haproxy.pid)

}

case $ARGV in

start)

start

ERROR=$?

;;

stop)

stop

ERROR=$?

;;

restart)

stop

start

ERROR=$?

;;

*)

echo "hactl.sh
[start|restart|stop]"

esac

exit $ERROR

l  让脚本随系统自动启动

[root@node3 ~]# chmod +x /etc/rc.d/init.d/haproxy

[root@node3 ~]# chkconfig --add haproxy

service haproxy does not support chkconfig

----解决上面的问题的办法是在/etc/rc.d/init.d/haproxy中添加下面两句到#!/bin/bash之后

[root@node3 ~]# cat /etc/rc.d/init.d/haproxy

#!/bin/bash

#chkconfig: 2345 10 90

#description:haproxy

BASE_DIR="/usr/local/haproxy"

ARGV="$@"

start()

----其中2345是默认启动级别，级别有0-6共7个级别。

----等级0表示：表示关机

----等级1表示：单用户模式

----等级2表示：无网络连接的多用户命令行模式

----等级3表示：有网络连接的多用户命令行模式

----等级4表示：不可用

----等级5表示：带图形界面的多用户模式

----等级6表示：重新启动

----10是启动优先级，90是停机优先级，优先级范围是0-100，数字越大，优先级越低。

l  启动与停止haproxy

[root@node3 ~]# service haproxy stop

STOP HAPoxy Listen

STOP HAPoxy process

[root@node3 ~]# ps -ef |grep haproxy |grep -v grep

[root@node3 ~]# service haproxy start

START HAPoxy SERVERS

[root@node3 ~]# ps -ef |grep haproxy |grep -v grep

root     11259     1  0 15:33 ?        00:00:00 /usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/haproxy.cfg