使用Haproxy搭建web群集
一、Haproxy
Haproxy 是目前比较流行的一种群集调度工具,同类群集调度工具有很多,如 LVS 和 Nginx。相比较而言,LVS 性能最好,但是搭建相对复杂;Nginx的upstream 模块支持群集功能,但是对群集节点健康检查功能不强,高并发性能没有 Haproxy 好。Haproxy 官方网站是 http://www.haproxy.org/。
http请求
通过 URL 访问网站使用的协议是 HTTP 协议,此类请求一般称为 HTTP 请求。HTTP 请求的方式分为GET方式和POST方式。当使用浏览器访问某一个URL,会根据请求 URL 返回状态码,通常正常的状态码为 2xx、3xx(如 200、301),如果出现异常会返回 4xx、5xx(如 400、500)。
负载均衡常见调度算法
LVS、Haproxy、Nginx 最常用的调度算法有三种,如下所述
(1)RR(Round Robin)。RR 算法是最简单最常用的一种算法,即轮询调度。例如,有三个节点 A、B、C,第一个用户访问会被指派到节点 A,第二个用户访问会被指派到节点B,第三个用户访问会被指派到节点C,第四个用户访问继续指派到节点 A,轮询分配访问请求实现负载均衡效果。此算法还有一种加权轮询即根据每个节点的权重轮询分配访问请求
(2)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 算法有很大改进,是目前用到比较多的一种算法。
(3)SH(SourceHashing)。SH 即基于来源访问调度算法,此算法用于一些有Session 会话记录在服务器端的场景,可以基于来源的 IP、Cookie 等做群集调度。例如,使用基于源 IP 的群集调度算法,有三个节点 A、B、C,第一个用户第一次访问被指派到了 A,第二个用户第一次访问被指派到了 B,当第一个用户第二次访问时会被继续指派到A,第二个用户第二次访问时依旧会被指派到 B,只要负载均衡调度器不重启,第一个用户访问都会被指派到 A,第二个用户访问都会被指派到 B,实现群集的调度。此调度算法好处是实现会话保持,但某些IP访问量非常大时会引起负载不均衡,部分节点访问量超大,影响业务使用。
二、实验案例
1.安装网站服务器
(在102和103)
本案用http代替nginx网站访问
关闭防火墙和安全机制
建立测试网站并启动服务
102为test1网站
103为test2网站
安装haproxy
(在101上)
配置haproxy服务器
Haproxy 配置项介绍:
Haproxy 配置文件通常分为三个部分,即 global、defaults 和 listen。
global 为全局配置,defaults 为默认配置,listen 为应用组件配置。
global 配置项通常有下面配置参数,以示例参数说明如下
defaults 配置项配置默认参数,一般会被应用组件继承,如果在应用组件中没有特别声明,将按照默认配置参数设置。
listen 配置项一般配置应用模块参数。
启动服务器
测试web群集
haproxy日志
Haproxy 的日志默认输出到系统的 syslog 中,查看起来不是非常方便,为了更好地管理 Haproxy 的日志,在生产环境中一般单独定义出来,定义的方法如下所述。
(1)修改haproxy配置文件,将原文件给改为
(2)配置 Rsyslog 服务
创建 rsyslog 的 HAProxy 日志规则文件:
重启 Rsyslog 和 HAProxy 服务
再次访问之后就可以生成日志