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

LVS+Nginx高可用集群---Nginx进阶与实战

1.Nginx中解决跨域问题

两个站点的域名不一样,就会有一个跨域问题。

跨域问题:了解同源策略:协议,域名,端口号都相同,只要有一个不相同那么就是非同源。
CORS全称Cross-Origin Resource Sharing,意为跨域资源共享。当一个资源去访问另一个不同域名或者同域名不同端口的资源时,就会发出跨域请求。如果此时另一个资源不允许其进行跨域资源访问,那么访问就会遇到跨域问题。

跨域指的是浏览器不能执行其它网站的脚本。是由浏览器的同源策略造成的,是浏览器对JavaScript 施加的安全限制。
在这里插入图片描述
前端有跨域吗?有。请求资源跨域就有。记住同源策略问题。

Nginx跨域配置:
#允许跨域请求的域,*代表所有
add_header ‘Access-Control-Allow-Origin’ *;
#允许带上cookie请求
add_header ‘Access-Control-Allow-Credentials’ ‘true’;
#允许请求的方法,比如 GET/POST/PUT/DELETE
add_header ‘Access-Control-Allow-Methods’ *;
#允许请求的header
add_header ‘Access-Control-Allow-Headers’ *;
在这里插入图片描述

2.nginx中配置静态资源防盗链

Nginx配置信息:

#对源站点验证
valid_referers *.nly.com; 
#非法引入会进入下方判断
if ($invalid_referer) {return 404;
} 

解析:匹配上面的验证规则(域名为.nly.com)
匹配的话会继续往下加载location配置。
没有匹配的话,就会返回404

3.nginx的模块化设计解析

在这里插入图片描述
Nginx core:实现了底层的通信协议。也为其他的一些模块和nginx的进程内容提供一个运行时的环境(类似于JVM),协调其他模块。
Event module:epoll.操作操作系统层面的事件处理机制。
Phase handler:处理客户端一些请求,以及一些相应内容的响应,
Output filter:过滤器。过滤内容返回浏览器。类比gzip(压缩模块)
Upstream:反向代理模块
Load balancer:负载均衡器。实现集群,实现负载均衡的配置。
Extend module:第三方模块。
nginx-1.22.0安装包目录下的内容。
在这里插入图片描述

4.四层,七层DNS负载均衡

四层负载均衡:主要是基于ip和端口的负载均衡。原理是转发请求到后台的服务器。它是负责转发,并且会记录连接是由那个服务器处理的,后续这个连接的请求会由同一台去处理。 (相当于常连接)
F5硬件负载均衡:成本高,稳定不错。商业级别的负载均衡。
LVS四层负载均衡:linux内核负载均衡。主要是用来转发请求的。
Hapooxy四层负载均衡:灵活性高。
Nginx四层负载均衡。

七层负载均衡:是基于url和ip的负载均衡。基于应用层,针对于http协议的负载均衡。
Nginx七层负载均衡:
Haproxy七层负载均衡:灵活性高
Apache七层负载均衡:并发不如nginx。
四层多用LVS,七层多用nginx.
七层主要是针对http协议,适用于web服务器,比如tomcat,Apache,nginx。七层会处理请求,比如:压缩css,js等
四层主要是针对tcp/udp协议。主要运用于转发请求而不是处理。
DNS地域负载均衡:
在这里插入图片描述
在这里插入图片描述

5.JMet测试单节点与集群的并发异常率

Jmeter工具:测试网站性能,apache.

使用jmeter工具。注意点:如何使用jmeter?配置环境变量。安装时候需要修改哪些变量(注册表的信息,添加注册表对应位置的权限,创造对应的文件,然后修改了#server.rmi.ssl.disable=false 去掉注释 修改末尾的false–>true Jmeter)

测试单个tomcat运行:(用户即线程)
1.50个用户,100次请求–无异常
2.200个用户,100次请求–异常率高达18.51%。

集群测试:
测试结果对比:
在这里插入图片描述
区别在于平均值,异常率,以及吞吐量。
正常情况下,公司异常率有临界点。超过临界点,并发就认为已经封顶了。然后就需要做一些处理,例如,硬件配置的升级,扩容。

6.负载均衡

负载均衡值轮巡
Nginx访问多台服务器时,采用的是轮询的方式。
负载均衡之权重:
根据机械性能配置权重。数值越小,访问的频率越低。
在这里插入图片描述

7.upstream 指令

upstream 指令参数值-maxconns
在这里插入图片描述
max_conns:限制每台server的连接数,用于保护避免过载,可起到限流的作用
配置模板:设置为1,避免使用到共享内存

worker进程设置1个,便于测试观察成功的连接数

worker_processes  1;upstream tomcats {server 192.168.1.173:8080 max_conns=2;server 192.168.1.174:8080 max_conns=2;server 192.168.1.175:8080 max_conns=2;
}

测试:jmeter配置间隔时间为0.
当配置的连接数达到最大连接数(3*2=6),就无法处理请求了。

slow_start:将不健康的服务器变成健康的服务器
在这里插入图片描述
配置参考如下:
upstream tomcats {
server 192.168.1.173:8080 weight=6 slow_start=60s;

server 192.168.1.190:8080;

    server 192.168.1.174:8080 weight=2;server 192.168.1.175:8080 weight=2;

}
down:用于标记服务结点不可用
配置模板:
upstream tomcats {
server 192.168.1.173:8080 down;

server 192.168.1.190:8080;

    server 192.168.1.174:8080 weight=1;server 192.168.1.175:8080 weight=1;

}

Backup:表示当前服务器节点是备用机,只有在其他服务器都宕机以后,自己才会加入集群中,被用户访问到。
配置模板:
upstream tomcats {
server 192.168.1.173:8080 backup;

server 192.168.1.190:8080;

    server 192.168.1.174:8080 weight=1;server 192.168.1.175:8080 weight=1;

}

max_fails:表示失败几次,则标记server已经宕机,剔除上游服务。
fail_timeout:表示失败的重试时间。
在这里插入图片描述
在这里插入图片描述
max_fails=2 fail_timeout=15s
则代表在15秒内请求某一server失败达到2次后,则认为该server已经挂了或者宕机了,随后再过15秒,这15秒内不会有新的请求到达刚刚挂掉的节点上,而是会请求到正常运作的server,15秒后会再有新请求尝试连接挂掉的server,如果还是失败,重复上一过程,直到恢复。

8.使用keepalived提高吞吐量

配置信息:
Keepalive:表示的是要保持的连接数(将一些链接作为常链接)
keepalived: 设置长连接处理的数量
proxy_http_version:设置长连接http版本为1.1
proxy_set_header:清除connection header 信息
官方模版:
在这里插入图片描述
自定义模板:
在这里插入图片描述
提升了吞吐量,以及接受跟传输的量(kb)

9.负载均衡原理-ip_hash;url hash 与least_conn
Ip_hash:可以保证用户访问可以请求到上游服务中固定的服务器,前提是用户ip没有发生改变(本质上是根据用户ip hash了以后,根据hash值再分配到一台特定的服务器里)

hash算法:
在这里插入图片描述
配置模板:

upstream tomcats {ip_hash;server 192.168.1.173:8080;server 192.168.1.174:8080 down;server 192.168.1.175:8080;
}

具体算法:
可以在/home/software/nginx-1.22.0/src/http/modules目录下看到算法。

当需要临时将一台服务器进行移除时,需要标记该台服务器为down.不能直接移除
当使用hash算法时,算法中使用的是ip地址的前三部分。举例:192.168.56.102 hash算法中使用的是192.168.56来进行计算的
一致性hash算法
hash算法带来的问题:后台服务器的节点的增多或者减少,缓存等问题可以会降低效率

在这里插入图片描述
一致性hash算法的高明之处在于:保证绝大多数的请求能访问到原来的计算机节点,仅仅只有一部分的请求会发生变化
(降低节点宕机或者新增节点时,对于用户的影响或者可以说缓存的影响)
负载均衡之url_hash:
原理:hash处理url,然后求模,计算index.(根据index去访问)
在这里插入图片描述
配置模板:
upstream tomcats {
# url hash
hash $request_uri;
# 最少连接数
# least_conn

server 192.168.1.173:8080;
server 192.168.1.174:8080;
server 192.168.1.175:8080;

}
server {
listen 80;
server_name www.tomcats.com;

location / {proxy_pass  http://tomcats;
}

}
Url:使用www.nly.com/nginx-url-hash/account跟使用www.nly.com/nginx-url-hash/account/的结果不同
负载均衡:Least_conn:根据哪台服务器的连接数最少就请求哪一台。

10.Nginx 控制浏览器缓存

缓存:
在这里插入图片描述
浏览器缓存加速单个用户的访问。Nginx缓存,优化在内网的传输(提升所有访问到nginx端的用户;提升访问上游(upstream)服务器的速度;用户访问仍然会产生流量)。(内网请求到不同的服务器,会有带宽的损耗,所以会有请求以及响应的时间)
浏览器缓存,当status显示为304时,表示的是缓存.Expire限制的是过期时间。
通过设置expire定义过期时间。看cache-control选项:
在这里插入图片描述
expire设置模板:

location /files {alias /home/imooc;# expires 10s;设置过期时间# expires @22h30m;设置持续多久# expires -1h;距离现在时间的前一个小时已经失效了# expires epoch;表示no-cache# expires off;默认nginx中的expire处于关闭状态。浏览器端还是有默认的机制的expires max;最大时间,即永不过期
}

11.Nginx 反向代理缓存

配置模板:

# proxy_cache_path 设置缓存目录
#       keys_zone 设置共享内存以及占用空间大小
#       max_size 设置缓存大小
#       inactive 超过此时间则被清理
#       use_temp_path 临时目录,使用后会影响nginx性能
proxy_cache_path /usr/local/nginx/upstream_cache keys_zone=mycache:5m max_size=1g inactive=1m use_temp_path=off;location / {proxy_pass  http://tomcats;# 启用缓存,和keys_zone一致proxy_cache mycache;# 针对200304状态码缓存时间为8小时proxy_cache_valid   200 304 8h;
}

相关文章:

LVS+Nginx高可用集群---Nginx进阶与实战

1.Nginx中解决跨域问题 两个站点的域名不一样,就会有一个跨域问题。 跨域问题:了解同源策略:协议,域名,端口号都相同,只要有一个不相同那么就是非同源。 CORS全称Cross-Origin Resource Sharing&#xff…...

Appium环境搭建,华为nova8鸿蒙系统(包括环境安装,环境配置)(一)

1.安装代码工具包 appium python client pip install appium-python-client 2.安装JDK 参考链接: antjmeterjenkins从0实现持续集成(Windows)-CSDN博客 3.下载并安卓SDK 下载地址:AndroidDevTools - Android开发工具 Android…...

【React】React18 Hooks 之 useReducer

目录 useReducer案例1:useReducer不带初始化函数案例2:useReducer带初始化函数注意事项1:dispatch函数不会改变正在运行的代码的状态注意事项2:获取dispatch函数触发后 JavaScript 变量的值注意事项3:触发了reducer&am…...

【cocos creator】2.4.x实现简单3d功能,点击选中,旋转,材质修改,透明材质

demo下载:(待审核) https://download.csdn.net/download/K86338236/89527924 const {ccclass, property } = cc._decorator;const enum box_color {NORMAL = 0,DASHED_LINE = 1,//虚线TRANSLUCENT = 2,//半透明 }@ccclass export default class main extends cc.Component {…...

Android EditText+ListPopupWindow实现可编辑的下拉列表

Android EditTextListPopupWindow实现可编辑的下拉列表 📖1. 可编辑的下拉列表✅步骤一:准备视图✅步骤二:封装显示方法✅步骤三:获取视图并监听 📖2. 扩展上下箭头✅步骤一:准备上下箭头icon图标✅步骤二&…...

dify/api/models/task.py文件中的数据表

源码位置:dify/api/models/task.py CeleryTask 表结构 字段英文名数据类型字段中文名字备注idIntegerID自增主键,任务ID序列task_idString任务ID唯一任务标识statusString状态默认值为 PENDINGresultPickleType结果可为空date_doneDateTime完成日期默认…...

hdu物联网硬件实验3 按键和中断

学院 班级 学号 姓名 日期 成绩 实验题目 按键和中断 实验目的 实现闪灯功能转换 硬件原理 无 关键代码及注释 /* Button Turns on and off a light emitting diode(LED) connected to digital pin 13, when pressing a pushbutton attached…...

pytorch通过 tensorboardX 调用 Tensorboard 进行可视化

示例 import torch import torch.nn as nn import torch.optim as optim from torch.utils.data import DataLoader from torchvision import datasets, transformsfrom tensorboardX import SummaryWriter# 定义神经网络模型 class SimpleCNN(nn.Module):def __init__(self):…...

linux查看目录下的文件夹命令,find 查找某个目录,但是不包括这个目录本身?

linux查看目录下的文件夹命令,find 查找某个目录,但是不包括这个目录本身? Linux中查看目录下的文件夹的命令是使用ls命令。ls命令用于列出指定目录中的文件和文件夹。通过不同的选项可以实现显示详细信息、按照不同的排序方式以及使用不同的…...

单一设备上的 2 级自动驾驶:深入探究 Openpilot 的奥秘

Level 2 Autonomous Driving on a Single Device: Diving into the Devils of Openpilot 单一设备上的 2 级自动驾驶:深入探究 Openpilot 的奥秘 Abstract Equipped with a wide span of sensors, predominant autonomous driving solutions are becoming more m…...

向github远程仓库中push,要求使用token登录

Support for password authentication was removed on August 13, 2021. Please use a personal access token instead. 如上,当向github远程仓库push时,输入github的用户名和密码出现如上错误,要求使用token登录,此时只需要用户…...

最全windows提权总结(建议收藏)

当以低权用户进去一个陌生的windows机器后,无论是提权还是后续做什么,第一步肯定要尽可能的搜集信息。知己知彼,才百战不殆。 常规信息搜集 systeminfo 查询系统信息hostname 主机名net user 查看用户信息netstat -ano|find "3389&quo…...

Could not find Chrome (ver.xxxxx). This can occur if either\n

文章目录 错误解决方法 错误 Could not find Chrome (ver. 119.0.6045.105). This can occur if either\n 1. you did not perform an installation before running the script (e.g. npx puppeteer browsers install chrome) or\n 2. your cache path is incorrectly configu…...

Conmi的正确答案——ESP32-C3开启安全下载模式

IDF版本:4.4.7 注意事项:一旦烧录“安全下载模式”,模组将无法被读取或清理,只能通过eclipse原项目烧录程序进行重新烧录,无法再烧录其他固件。 20240703110201——追加解法,暂时无法解安全下载模式 &…...

从零开始实现大语言模型(一):概述

1. 前言 大家好,我是何睿智。我现在在做大语言模型相关工作,我用业余时间写一个专栏,给大家讲讲如何从零开始实现大语言模型。 从零开始实现大语言模型是了解其原理及领域大语言模型实现路径的最好方法,没有之一。已有研究证明&…...

科普文本分类背后的数学原理——最新版《数学之美》第14、15章读书笔记

新闻分类,或广义上的文本分类,其核心任务是根据文本内容将相似文本聚合在同一类别中。在新闻领域,这意味着将报道划分为财经、体育、军事等不同主题。人类执行此任务时,通过阅读和理解新闻的主旨来进行归类。然而,作者…...

华为云生态和快速入门

华为云生态 新技术催生新物种,新物种推动新生态 数字技术催生各类运营商去重塑并颠覆各行业的商业模式 从业务层面看,企业始终如一的目标是业务增长和持续盈利,围绕这些目标衍生出提质、增效、降本、安全、创新和合规的业务诉求&#xff0c…...

卷积神经网络——LeNet——FashionMNIST

目录 一、整体结构二、model.py三、model_train.py四、model_test.py GitHub地址 一、整体结构 二、model.py import torch from torch import nn from torchsummary import summaryclass LeNet(nn.Module):def __init__(self):super(LeNet,self).__init__()self.c1 nn.Conv…...

k8s-第十二节-DaemonSet

DaemonSet是什么? DaemonSet 是一个确保全部或者某些节点上必须运行一个 Pod的工作负载资源(守护进程),当有node(节点)加入集群时, 也会为他们新增一个 Pod。 下面是常用的使用案例: 可以用来部署以下进程的pod 集群守护进程,如Kured、node-problem-detector日志收集…...

Mysql-内置函数

一.什么是函数? 函数是指一段可以直接被另外一段程序调用的程序或代码。 mysql内置了很多的函数,我们只需要调用即可。 二.字符串函数 MySQL中内置了很多字符串函数: 三.根据需求完成以下SQL编写 由于业务需求变更,企业员工的工号,统一为5位数,目前不足5位数的全…...

调用支付宝接口响应40004 SYSTEM_ERROR问题排查

在对接支付宝API的时候,遇到了一些问题,记录一下排查过程。 Body:{"datadigital_fincloud_generalsaas_face_certify_initialize_response":{"msg":"Business Failed","code":"40004","sub_msg…...

Appium+python自动化(十六)- ADB命令

简介 Android 调试桥(adb)是多种用途的工具,该工具可以帮助你你管理设备或模拟器 的状态。 adb ( Android Debug Bridge)是一个通用命令行工具,其允许您与模拟器实例或连接的 Android 设备进行通信。它可为各种设备操作提供便利,如安装和调试…...

在HarmonyOS ArkTS ArkUI-X 5.0及以上版本中,手势开发全攻略:

在 HarmonyOS 应用开发中,手势交互是连接用户与设备的核心纽带。ArkTS 框架提供了丰富的手势处理能力,既支持点击、长按、拖拽等基础单一手势的精细控制,也能通过多种绑定策略解决父子组件的手势竞争问题。本文将结合官方开发文档&#xff0c…...

《通信之道——从微积分到 5G》读书总结

第1章 绪 论 1.1 这是一本什么样的书 通信技术,说到底就是数学。 那些最基础、最本质的部分。 1.2 什么是通信 通信 发送方 接收方 承载信息的信号 解调出其中承载的信息 信息在发送方那里被加工成信号(调制) 把信息从信号中抽取出来&am…...

P3 QT项目----记事本(3.8)

3.8 记事本项目总结 项目源码 1.main.cpp #include "widget.h" #include <QApplication> int main(int argc, char *argv[]) {QApplication a(argc, argv);Widget w;w.show();return a.exec(); } 2.widget.cpp #include "widget.h" #include &q…...

Module Federation 和 Native Federation 的比较

前言 Module Federation 是 Webpack 5 引入的微前端架构方案&#xff0c;允许不同独立构建的应用在运行时动态共享模块。 Native Federation 是 Angular 官方基于 Module Federation 理念实现的专为 Angular 优化的微前端方案。 概念解析 Module Federation (模块联邦) Modul…...

.Net Framework 4/C# 关键字(非常用,持续更新...)

一、is 关键字 is 关键字用于检查对象是否于给定类型兼容,如果兼容将返回 true,如果不兼容则返回 false,在进行类型转换前,可以先使用 is 关键字判断对象是否与指定类型兼容,如果兼容才进行转换,这样的转换是安全的。 例如有:首先创建一个字符串对象,然后将字符串对象隐…...

Docker拉取MySQL后数据库连接失败的解决方案

在使用Docker部署MySQL时&#xff0c;拉取并启动容器后&#xff0c;有时可能会遇到数据库连接失败的问题。这种问题可能由多种原因导致&#xff0c;包括配置错误、网络设置问题、权限问题等。本文将分析可能的原因&#xff0c;并提供解决方案。 一、确认MySQL容器的运行状态 …...

边缘计算网关提升水产养殖尾水处理的远程运维效率

一、项目背景 随着水产养殖行业的快速发展&#xff0c;养殖尾水的处理成为了一个亟待解决的环保问题。传统的尾水处理方式不仅效率低下&#xff0c;而且难以实现精准监控和管理。为了提升尾水处理的效果和效率&#xff0c;同时降低人力成本&#xff0c;某大型水产养殖企业决定…...

Appium下载安装配置保姆教程(图文详解)

目录 一、Appium软件介绍 1.特点 2.工作原理 3.应用场景 二、环境准备 安装 Node.js 安装 Appium 安装 JDK 安装 Android SDK 安装Python及依赖包 三、安装教程 1.Node.js安装 1.1.下载Node 1.2.安装程序 1.3.配置npm仓储和缓存 1.4. 配置环境 1.5.测试Node.j…...