Haproxy配合apache搭建Web集群部署

259 阅读3分钟

一、常见的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-Server192.168.86.20
web-Server1192.168.86.30
web-Server2192.168.86.40
客户端(win7)192.168.86.100
  1. 部署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

image.png

image.png

  1. 部署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)
    
  2. 启动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
    
  3. 测试

image.png

image.png

五、日志定义

默认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的访问请求日志信息