使用Haproxy搭建Web群集

我们知道Nginx、LVS都可以做负载均衡,它们都具有各自的特点,今天介绍另一款比较流行的集群调度工具Haproxy,首先介绍负载均衡常用调度算法,然后介绍Haproxy搭建Web集群的案例环境,接下来重点介绍Haproxy搭建Web集群的安装配置和日志配置,最后介绍了Haproxy的参数优化

一、案例分析

1、案例概述

Haproxy是目前比较流行的一种集群调度工具,同类集群调度工具有很多,如LVS和Nginx,相比较而言,LVS性能最好,但是搭建相对复杂,Nginx的upstream模块支持集群功能,但是对集群节点健康检查功能不强,性能没有Haproxy好。Haproxy官方网站是

本案例介绍使用Haproxy及Nginx搭建一套Web集群

2、案例前置知识点

(1)HTTP请求

通过URL访问网站使用的协议是HTTP协议,此类请求一般称为HTTP请求。HTTP请求的方式分为GET方式和POST方式。当使用浏览器访问某一个URL,会根据请求URL返回状态码,通常正常的状态码为2 * * 、3 * *(如200、301),如果出现异常会返回4 * * 、5 * *(如400、500)。

例如,访问?id=123,就是一个GET请求,如果访问正常,会从服务器的日志中获取200状态码。假如此请求使用POST方式,那么传递给a.php的id参数依旧是123,但是浏览器的URL将不会显示后面的id=123字样,因此表单类或者有用户名、密码等内容提交时建议使用POST方式。不管使用什么方式。最终a.php获取的值是一样的

(2)负载均衡常用调度算法

LVS、Haproxy、Nginx最常用的调度算法有三种,如下所述

RR(Round  Robin)。RR算法是最简单最常用的一种算法,即轮询调度。例如,有三个节点A、B、C,第一个用户访问会被指派到节点A,第二个用户访问会被指派到节点B,第三个用户访问会被指派到节点C,第四个用户访问继续指派到节点A,轮询分配访问请求实现负载均衡效果。此算法还有一种加权轮询,即根据每个节点的权重轮询分配访问请求

LC(Least  Connections)。LC算法即最小连接数算法,根据后端的节点连接数大小动态分配前端请求。例如,有三个节点A、B、C,各节点的连接数分别为A:4、B:5、C:6,此时如果有第一个用户连接请求,会被指派到A上,连接数变为A:5、B:5、C:6 ;第二个用户请求会继续分配给A上,连接数变为A:6、B:5、C:6 ;再有新的请求会配置给B,每次将新的请求指派给连接数最小的节点服务器。由于实际情况下A、B、C的连接数会动态释放,很难出现一样连接数的情况,因此此算法相比较RR算法有很大改进,是目前用到比较多的一种算法

SH(Source  Hashing)。SH即基于来源访问调度算法,此算法用于一些有Session会话记录在服务器端的场景,可以基于来源的IP、Cookie等做集群调度。例如,使用基于源IP的集群调度算法,有三个节点A、B、C,第一个用户第一次访问被指派到A,第二个用户第一次访问被指派到了B,当第一个用户第二次访问时会被继续指派到A,第二个用户第二次访问时依旧会被指派到B,只要负载调度器不重启,第一个用户访问都会被指派到A,第二个用户访问都会被指派到B,实现集群的调度。此调度算法好处是实现会话保持,但某些IP访问量非常大时会引起负载不均衡,部分节点访问量超大,影响业务使用

(3)常见的Web集群调度器

目前常见的Web集群调度器分为软件和硬件,软件通常使用开源的LVS、Haproxy、Nginx,硬件一般使用比较多的F5,也有很多人使用国内的一些产品,如梭子鱼、绿盟等

3、案例环境

本案例使用三台服务器模拟一台Web集群

使用Haproxy搭建Web群集

Haproxy集群拓扑

主机   操作系统   IP地址   只要软件  
Haproxy服务器   CentOS 6.6 x86_64   192.168.1.10   haproxy-1.4.24.tar.gz  

Nginx服务器-1

  Centos 6.6 x86_64   192.168.1.20   nginx-1.6.0.tar.gz  
Nginx服务器-2   Centos 6.6 x86_64   192.168.1.21   nging-1.6.0.tar.gz  
客户端   Wendows XP   192.16.1.30  

IE浏览器

 

案例环境

注意:这里服务器是托管在IDC机房中,公网访问使用的是防火墙NAT映射的公网IP,因此服务器端只需配置一个内外IP即可。如果没有防火墙映射,建议在服务器配置双网卡双IP,公网请求访问公网IP的网卡,Haproxy与各个节点间通信使用内外网卡

二、案例实施

1、编译安装Nginx服务器

(1)首先搭建Nginx-1,使用nginx-1.6.0.tar.gz安装包进行编译安装

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/2ff372e693c2fe45e6908a6438576b41.html