我们知道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集群拓扑
主机 操作系统 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.gzNginx服务器-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安装包进行编译安装