Haproxy的介绍和安装
Haproxy的介绍和安装Haproxy介绍
软件介绍
Haproxy是一个开源的高性能的反向代理或者说是负载均衡服务软件之一,它支持双机热备,虚拟主机,基于TCP和HTTP应用代理等功能。配置简单,而且拥有服务器节点的健康检查功能(相当于keepalived健康检查),当后端服务器宕机时,haproxy会自动将故障服务器摘除,当服务器故障恢复后,再自动加入到集群中。
Haproxy特别在适用于那些访问量很大,但又需要会话保持或七层应用的业务。支持两种主要的代理模式:4层Tcp代理(例如邮件服务,mysql业务,ssh等)和7层(HTTP代理)。在4层tcp模式下,haproxy仅在客户端和服务器之间转发双向流量。7层模式下haproxy会分析应用层协议,并且能通过允许,拒绝,交换,增加,修改或者删除请求或者回应里指定内容来控制协议
Haproxy采用的是NAT模式,数据包来去都会经过haproxy。
4层代理和7层代理介绍
Haproxy软件的4层tcp代理应用非常优秀,配置非常简单方便,比lvs和nginx要方便的多,haproxy不需要在RS端执行脚本即可实现应用代理
http://s3.运维网.com/wyfs02/M01/6E/A1/wKioL1WBRQixnaolAAOHoxZE8bc088.jpg
从上图可以看出,haproxy采用的是NAT的工作模式,网站所有流量都经过haproxy,所以适用于那些访问量不是特别大的网站,在一般的中小型公司,建议使用haproxy做负载均衡。
Haproxy最大额优点在于其7层的根据URL请求头应用过滤的功能,在门户网站的高并发生产架构中。Haproxy软件一般用在LVS软件的下一层,或挂在硬件负载均衡althon、NS、F5下使用
http://s3.运维网.com/wyfs02/M02/6E/A5/wKiom1WBQ2zRnLSvAAQmjxeSqpQ525.jpg
Haproxy安装部署
下载软件包,并安装
cd /usr/src
wget http://down1.chinaunix.net/distfiles/haproxy-1.4.21.tar.gz
tar zxf haproxy-1.4.21.tar.gz
cd haproxy-1.4.21
make TARGET=linux26 ARCH=x86_64
make PREFIX=/usr/local/haproxy-1.4.21 install
ln -s /usr/local/haproxy-1.4.21/ /usr/local/haproxy
说明:
1. make TARGET=linux26ARCH=x86_64 是64位系统的编译方式
32位系统的编译方式为:
makeTARGET=linux26 ARCH=x86
2. TARGET 后面是系统内核,不同版本的linux系统,内核版本不一样。可以 moreREADME 查看详细信息
创建相关目录,使软件更结构化
默认的文件结构为:
# tree
├── doc
│└── haproxy
│ ├── architecture.txt
│ ├── configuration.txt
│ ├── haproxy-en.txt
│ └── haproxy-fr.txt
├── sbin
│└── haproxy
└── share
└── man
└── man1
└── haproxy.1
6 directories, 6 files
现在创建 bin conf logsvar/chroot var/run等目录
cd /usr/local/haproxy
mkdir -p conf bin logs var/run var/chroot
查看:
# tree
.
├── bin
├── conf
├── doc
│ └── haproxy
│ ├──architecture.txt
│ ├──configuration.txt
│ ├── haproxy-en.txt
│ └── haproxy-fr.txt
├── logs
├── sbin
│ └── haproxy
├── share
│ └── man
│ └── man1
│ └── haproxy.1
└── var
├── chroot
└── run
12 directories, 6 files
至此,haproxy已经安装完成。配置需要我们手动创建,下面先简单进行配置,并测试
Haproxy主配置文件
cat >/usr/local/haproxy/conf/haproxy.conf&1
$PROG-f $CONFFILE
[ $?-eq 0 ] && {
action"haproxy start isOK..."/bin/true
} || action"haproxy start is error..." /bin/false
;;
status)
if [ !-f $PIDFILE ]; then
echo"pid not found"
exit1
fi
forpid in $(cat $PIDFILE); do
kill-0 $pid
RETVAL="$?"
if[ ! "$RETVAL" = "0" ]; then
echo"process $pid died"
exit1
fi
done
echo"process is running"
;;
restart)
$PROG-f $CONFFILE -sf $(cat $PIDFILE) >/dev/null 2>&1
;;
stop)
kill$(cat $PIDFILE)
[ $? -eq 0 ] && {
action"haproxy stop isOK..."/bin/true
} || action"haproxy stop is error..." /bin/false
;;
*)
echo"USAGE: $0 start|restart|status|stop"
exit 1
;;
esac
把启动文件放在bin目录下,并赋予执行权限,添加开机自启动
chmod 755 haproxy
echo "/usr/local/haproxy/bin/haproxystart" >> /etc/rc.local
tail -1 /etc/rc.local
查看结果: /usr/local/haproxy/bin/haproxy start
启动haproxy,并测试
/usr/local/haproxy/bin/haproxy start
启动结果:
# /usr/local/haproxy/bin/haproxystart
269/165754 (1791) : Proxy 'admin_status': in multi-process mode, stats willbe limited to process assigned to the current request.
haproxystart isOK... [确定]
# netstat -anput | grep haproxy
tcp 0 0 192.168.1.104:80 0.0.0.0:* LISTEN 1792/haproxy
tcp 0 0 0.0.0.0:8080 0.0.0.0:* LISTEN 1792/haproxy
udp 0 0 0.0.0.0:38073 0.0.0.0:* 1792/haproxy
# ps -aux | grephaproxy
Warning:bad syntax, perhaps a bogus '-'? See /usr/share/doc/procps-3.2.8/FAQ
haproxy 1792 0.00.618312 3348 ? Ss 16:57 0:00 /usr/local/haproxy/sbin/haproxy -f/usr/local/haproxy/conf/haproxy.conf
haproxy 1793 0.00.618312 3348 ? Ss 16:57 0:00 /usr/local/haproxy/sbin/haproxy -f/usr/local/haproxy/conf/haproxy.conf
haproxy 1794 0.00.618312 3348 ? Ss 16:57 0:00 /usr/local/haproxy/sbin/haproxy -f/usr/local/haproxy/conf/haproxy.conf
haproxy 1795 0.00.618312 3348 ? Ss 16:57 0:00 /usr/local/haproxy/sbin/haproxy -f/usr/local/haproxy/conf/haproxy.conf
haproxy 1796 0.00.618312 3348 ? Ss 16:57 0:00 /usr/local/haproxy/sbin/haproxy -f/usr/local/haproxy/conf/haproxy.conf
haproxy 1797 0.00.618312 3348 ? Ss 16:57 0:00 /usr/local/haproxy/sbin/haproxy -f/usr/local/haproxy/conf/haproxy.conf
haproxy 1798 0.00.618312 3348 ? Ss 16:57 0:00 /usr/local/haproxy/sbin/haproxy -f/usr/local/haproxy/conf/haproxy.conf
haproxy 1799 0.00.618312 3348 ? Ss 16:57 0:00 /usr/local/haproxy/sbin/haproxy -f/usr/local/haproxy/conf/haproxy.conf
root 1804 0.00.1 103244 868 pts/0 S+ 16:59 0:00 grep haproxy
haproxy已经成功启动。查看发现,80端口和8080端口已经监听,而且有8个进程在系统后台。下面开始测试
# for ((i=1;i>/etc/rsyslog.conf/etc/sysctl.conf
sysctl -p
所以这种方法有效解决了在主备haproxy环境下,VIP不在备haproxy上时,备haproxy能正常启动的问题
由于haproxy工作模式是NAT模式,为了更好的实现转发请求,需要开启linux本身的转发功能
sed -i "s/net.ipv4.ip_forward =0/net.ipv4.ip_forward = 1/g" /etc/sysctl.conf
sysctl -p
Haproxy多实例配置
Haproxy支持多实例,每个实例可以有自己的单独配置文件。启动的时候用-f指定配置文件即可。下面增加一个实例,用来代理ssh服务
cat > /usr/local/haproxy/conf/haproxy-ssh.conf
页:
[1]