使用Haproxy搭建Web群集

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

索例前置知识点

(1)HTTP请求

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

        例如,访问http://www.test.com/a.php?ld=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 Comections).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的连接数会动态释放,很难会出现一样连接数的情况,因此此算 法相比较爪算法有很大改进,是目前用到比较多的一种算法。

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

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

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

案例环境

        本案例使用三台服务器模拟搭建一套Web群集,拓扑图如下所示:

案例实施

关闭防火墙:systemctl disable firewalld --now

关闭Selinux:setenforce 0

                        sed -i 's/SELINUX=.*/SELINUX=disabled/g' /etc/selinux/config

配置IP DNS 网关:nmtui

1.编译安装Nginx服务器

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

[root@Nginx1 ~]# mount /dev/cdrom /mnt/
mount: /dev/sr0 写保护,将以只读方式挂载
[root@Nginx1 ~]# yum -y install pcre-devel zlib-devel       //挂载后在本地yum仓库安装[root@Nginx1 ~]#useradd -M -s /sbin/nologin nginx   //创建nginx用户[root@Nginx1 ~]# rz -E  //把源码包nginx-1.24.0.tar.gz拉进来
rz waiting to receive.[root@Nginx1 ~]# tar zxf nginx-1.24.0.tar.gz  //解压文件[root@Nginx1 ~]# cd nginx-1.24.0/       //执行编译安装
[root@Nginx1 nginx-1.24.0]# ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module
[root@Nginx1 nginx-1.24.0]# make && make install

[root@Nginx1 ~]# ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/     //创建主程序链接文件[root@Nginx1 ~]# echo "<h1>This is nginx Server 192.168.55.49</h1>" > /usr/local/nginx/html/test.html     //建立测试页面[root@Nginx1 ~]# /usr/local/nginx/sbin/nginx              //启动Nginx[root@Nginx1 ~]# netstat -anpt | grep nginx
tcp     0     0 0.0.0.0:80            0.0.0.0:*           LISTEN      11121/nginx: master [root@Nginx1 ~]# systemctl stop firewalld.service 

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

(2)搭建Nginx2.

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

[root@Nginx2 ~]# echo "<h1>This is nginx Server 192.168.55.50</h1>" > /usr/local/nginx/html/test.html

 2.编译安装Haproxy

使用 haproxy-1.5.19.tar.gz安装包进行编译安装

[root@Haproxy ~]# yum -y install pcre-devel bzip2-devel   //组件[root@Haproxy ~]# rz -E
rz waiting to receive.                   //将源码包haproxy-1.5.19.tar.gz上传拉进来[root@Haproxy ~]# tar zxf haproxy-1.5.19.tar.gz   
[root@Haproxy ~]# cd haproxy-1.5.19/
[root@Haproxy haproxy-1.5.19]# make TARGET=linux26      //64位系统
[root@Haproxy haproxy-1.5.19]# make install

3.Haproxy服务器配置

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

[root@Haproxy haproxy-1.5.19]# mkdir /etc/haproxy  //创建主配置文件[root@Haproxy haproxy-1.5.19]# cp examples/haproxy.cfg /etc/haproxy/    //将haproxy.cfg文件复制到配置文件目录

(2)Haproxy配置项介绍。

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

[root@Haproxy ~]# vim /etc/haproxy/haproxy.cfg

4.创建自启动脚本

[root@Haproxy haproxy-1.5.19]# mkdir /usr/share/haproxy         //创建群集根目录添加haproxy系统服务:
[root@Haproxy haproxy-1.5.19]# cp examples/haproxy.init /etc/init.d/haproxy    
[root@Haproxy haproxy-1.5.19]# ln -s /usr/local/sbin/haproxy /usr/sbin/haproxy
[root@Haproxy haproxy-1.5.19]# chmod +x /etc/init.d/haproxy
[root@Haproxy haproxy-1.5.19]# chkconfig --add haproxy启动服务:
[root@Haproxy haproxy-1.5.19]# /etc/init.d/haproxy start
Starting haproxy (via systemctl):                          [  确定  ]启动服务:
[root@Haproxy haproxy-1.5.19]# systemctl start haproxy关闭防火墙浏览器可以进入:
[root@Haproxy haproxy-1.5.19]# systemctl stop firewalld

5.测试Web群集 

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

(1)测试高性能

在客户端使用浏览器打开http://192.168.55.47/test.html,浏览器显示信息

 

再次打开一个新的浏览器页面访问http://192.168.55.47/test.html,浏览器显示信息 

 

 

(2)测试高可用

现在将 192.168.55.49的Nginx服务停用,在客户端使用浏览器打开http://192.168.55.47/ test.html,浏览器显示信息

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

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

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

相关文章

基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的番茄成熟度检测系统(Python+PySide6界面+训练代码)

摘要&#xff1a;开发番茄成熟度检测系统对于提高农业产量和食品加工效率具有重大意义。本篇博客详细介绍了如何利用深度学习构建一个番茄成熟度检测系统&#xff0c;并提供了完整的实现代码。该系统基于强大的YOLOv8算法&#xff0c;并结合了YOLOv7、YOLOv6、YOLOv5的对比&…

腾讯云幻兽帕鲁服务器使用Linux和Windows操作系统,对用户的技术要求有何不同?

腾讯云幻兽帕鲁服务器使用Linux和Windows操作系统对用户的技术要求有何不同&#xff1f; 首先&#xff0c;从操作界面的角度来看&#xff0c;Windows操作系统相对简单易操作&#xff0c;适合那些偏好使用图形化界面操作的用户。而Linux操作系统则需要通过命令行完成&#xff0…

百度搜索引擎SEO优化方法

随着互联网的不断发展&#xff0c;搜索引擎已经成为人们获取信息、产品和服务的主要途径之一。而在中国&#xff0c;百度作为最大的搜索引擎&#xff0c;其影响力不可忽视。了解并掌握百度SEO关键词优化方法&#xff0c;对于提升网站在搜索引擎中的排名至关重要。 关键词选择&a…

数据结构——跳表

简单介绍跳表 跳表&#xff08;Skip List&#xff09;是一种可以进行对数级别查找的数据结构&#xff0c;它通过在数据中构建多级索引来提高查询效率。跳表是一种基于链表的随机化数据结构&#xff0c;其本质是由多个链表组成&#xff0c;每个链表中的元素都是原始链表中的元素…

图论 - Trie树(字符串统计、最大异或对)

文章目录 前言Part 1&#xff1a;Trie字符串统计1.题目描述输入格式输出格式数据范围输入样例输出样例 2.算法 Part 2&#xff1a;最大异或对1.题目描述输入格式输出格式数据范围输入样例输出样例 2.算法 前言 本篇博客将介绍Trie树的常见应用&#xff0c;包括&#xff1a;Trie…

C++ 使用 nlohmann::json存储json文件

C 使用 nlohmann::json存储json文件 nlohmann::json 概述JSON 存储的示例以追加的方式存储json文件 nlohmann::json 概述 nlohmann::json 是 C 中一个流行的 JSON 库&#xff0c;由 Niels Lohmann 开发。它提供了一个简单而强大的 API&#xff0c;用于解析、构建、操作和序列化…

电子电气架构——车载以太网协议栈

电子电气架构——车载以太网协议栈 我是穿拖鞋的汉子&#xff0c;魔都中坚持长期主义的汽车电子工程师。 老规矩&#xff0c;分享一段喜欢的文字&#xff0c;避免自己成为高知识低文化的工程师&#xff1a; 没有人关注你。也无需有人关注你。你必须承认自己的价值&#xff0c…

MySQL入门------数据库与SQL概述

目录 前言 一、数据库相关概念 二、数据模型 1.关系型数据库&#xff08;RDBMS&#xff09; 三、MySQL数据库 1.下载和安装 2.配置环境变量 四、SQL 1.SQL通用语法 2.SQL分类 前言 从本期开始&#xff0c;我们开始学习数据库的相关理论和实践知识&#xff0c;从入门…

jupyter 用pyecharts进行数据分析

一、jupyter和pyecharts下载和打开 因为我是用的pycharm&#xff0c;所以我直接在pycharm项目终端中下载pip install jupyter,pip install pyecharts 在你下载的项目路径中输入jupyter notebook 之后会进入页面 Jupyter 具体使用参考这个链接&#xff1a;Jupyter Notebook基本…

Pygame教程01:初识pygame游戏模块

Pygame是一个用于创建基本的2D游戏和图形应用程序。它提供了一套丰富的工具&#xff0c;让开发者能够轻松地创建游戏和其他图形应用程序。Pygame 支持许多功能&#xff0c;包括图像和声音处理、事件处理、碰撞检测、字体渲染等。 Pygame 是在 SDL&#xff08;Simple DirectMed…

常用设计模式详解

设计模式 1.UML图 统一建模语言是用来设计软件的可视化建模语言。定义了用例图、类图、对象图、状态图、活动图、时序图、协作图、构件图、部署图等 9 种图。 1.1类图 1.1.1类的表示方式 在UML类图中&#xff0c;类使用包含类名、属性(field) 和方法(method) 且带有分割线…

基本正则表达式

基本正则表达式 正则命令功能&#xff3e;尖角号&#xff0c;用于模式的最左侧&#xff0c;如“^oldbpy"&#xff0c;匹配以oldboy单词开头的行$美元符&#xff0c;用于模式的最右侧&#xff0c;如"oldboy$"&#xff0c;表示以oldboy单词结尾的行^$组合符&…

Java基于springboot的厨艺交流平台的设计与实现代码

摘 要 使用旧方法对厨艺交流信息进行系统化管理已经不再让人们信赖了&#xff0c;把现在的网络信息技术运用在厨艺交流信息的管理上面可以解决许多信息管理上面的难题&#xff0c;比如处理数据时间很长&#xff0c;数据存在错误不能及时纠正等问题。 这次开发的厨艺交流平台功…

如何优雅的删除undo表空间

前言 因磁盘空间不足&#xff0c;需要将undo表空间迁移到其它的存储空间 本文介绍如何优雅的删除undo表空间&#xff0c;并在新的存储空间中创建新的undo表空间 详细操作步骤如下&#xff1a; 1、查看默认undo表空间 SQL>show parameter undo NAME …

Redis的主从搭建

1.准备两台机器&#xff0c;安装好redis 2.修改从服务器的redis配置 slaveof <masterip> <masterport>两个参数 masterip 主的ip 主的端口号 masterport 3. 启动redis 1.先启动主机redis 2.再启用从机redis 主机redis日志打印 从机redis 日志打印

【python】1.python3.12.2和pycharm社区版的安装指南

欢迎来CILMY23的博客喔&#xff0c;本篇为【python】1.python3.12.2和pycharm社区版的安装指南&#xff0c;感谢观看&#xff0c;支持的可以给个一键三连&#xff0c;点赞关注收藏。 目录 一、python3.12.2的下载与安装 1.1下载 1.2安装 二、pycharm的安装 2.1下载安装 2…

Bootstrap的使用

目录 js的引入&#xff1a; 1.行内式 2.嵌入式 3.外链式 Bootstrap:的引入 注意事项&#xff1a; 条件注释语句&#xff1a; 栅格系统&#xff1a; 列嵌套&#xff1a; 列偏移&#xff1a; 列排序&#xff1a; 响应式工具&#xff1a; Bootstrap的字体图标的使用&a…

2024最新算法:河马优化算法(Hippopotamus optimization algorithm,HO)求解23个基准函数,提供MATLAB代码

一、河马优化算法 河马优化算法&#xff08;Hippopotamus optimization algorithm&#xff0c;HO&#xff09;由Amiri等人于2024年提出&#xff0c;该算法模拟了河马在河流或池塘中的位置更新、针对捕食者的防御策略以及规避方法。河马优化算法的灵感来自河马生活中观察到的三…

【金三银四】Mysgl优化了解?什么情况下会导致SQL索引失效?如何写出高效SQL与优化慢SQL

Mysgl优化 MySQL 优化是指对 MySQL 数据库的配置、表设计、查询语句等进行针对性的优化&#xff0c;以提高数据库的性能和效率。这包括但不限于合理设计数据库表结构、编写高效的 SQL 查询语句、创建合适的索引以及调整数据库服务器的参数等。 当MySQL单表记录数过大时&#xf…

【测试工具】Fiddler

1.Fiddler简介 Fiddler是位于客户端和服务器端的HTTP代理&#xff0c;能够记录客户端和服务器之间的所有 HTTP请求&#xff0c;是web调试的利器。既然是代理&#xff0c;也就是说&#xff1a;客户端的所有请求都要先经过Fiddler&#xff0c;然后转发到相应的服务器&#xff0c…