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端执行脚本即可实现应用代理
从上图可以看出,haproxy采用的是NAT的工作模式,网站所有流量都经过haproxy,所以适用于那些访问量不是特别大的网站,在一般的中小型公司,建议使用haproxy做负载均衡。
Haproxy 最大额优点在于其7层的根据URL请求头应用过滤的功能,在门户网站的高并发生产架构中。Haproxy软件一般用在LVS软件的下一层,或挂在硬件负载均衡althon、NS、F5下使用
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=linux26 ARCH=x86_64 是64位系统的编译方式
32位系统的编译方式为:
make TARGET=linux26 ARCH=x86
2. TARGET 后面是系统内核,不同版本的linux系统,内核版本不一样。可以 more README 查看详细信息
创建相关目录,使软件更结构化
默认的文件结构为:
[root@localhost haproxy]# 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
查看:
[root@localhost haproxy]# 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 is OK..." /bin/true
} || action "haproxy start is error..." /bin/false
;;
status)
if [ ! -f $PIDFILE ]; then
echo "pid not found"
exit 1
fi
for pid in $(cat $PIDFILE); do
kill -0 $pid
RETVAL="$?"
if [ ! "$RETVAL" = "0" ]; then
echo "process $pid died"
exit 1
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 is OK..." /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/haproxy start" >> /etc/rc.local
tail -1 /etc/rc.local
查看结果: /usr/local/haproxy/bin/haproxy start
启动haproxy,并测试
/usr/local/haproxy/bin/haproxy start
启动结果:
[root@localhost bin]# /usr/local/haproxy/bin/haproxy start
[WARNING] 269/165754 (1791) : Proxy 'admin_status': in multi-process mode, stats will be limited to process assigned to the current request.
haproxy start is OK... [ 确定 ]
[root@localhost bin]# 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
[root@localhost bin]# ps -aux | grep haproxy
Warning: bad syntax, perhaps a bogus '-'? See /usr/share/doc/procps-3.2.8/FAQ
haproxy 1792 0.0 0.6 18312 3348 ? Ss 16:57 0:00 /usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/conf/haproxy.conf
haproxy 1793 0.0 0.6 18312 3348 ? Ss 16:57 0:00 /usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/conf/haproxy.conf
haproxy 1794 0.0 0.6 18312 3348 ? Ss 16:57 0:00 /usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/conf/haproxy.conf
haproxy 1795 0.0 0.6 18312 3348 ? Ss 16:57 0:00 /usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/conf/haproxy.conf
haproxy 1796 0.0 0.6 18312 3348 ? Ss 16:57 0:00 /usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/conf/haproxy.conf
haproxy 1797 0.0 0.6 18312 3348 ? Ss 16:57 0:00 /usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/conf/haproxy.conf
haproxy 1798 0.0 0.6 18312 3348 ? Ss 16:57 0:00 /usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/conf/haproxy.conf
haproxy 1799 0.0 0.6 18312 3348 ? Ss 16:57 0:00 /usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/conf/haproxy.conf
root 1804 0.0 0.1 103244 868 pts/0 S+ 16:59 0:00 grep haproxy
haproxy 已经成功启动。查看发现,80端口和8080端口已经监听,而且有8个进程在系统后台。下面开始测试
[root@localhost bin]# 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服务
[table][tr][td=1,1,697]cat > /usr/local/haproxy/conf/haproxy-ssh.conf
运维网声明
1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网 享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com