Haproxy配合apache搭建Web集群部署
一、常见的Web集群调度器
目前常见的Web集群调度器分为软件和硬件软件通常使用开源的LVS、Haproxy、Nginx
LVS性能最好,但是搭建相对复杂;Nginx的upstream模块支持集群功能,但是对集群节点健康检查功能不强,高并发没有Haproxy好
硬件一般使用的比较多的是F5,也有很多人使用梭子鱼、绿盟等国内产品
二、Haproxy应用分析
LVS在企业应用中抗负载能力很强,但存在不足
LVS不支持正则处理,不能实现动静分离
对于大型网站,LVS的实施配置复杂,维护成功相对较高
Haproxy是一款可提供高可用性、负载均衡、及基于TCP和HTTP应用的代理的软件
适用于负载大的Web站点
运行在硬件上可支持数万计的并发连接的连接请求
三、Haproxy调度算法原理
Haproxy支持多种调度算法,最常用的有三种
-
RR (Round Robin)
RR算法是最简单常用的一种算法,即轮询调度 -
LC(Least Connections)
最小连接数算法,根据后端的节点连接数大小动态分配前端请求。
-
SH(Source Hashing)
基于来源访问调度算法,用于一些有Session会话记录在服务器端的场景,可以基于来源的IP、Cookie等做集群调度
四、Haproxy搭建 Web 群集
环境配置
主机 | IP地址 |
---|---|
Haproxy-Server | 192.168.86.20 |
web-Server1 | 192.168.86.30 |
web-Server2 | 192.168.86.40 |
客户端(win7) | 192.168.86.100 |
- 部署haproxy服务器
关闭防火墙,安装haproxy
systemctl stop firewalld
setenforce 0
cd /opt
haproxy-1.5.19.tar.gz
yum install -y pcre-devel bzip2-devel gcc gcc-c++ make
tar zxvf haproxy-1.5.19.tar.gz
cd haproxy-1.5.19/
make TARGET=linux2628 ARCH=x86_64&& make install
Haproxy服务器配置
mkdir /etc/haproxy
cp examples/haproxy.cfg /etc/haproxy/
cd /etc/haproxy/
vim haproxy.cfg
- 部署apache web服务器(2台相同)
systemctl stop firewalld
setenfoce 0
yum -y install httpd
cd /var/www/html
echo "backroom" > /var/www/html/test.html #(web1)
echo "uproom" > /var/www/html/test.html #(web2)
- 启动haproxy服务
cp /opt/haproxy-1.5.19/examples/haproxy.init /etc/init.d/haproxy
cd /etc/init.d/
ls
chmod +x haproxy
chkconfig --add /etc/init.d/haproxy
ln -s /usr/local/sbin/haproxy /usr/sbin/haproxy
service haproxy start 或 /etc/init.d/haproxy start
- 测试
五、日志定义
默认haproxy的日志是输出到系统的syslog中,查看起来不是非常方便,为了更好的管理haproxy的日志,我们在生产环境中一般单独定义出来。需要将haproxy的info及notice日志分别记录到不同的日志文件中。
vim /etc/haproxy/haproxy.cfg
global
log /dev/log local0 info
log /dev/log local0 notice
service haproxy restart
需要修改rsyslog配置,为了便于管理。将haproxy相关的配置独立定义到haproxy.conf,并放到/etc/rsyslog.d/下,rsyslog启动时会自动加载此目录下的所有配置文件。
vim /etc/rsyslog.d/haproxy.conf
if ($programname == 'haproxy' and $syslogseverity-text == 'info')
then -/var/log/haproxy/haproxy-info.log
&~
if ($programname == 'haproxy' and $syslogseverity-text == 'notice')
then -/var/log/haproxy/haproxy-notice.log
&~
说明:
这部分配置是将haproxy的info日志记录到/var/log/haproxy/haproxy-info.log下,将notice日志记录到/var/log/haproxy/haproxy-notice.log下。“&~”表示当日志写入到日志文件后,rsyslog停止处理这个信息。
systemctl restart rsyslog.service
tail -f /var/log/haproxy/haproxy-info.log #查看haproxy的访问请求日志信息
表示当日志写入到日志文件后,rsyslog停止处理这个信息。
systemctl restart rsyslog.service
tail -f /var/log/haproxy/haproxy-info.log #查看haproxy的访问请求日志信息