搭建 Web 群集Haproxy

news2024/11/18 11:17:21

案例概述

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

一、案例前置知识点

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.负载均衡常用调度算法

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

3.常见的 Web 群集调度器

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

二、案例环境

1.本案例环境

        本案例使用三台服务器模拟搭建一套 Web 群集,具体的拓扑如图 4.1所示。案例环境如下。

 

2.案例需求

        测试安装 nginx、haproxy;Haproxy、nginx 配置。 

三、案例实施

1.编译安装 Nginx服务器

        (1)搭建 Nginx-node-1,使用 nginx-1.12.0.tar.gz 安装包进行编译安装。

为了方便实验,网站没有配置域名,直接使用IP地址。在客户端访问http://192.168.1.61/test.html 测试,如下图所示。 

 (2)搭建 Nginx-node-2.

编译安装的步骤与 Nginx-node-1 相同,不同之处在于建立测试页面。

 安装完成后,在客户端访问 http://192.168.1.62/test.html 测试,如下图所示。

 2.编译安装 Haproxy

        在 Haproxy 服务器使用 haproxy-1.5.19.tar.gz 安装包进行编译安装。

 3.Haproxy服务器配置

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

 Haproxy 配置项介绍:
        Haproxy配置文件通常分为三个部分,即 global、defaults 和 listen。global 为全局配置,defaults 为默认配置,listen 为应用组件配置。global 配置项通常有下面配置参数,以示例参数说明如下。

 

         defaults配置项配置默认参数,一般会被应用组件继承,如果在应用组件中没有特别声明,将按照默认配置参数设置。

         listen 配置项一般配置应用模块参数。

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

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

 4.创建自启动脚本

        自启动脚本命令如下:

 5.测试 Web 群集

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

(1)测试高性能
        在客户端使用浏览器打开 http://192.168.1.60/test.html,浏览器显示信息如图一所示。

图一

         再次打开一个新的浏览器页面访问 http://192.168.1.60/test.html,浏览器显示信息如图所二示。

图二

可以看到群集的负载均衡调度已经生效,已经满足了群集的高性能需求。

(2)测试高可用

        现在将192.168.1.62的Nginx服务停用,在客户端使用浏览器打开http://192.168.1.60/test.html,浏览器显示信息仍然如图一所示。
        从中可以看出,当一台节点故障,不会影响群集的使用,这样就满足了群集的高可用性。也可以将 192.168.1.62的 Nginx 服务恢复,再将 192.168.1.61的 Nginx 服务停用,测试高可用性。

6.Haproxy 的日志

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

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

重启 rsyslog,完成rsyslog 配置。

(2)测试日志信息。

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

 7.Haproxy的参数优化

        关于 Haproxy 的参数优化,以下列举了几个关键的参数,并对各参数的生产环境的优化建议做了说明,如表所示。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1991456.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

海量数据处理商用短链接生成器平台 - 10

第二十一章 短链服务冗余双写-链路测试和异常消息处理实战 第1集 冗余双写MQ架构-消费者配置自动创建队列和集群测试 简介: 冗余双写MQ架构-MQ消费者配置自动创建队列 controller-service层开发配置文件配置MQ ##----------rabbit配置-------------- spring.rab…

古彝文——唯一存活的世界六大古文字

关注我们 - 数字罗塞塔计划 - 早在五千年前,彝族的先祖就发明了十月太阳历,成为中华文明的重要创造者之一;同时,彝族的先祖也创制了古彝文,开创了独具特色的彝族文化。古彝文也被称为古夷文、传统彝文,是相…

Unity补完计划 之 动态控制TileMap

本文仅作笔记学习和分享,不用做任何商业用途 本文包括但不限于unity官方手册,unity唐老狮等教程知识,如有不足还请斧正 1.TileMap &TileBase Unity - Scripting API: Tilemap ,看手册内容太多了故介绍几个常用的公共方法 首…

一个IT能拖垮整个公司?你若不信,看完此文再来评论

看到文章的标题,你也许会心生疑惑:一个IT真的能拖垮整个公司吗?也可能会觉得我根本就是在哗众取宠、博人眼球。 而我要说,在特定的条件下,这真的不夸张,你若不信,且听我娓娓道来,看完…

java maven项目如何分析循环依赖并使用maven helper插件排查排除依赖

文章目录 java maven项目如何分析循环依赖并使用maven helper插件排查排除依赖分析项目依赖插件Maven Helper找到并排除循环的依赖 java maven项目如何分析循环依赖并使用maven helper插件排查排除依赖 分析项目依赖 选择检测整个项目 查看红色的模块,都是有循环依…

问卷星无法选择复制

删除<link rel"stylesheet" href"//image.wjx.cn/joinnew/css/jqmobo.css?v5187">

【信创】Linux如何增加与删除交换分区 _ 统信 _ 麒麟 _ 中科方德

原文链接&#xff1a;信创】Linux如何增加与删除交换分区 | 统信 | 麒麟 | 中科方德 Hello&#xff0c;大家好啊&#xff01;今天给大家带来一篇关于在信创终端操作系统上如何增加与删除交换分区的文章。交换分区&#xff08;Swap&#xff09;在Linux系统中扮演着重要角色&…

思特威正式发布子品牌飞凌微,首发产品定位智驾视觉处理

2024年8月8日&#xff0c;中国上海 — 思特威&#xff08;上海&#xff09;电子科技股份有限公司&#xff08;股票简称&#xff1a;思特威&#xff0c;股票代码&#xff1a;688213&#xff09;正式发布全资子公司品牌——飞凌微电子&#xff08;Flyingchip™&#xff0c;以下简…

工具学习_CAPA a ATTCK

随着网络威胁的日益复杂和多样化&#xff0c;恶意软件的分析与识别成为安全领域的重要挑战。在这个背景下&#xff0c;静态分析技术成为了对抗恶意软件的有效手段。CAPA 作为一款强大的静态分析工具&#xff0c;能够帮助分析师快速提取恶意软件的静态特征&#xff0c;而 ATT&am…

无线领夹麦克风和有线哪个好?求知无线领夹麦哪个牌子好?

如今&#xff0c;自媒体行业蓬勃发展&#xff0c;音频设备作为创作过程中不可或缺的一部分&#xff0c;越来越受到重视。无线领夹麦克风因其出色的性能和便携性&#xff0c;逐渐成为市场上的热门产品。购买无线领夹麦克风已经成为许多创作者的共识。然而&#xff0c;面对市面上…

自动驾驶系列—图像到IPM:深入解析IMP投影变换技术

&#x1f31f;&#x1f31f; 欢迎来到我的技术小筑&#xff0c;一个专为技术探索者打造的交流空间。在这里&#xff0c;我们不仅分享代码的智慧&#xff0c;还探讨技术的深度与广度。无论您是资深开发者还是技术新手&#xff0c;这里都有一片属于您的天空。让我们在知识的海洋中…

第十九天(2024.8.7)Vue Element-plus

1.Vue 1.创建vue文件 1.创建一个文件夹来存储vue文件 我在D盘下创建了一个EasyVue文件夹来存储vue文件 2.在控制台中输入 如果在控制台中按下面步骤成功不了的话&#xff0c;尝试&#xff1a;1.用管理员身份运行控制台 2.关闭防火墙 3.打开编码工具&#xff08;Visual St…

易基因:干旱胁迫下的作物DNA甲基化动态变化 | 植物抗逆

大家好&#xff0c;这里是专注表观组学十余年&#xff0c;领跑多组学科研服务的易基因。 干旱&#xff08;Drought&#xff09;会对植物的生长、发育和生产力造成严重损害&#xff0c;是最具危害性的环境因素之一。植物已经进化出复杂的调控网络和干旱胁迫的抗性策略。作为一种…

终于有人把客户成功讲明白了

作者&#xff1a;沈建明 对ToB企业来说&#xff0c;只有客户成功才能带来持久增长&#xff0c;在SaaS企业下行大背景下&#xff0c;客户成功是唯一的救命稻草。大家是不是都听过这样的说法&#xff1f; ToB和SaaS企业的老客户贡献对于企业至关重要。因为获取新客户的成本是留…

Pycharm中重命名项目之后切换虚拟环境

Pycharm中重命名项目之后切换虚拟环境 场景 在Pycharm里面Rename Project/Directory之后&#xff0c;通常需要切换虚拟环境。 步骤 # 退出当前虚拟环境 deactivate # 删除旧的虚拟环境 .venv # 新建新的虚拟环境 python -m venv .venv # 切换到新的工程目录 cd E:\Bigdata\…

HexView 刷写文件脚本处理工具-基本功能介绍(六)-导出MIME/BIN/FIAT/FORD

导出MIME编码数据 这个选项将数据文件导出为MIME编码格式,并使用BASE64编码。 导出二进制数据 此选项会将所有数据内容按照它们出现的顺序写入一个二进制文件。 导出二进制块数据 这个选项将数据导出到一个二进制文件中。但是,如果内部数据文件包含多个块,数据将被写…

Qt 跨平台APP单实例运行实现

一.调用方法 支持coreApplication和简单的application两种继承&#xff1a; 二.源码地址&#xff1a; SingleApp: Qt 单实例实现

代码随想录打卡第四十九天

代码随想录–单调栈部分 day 49 单调栈第二天 文章目录 代码随想录--单调栈部分一、力扣42--接雨水二、力扣84--柱状图中最大的矩形 一、力扣42–接雨水 代码随想录题目链接&#xff1a;代码随想录 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图&#xff0c;计算按此排列…

HexView 刷写文件脚本处理工具-基本功能介绍(十)-数据自动对齐与填充

文件 在二进制文件被编译出来后,如果没有在链接文件中进行填充的话,通常都是分段落的,还有一些不需要的信息在里面,如果没有对齐的话可以用hexview进行对齐。 一般还会要求进行数据的填充,这样的话释放的刷写文件就是一个整体的段落。 数据对齐 数据对齐操作是基于块的…

使用WPF将window 添加到TabControl里面的方法

首先 1.window 不能添加到其他控件中&#xff0c;原因是他是最高级的。。 在window usercontrol&#xff0c;以及page&#xff0c;frame 基本都遵循这个道理&#xff0c;可以添加的则是 除window以外的其他窗体。 2.添加到TabControl 下面的TabItem 控件添加usercontrl我遇到的…