使用Haproxy搭建Web群集

一.案例分析

1.案例概述

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

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

2.案例前置知识点

2.1 HTTP 请求

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

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

2.2负载均衡常用调度算法

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访问量非常大时会引起负载不均衡,部分节点访问量超大,影响业务使用。

2.3常见的Web群集调度器

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

3.案例环境

3.1本案例环境

3.2案例需求

①测试安装 nginx、haproxy;

②)Haproxy、nginx 配置。

二.案例实施

1.编译安装web

(1)搭建web1

(2)搭建 web2

2.编译安装 Haproxy

在 Haproxy 服务器使用 dnf 安装 haproxy-2.9.5-8.oe2403sp1.x86_64。

3.Haproxy 服务器配置

下面是 Haproxy 服务器的配置步骤

(1)建立 Haproxy 的配置文件。

(2)修改 haproxy.cfg 配置文件

根据目前的群集设计,将 haproxy.cfg 配置文件的内容修改如下。

4.测试 Web 群集

通过上面的步骤,已经搭建完成Haproxy的 Web 群集,接下来需要验证群集是否工作正常。一个群集一般需要具备两个特性,第一个是高性能,第二个是高可用。

(1)测试高性能在客户端。


(2)测试高可用

现在将192.168.10.102的Nginx服务停用,在客户端使用浏 览器打开 http://192.168.10.103/test.html,浏览器显示信息仍然如图4.4 所示。

从中可以看出,当一台节点故障,不会影响群集的使用,这样就满足了群集的高可用性。也可以将192.168.10.102的Nginx服务恢复,再将192.168.10.101的 Nginx 服务停用,测试高可用性。

5.Haproxy 的日志

Haproxy 的日志默认输出到系统的 syslog 中,查看起来不是非常方便,为了更好地管理 Haproxy 的日志,在生产环境中一般单独定义出来,定义的方法如下所述。

(1)修改 haproxy 配置文件,将原有的配置更改为以下配置:

(2)配置 Rsyslog 服务

(3)创建日志文件并设置权限

(4)重启Rsyslog和 HAProxy 服务

(5)测试日志信息。

在客户端访间 http://192.168.10.103/test.html后,可以使用 tail -f/var/log/haproxy.log 即时査看 Haproxy 的访问请求日志信息。

相关推荐
mldong30 分钟前
你的 Vue3 项目也能有钉钉同款审批流设计器:npm 装包,10 分钟画出第一条审批流
前端·vue.js
2分钟速写快排1 小时前
什么是 RAG?如何用 RAG 实现一个用户记忆?
前端·后端·ai编程
passerby60612 小时前
如何自己造一个时间处理库
前端·javascript·github
走到天涯海角3 小时前
react里面的长列表渲染优化
前端·react.js·前端框架
小羊没烦恼!3 小时前
Hello Web API系列教程——Web API与国际化
java·服务器·前端·javascript·php
北岛贰3 小时前
迷茫焦虑期,我做了一个带支付带官网的 AI 聊天虚拟恋人 App
前端·人工智能·后端
mayaairi5 小时前
Vue2 组件通讯(三):全局事件总线、PubSub、插槽与组件实例属性
前端·javascript·vue.js
kyriewen5 小时前
面试官问我:AI 都能写代码了,前端凭什么还值 25K
前端·javascript·人工智能
风骏时光牛马6 小时前
AI源码分析:拆解模型底层实现逻辑
前端
IT_陈寒6 小时前
React子组件莫名其妙重渲染?你可能漏了这个Hook
前端·人工智能·后端