当前位置: 首页 > news >正文

Haproxy搭建 Web 群集实现负载均衡

目录

1 Haproxy

1.1 HAProxy的主要特性

1.2 HAProxy负载均衡策略

1.3 LVS、Nginx、HAproxy的区别

2 Haproxy搭建 Web 群集

2.1 haproxy 服务器部署

2.1.1 关闭防火墙

2.1.2 内核配置(实验环境可有可无)

​2.1.3 安装 Haproxy

2.1.4 Haproxy服务器配置

2.1.4 添加为系统服务

​2.2 节点服务器部署

2.3 测试 Web群集


1 Haproxy

HAProxy是可提供高可用性、负载均衡以及基于TCP和HTTP应用的代理,是免费、快速并且可靠的一种解决方案。HAProxy非常适用于并发大(并发达1w以上)web站点,这些站点通常又需要会话保持或七层处理。HAProxy的运行模式使得它可以很简单安全的整合至当前的架构中,同时可以保护web服务器不被暴露到网络上。

1.1 HAProxy的主要特性

 ●可靠性和稳定性非常好,可以与硬件级的F5负载均衡设备相媲美;

●最高可以同时维护40000-50000个并发连接,单位时间内处理的最大请求数为20000个,最大处理能力可达10Git/s;

●支持多达8种负载均衡算法

●支持Session会话保持,Cookie的引导;

●支持通过获取指定的url来检测后端服务器的状态;

●支持虚机主机功能,从而实现web负载均衡更加灵活;

●支持连接拒绝、全透明代理等独特的功能;

●拥有强大的ACL支持,用于访问控制;

●支持TCP和HTTP协议的负载均衡转发;

●支持客户端的keepalive功能,减少客户端与haproxy的多次三次握手导致资源浪费,让多个请求在一个tcp连接中完成

1.2 HAProxy负载均衡策略

常见的有如下8种:

(1)roundrobin,表示简单的轮询

(2)static-rr,表示根据权重

(3)leastconn,表示最少连接者先处理

(4)source,表示根据请求源IP

(5)uri,表示根据请求的URI,做cdn需使用;

(6)url_param,表示根据请求的URl参数'balance url_param' requires an URL parameter name (7)hdr(name),表示根据HTTP请求头来锁定每一次HTTP请求;

(8)rdp-cookie(name),表示根据cookie(name)来锁定并哈希每一次TCP请求。

1.3 LVS、Nginx、HAproxy的区别

 ●LVS基于Linux操作系统内核实现软负载均衡,而HAProxy和Nginx是基于第三方应用实现的软负载均衡;

●LVS是可实现4层的IP负载均衡技术,无法实现基于目录、URL的转发。而HAProxy和Nginx都可以实现4层和7层技术,HAProxy可提供TCP和HTTP应用的负载均衡综合解决方案;

●LVS因为工作在ISO模型的第四层,其状态监测功能单一,而HAProxy在状态监测方面功能更丰富、强大,可支持端口、URL、脚本等多种状态检测方式;

●HAProxy功能强大,单纯从效率上来讲HAProxy会比Nginx有更出色的负载均衡速度,在并发处理上也是优于Nginx的。但整体性能低于4层模式的LVS负载均衡;

●Nginx主要用于Web服务器或缓存服务器。Nginx的upstream模块虽然也支持群集功能,但是性能没有LVS和Haproxy好,对群集节点健康检查功能不强,只支持通过端口来检测,不支持通过URL来检测。

2 Haproxy搭建 Web 群集

Haproxy服务器:192.168.30.105

Nginx 服务器1:192.168.30.107

Nginx 服务器2:192.168.30.109

客户端:192.168.30.115

2.1 haproxy 服务器部署

2.1.1 关闭防火墙

​
systemctl stop firewalldsetenforce 0​

2.1.2 内核配置(实验环境可有可无)

vim  /etc/sysctl.confnet.ipv4.tcp_tw_reuse = 1#启用端口重用,允许一个服务器进程在进行完一个连接后立即再次使用相同的连接端口。
net.ipv4.ip_local_port_range = 1024 65023#本地端口范围。指定可用于本地TCP/UDP端口的端口号范围。
net.ipv4.tcp_max_syn_backlog = 10240#TCP半连接请求的最大长度,如果超过这个值,对方就会收到RST响应。
net.ipv4.tcp_max_tw_buckets = 400000#系统中同时保持TIME_WAIT状态的最大数量,一般设置为TCP建立连接次数的2倍。
net.ipv4.tcp_max_orphans = 60000#系统中允许存在的最大orphan连接数(没有对应的socket文件),这个数字越大,系统支持的TCP连接数也越多。
net.ipv4.tcp_synack_retries = 3#尝试发送SYN+ACK应答报文的最大次数。
net.core.somaxconn = 10000#服务器套接字排队长度的最大值

2.1.3 安装 Haproxy

//编译安装
yum install -y pcre-devel bzip2-devel gcc gcc-c++ maketar zxvf haproxy-2.2.11.tar.gz
cd haproxy-2.2.11/
make TARGET=linux31 PREFIX=/usr/local/haproxy 
make install PREFIX=/usr/local/haproxy---------------------参数说明---------------------------------------------------------------------------
TARGET=linux26	#内核版本,#使用uname -r查看内核,如:2.6.18-371.el5,此时该参数用TARGET=linux26;kernel大于2.6.28的用TARGET=linux2628

安装依赖环境

编译安装HAproxy

2.1.4 Haproxy服务器配置

useradd -M -s /sbin/nologin haproxy
mkdir -p /usr/local/haproxy/conf
cd /usr/local/haproxy/conf

HAProxy 的配置文件共有 5 个域:

●global:用于配置全局参数
●default:用于配置所有frontend和backend的默认属性
●frontend:用于配置前端服务(即HAProxy自身提供的服务)实例
●backend:用于配置后端服务(即HAProxy后面接的服务)实例组

●listen:frontend + backend的组合配置,可以理解成更简洁的配置方法,frontend域和backend域中所有的配置都可以配置在listen域下

global          #全局配置,主要用于定义全局参数,属于进程级的配置,通常和操作系统配置有关log 127.0.0.1 local1 warningdaemon                                      #让haproxy以守护进程的方式工作于后台option  dontlognull         #不在日志中记录空连接option  abortonclose    #当服务器负载很高的时候,自动结束掉当前队列处理比较久的链接maxconn 20000                       #最大连接数,“defaults”中的值不能超过“global”段中的定义timeout queue 3s        #默认客户端请求在队列中的最大时长timeout connect 1s          #默认haproxy和服务端建立连接的最大时长,新版本中替代contimeout,该参数向后兼容frontend http-inbind *:80acl url_jsp  path_end  -i .jspuse_backend tomcat_server if url_jspdefault_backend nginx_serverbackend nginx_serverbalance  roundrobinoption httpchk  GET /test.htmlserver ngx01 192.168.30.107:80 check inter 2000 fall 3 rise 2server ngx02 192.168.30.109:80 check inter 2000 fall 3 rise 2backend tomcat_serverbalance  roundrobinoption http-server-closecookie HA_STICKY_dy insert indirect nocacheserver tomcat01 192.168.30.107:8080 cookie tomcat01 check inter 2000 fall 3 rise 2server tomcat02 192.168.30.109:8080 cookie tomcat02 check inter 2000 fall 3 rise 2listen statsbind *:1080stats enablestats refresh 30sstats uri /statsstats realm HAProxy\ Statsstats auth admin:admin

2.1.4 添加为系统服务

添加执行的权限

chmod   +x  /etc/init.d/haproxy

将 /etc/init.d/haproxy 脚本添加到 chkconfig 管理工具中

chkconfig --add /etc/init.d/haproxy
chkconfig --level 35 haproxy on
chkconfig --level 35 haproxy on
service haproxy start

开启haproxy服务

!!!注意!!!

HAProxy默认使用端口80来监听HTTP流量

2.2 节点服务器部署

systemctl stop firewalld
setenforce 0yum install -y pcre-devel zlib-devel gcc gcc-c++ make useradd -M -s /sbin/nologin nginxcd /opt
tar zxvf nginx-1.12.0.tar.gz -C /opt/cd nginx-1.12.0/
./configure --prefix=/usr/local/nginx --user=nginx --group=nginx && make && make installmake && make install--192.168.80.100---
echo "this is kgc web" > /usr/local/nginx/html/test.html--192.168.80.101---
echo "this is benet web" > /usr/local/nginx/html/test.htmlln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/nginx      #启动nginx 服务

                                            ---Nginx 服务器1:192.168.30.107---

                                             ---Nginx 服务器1:192.168.30.109---

2.3 测试 Web群集

在客户端使用浏览器打开 http://192.168.30.105 ,不断刷新浏览器测试负载均衡效果

相关文章:

Haproxy搭建 Web 群集实现负载均衡

目录 1 Haproxy 1.1 HAProxy的主要特性 1.2 HAProxy负载均衡策略 1.3 LVS、Nginx、HAproxy的区别 2 Haproxy搭建 Web 群集 2.1 haproxy 服务器部署 2.1.1 关闭防火墙 2.1.2 内核配置(实验环境可有可无) ​2.1.3 安装 Haproxy 2.1.4 Haproxy服务…...

Tessy 5.0.4

Tessy 5.0.4 Linux 2692407267qq.com,更多内容请见http://user.qzone.qq.com/2692407267/...

mybatis-plus根据指定条件批量更新

1.service实现类中 比如我这里只针对UserEntity&#xff0c;在UserServiceImpl下&#xff08;该实现类是继承了mybatis-plus的ServiceImpl的&#xff09;新增如下代码&#xff1a; public boolean updateBatchByQueryWrapper(Collection<UserEntity> entityList, Funct…...

虹科方案 | LIN/CAN总线汽车零部件测试方案

文章目录 摘要一、汽车零部件测试的重要性&#xff1f;二、虹科的测试仿真工具如何在汽车零部件测试展露头角&#xff1f;三、应用场景**应用场景1&#xff1a;方向盘开关的功能测试****应用场景2&#xff1a;各类型电机的控制测试****应用场景3&#xff1a;RGB氛围灯的功能测试…...

[solidity]合约调用合约

先写一个简单的合约将其部署&#xff0c;部署后的合约地址为&#xff1a;0xd9145CCE52D386f254917e481eB44e9943F39138 // SPDX-License-Identifier: MIT pragma solidity ^0.8.0;contract A{string myname;function setName(string memory _name) public{myname_name;}functi…...

Vulnhub系列靶机---JANGOW 1.0.1

文章目录 网卡配置信息收集主机发现端口扫描 漏洞利用反弹Shell提权 靶机文档&#xff1a;JANGOW 1.0.1 下载地址&#xff1a;Download (Mirror) 难易程度&#xff1a;. 网卡配置 水果味儿 信息收集 主机发现 端口扫描 访问80端口 点击site目录 点击页面上方的一个选项&…...

肖sir__项目环境之全流程__005

一、测试流程&#xff08;h模型&#xff09; 1、需求文档&#xff08;产品&#xff09; 需求文档&#xff08;软件需求规格说明书srs&#xff09; &#xff08;1&#xff09;如何分析需求 a、显示需求&#xff08;主流程、功能&#xff0c;业务&#xff09; b、隐性需求&#x…...

搜狗输入法下键翻页

搜狗输入法下键翻页 从官网下载 搜狗输入法智慧版关闭超级候选关闭候选...

C#多线程

一、多线程实现方式 1. 使⽤Thread类&#xff1a; System.Threading.Thread 类是C#中最基本的多线程编程⼯具。 2. 使⽤ThreadPool&#xff1a; 线程池是⼀个管理和重⽤线程的机制&#xff0c;它可以在应⽤程序中创建和使 ⽤多个线程&#xff0c;⽽⽆需显式地管理线程的…...

Unity 编辑器常用方法

unity编辑器开发 脚本注解1. RuntimeInitializeOnLoadMethod2. ColorUsage3. Header4. SerializeField5. HideInInspector6. Space7. Range8. Multiline9.[RequireComponent(typeof())]10.HelpURL 右键菜单注解1. CreateAssetMenu - 针对ScriptableObject 菜单栏注解1. MenuIt…...

21 mysql ref 查询

前言 这里主要是 探究一下 explain $sql 中各个 type 诸如 const, ref, range, index, all 的查询的影响, 以及一个初步的效率的判断 这里会调试源码来看一下 各个类型的查询 需要 lookUp 的记录 以及 相关的差异 此系列文章建议从 mysql const 查询 开始看 测试表结构…...

启山智软/一款包含主流商城类型的一款电商中台系统100%开源

文章目录 介绍一、Smart Shop JAVA 微服务电商中台优势二、电商中台包含那些主流商城模式1.S2B2C供应链商城2.B2B2C多商户商城3.B2C单商户商城4.O2O外卖配送商城5.社区团购商城 6.演示地址总结 介绍 想要了解代码规范&#xff0c;学习商城解决方案&#xff0c;点击下方官网链接…...

【C语言】指针的进阶(四)—— 企业笔试题解析

笔试题1&#xff1a; int main() {int a[5] { 1, 2, 3, 4, 5 };int* ptr (int*)(&a 1);printf("%d,%d", *(a 1), *(ptr - 1));return 0; } 【答案】在x86环境下运行 【解析】 &a是取出整个数组的地址&#xff0c;&a就表示整个数组&#xff0c;因此…...

博弈论——连续产量古诺模型

连续产量古诺模型 连续产量古诺模型是博弈论中非常经典的模型&#xff0c;以两厂商连续产量古诺博弈为例&#xff1a; 1、模型建立 Player&#xff1a;两个供应相同产品的厂商 产量&#xff1a;厂商1的产量为q1&#xff0c;厂商2的产量为q2&#xff0c;市场总供给为Qq1q2。…...

ROS2 驱动思岚G4雷达(ydlidar)- Rviz显示

记录G4雷达的配置 系统环境为&#xff1a;Ubuntu22.04 配置步骤 1、安装雷达SDK 2、构建 G4 雷达 ROS2 项目工程文件 3、使用Rviz可视化界面显示 1、安装雷达SDK 1.1 安装CMake YDLidar SDK需要CMake 2.8.2作为依赖项 Ubuntu 18.04或者Ubuntu 22.04 sudo apt install cmak…...

Spring Cloud Alibaba Sentinel流量防卫兵

文章目录 Spring Cloud Alibaba Sentinel流量防卫兵1. 分布式遇到的问题2.解决的方法 Sentinel: 分布式系统的流量防卫兵1. 简介和特折 Sentinel流量防卫兵的搭建1.引入依赖2.添加配置类3.运行类上添加SentinelResource&#xff0c;并配置blockHandler和fallback4. linux中放入…...

1.简单工厂模式

UML类图 代码 main.cpp #include <iostream> #include "OperationFactory.h" using namespace std;int main(void) {float num1;float num2;char operate;cin >> num1 >> num2 >> operate;Operation* oper OperationFactory::createOpera…...

GitHub Copilot Chat

9月21日&#xff0c;GitHub在官网宣布&#xff0c;所有个人开发者可以使用GitHub Copilot Chat。用户通过文本问答方式就能生成、检查、分析各种代码。 据悉&#xff0c;GitHub Copilot Chat是基于OpenAI的GPT-4模型打造而成&#xff0c;整体使用方法与ChatGPT类似。例如&…...

利用 QT 完成一个人脸识别系统,完成登录操作

1.配置文件 # Project created by QtCreator 2023-09-22T10:34:23 # #-------------------------------------------------QT core guigreaterThan(QT_MAJOR_VERSION, 4): QT widgetsTARGET project TEMPLATE appSOURCES main.cpp\widget.cppHEADERS widget.hFOR…...

MATLAB APP纯小白入门 两数相加

万事开头难&#xff0c;最怕第一次。使用matlab APP 实现两数求和&#xff0c;如下图所示&#xff0c;c a b&#xff0c;输入数字后&#xff0c;按 “” 就计算。 步骤 拖拽三个 Edit Field(Numeric) 过来&#xff0c;并且双击名字分别改为 a,b,c。注意修改名字后右边会有点变…...

人工神经网络知识点讲解

人工神经网络知识点讲解 知识导图 人工神经网络 ├── 基础认知 │ ├── 神经网络的核心概念 │ ├── 神经元的工作机制 │ └── 网络的层级结构 ├── 激活函数 │ ├── 激活函数的作用 │ ├── 常见激活函数&#xff1a;sigmoid/tanh/ReLU/Softmax │ …...

ArcMap打开别人发来的mxd文件,图层全是红叉?别慌,5分钟教你修复数据源链接

ArcMap打开mxd文件图层全是红叉&#xff1f;5步急救与3种预防方案 收到同事发来的ArcMap项目文件&#xff0c;满屏红色感叹号像交通信号灯一样刺眼——这是GIS从业者最熟悉的"心跳加速时刻"。这种数据源断裂问题每年困扰着全球超过60%的ArcMap用户&#xff0c;尤其在…...

DeepSeek LeetCode 2376.统计特殊整数 public int countSpecialNumbers(int n)

这是 LeetCode 2376 题&#xff1a;统计特殊整数。题目理解特殊整数&#xff1a;十进制表示中每一位数字都不同的整数。例如&#xff1a;123、20、5 都是特殊的&#xff0c;但 11、121 不是。要求统计 [1, n] 范围内特殊整数的数量。解题思路数位 DP (Digit DP) 是标准解法&…...

【SAP工作】1.ECC与S4HANA后台表对比

查看表的Tcode&#xff1a;SE11&#xff0c;SE16N&#xff0c;SM30&#xff0c;SE38FIS4 HANABKPF会计凭证抬头存储凭证编号、日期、公司代码、凭证类型等不变BSEG会计凭证行项目存储科目、金额、税码、成本中心等明细ACDOCABSEG降级SKA1总帐科目主数据&#xff08;科目表级&am…...

如何在macOS上轻松运行Windows程序?Whisky完整指南教程

如何在macOS上轻松运行Windows程序&#xff1f;Whisky完整指南教程 【免费下载链接】Whisky A modern Wine wrapper for macOS built with SwiftUI 项目地址: https://gitcode.com/gh_mirrors/wh/Whisky 想在macOS上运行Windows专属软件却不想安装虚拟机&#xff1f;Whi…...

别被OPC一人公司神话骗了 90%的人都踩错了这4个致命坑!

ONE PERSON COMPANY 别被OPC一人公司神话骗了 90%的人都踩错了这4个致命坑 ⚡ 三个50分远胜于一个100分 李笑来多维竞争力公式 一人公司实战复盘 &#x1f4a1;核心导读 一人公司不是"降低门槛"的捷径&#xff0c;而是"提高门槛"的生存方式。真正的门槛从…...

基于AgentPort框架快速构建AI智能体Web应用门户

1. 项目概述&#xff1a;从零到一构建你的AI智能体门户最近在GitHub上看到一个挺有意思的项目&#xff0c;叫agentport&#xff0c;作者是yakkomajuri。光看这个名字&#xff0c;你可能会有点摸不着头脑——“Agent Port”&#xff1f;智能体端口&#xff1f;这到底是干嘛的&am…...

NotebookLM企业许可陷阱全解析,合同里没写的5个自动续费条款正在吞噬你的IT预算

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;NotebookLM定价性价比分析 NotebookLM 是 Google 推出的面向研究与知识整合的 AI 笔记工具&#xff0c;其核心价值在于对用户上传文档&#xff08;PDF、TXT 等&#xff09;进行语义理解并生成上下文精准…...

运行软件时提示找不到VCRUNTIME140_1.dll

运行软件时提示找不到VCRUNTIME140_1.dll前言解决办法说明参考前言 我们将cpp程序打包之后,放到别的电脑上,新电脑可能会提示: 运行软件时提示找不到VCRUNTIME140_1.dll 解决办法 根据电脑的型号,选择性的安装64位和32位的,如果你不懂电脑,那两个全都安装即可. https://aka.…...

跨越软件壁垒:GoB插件重构Blender与ZBrush的无缝建模工作流

跨越软件壁垒&#xff1a;GoB插件重构Blender与ZBrush的无缝建模工作流 【免费下载链接】GoB Fork of original GoB script (I just added some fixes) 项目地址: https://gitcode.com/gh_mirrors/go/GoB 在3D创作的世界里&#xff0c;艺术家常常面临一个技术困境&#…...