nginx+keepalived负载均衡及高可用
1 项目背景
keepalived除了能够管理LVS软件外,还可以作为其他服务的高可用解决方案软件。采用nginx+keepalived,它是一个高性能的服务器高可用或者热备解决方案,Keepalived主要来防止服务器单点故障的发生问题,可以通过其与Nginx的配合实现Web服务器端的高可用。使用keepalived可以保证nginx的高可用,他能监控nginx的健康状态,当nginx出现宕机时自动主备切换。
项目架构
Nginx+Keepalived实现高可用
2 项目环境
服务器角色(主机名) | IP | 用途 |
---|---|---|
Nginx_Master(open-Euler1) | 192.168.121.150 | 提供负载均衡 |
Nginx_Backup(open-Euler2) | 192.168.121.151 | 提供负载均衡 |
Client(Rocky8) | 192.168.121.160 | 测试客户端 |
Web1服务器(open-Euler3) | 192.168.121.152 | 提供Web服务 |
Web2服务器(open-Euler4) | 192.168.121.153 | 提供Web服务 |
3 项目部署
节点服务器 生产环境中对于节点服务器需要利用共享存储(比如NFS存储)服务器提供的空间来提供服务,此处测试后端存储服务器略。
3.1 web01和web02配置:
提供web服务
#yum install nginx -y //安装nginx服务
[root@open-Euler3 ~]# echo `hostname -I` > /usr/share/nginx/html/index.html #html测试界面
[root@web1 ~]# systemctl start nginx
3.2 nginx负载均衡配置
两台nginx做同样配置
1、安装nginx
yum install nginx
2、配置nginx反向代理
[root@open-Euler1 keepalived]# cd /etc/nginx/conf.d/
[root@open-Euler1 conf.d]# cat lb.conf
upstream webs {server 192.168.121.152:80;server 192.168.121.153:80;
}server {location / {proxy_pass http://webs;
}
}
3.3 调度服务器
3.3.1 主调度服务器
1、安装keepalived
[root@open-Euler1 conf.d]# yum install keepalived -y
2、开发检测nginx存活的shell脚本
[root@open-Euler1 conf.d]# vim /etc/keepalived/check_nginx.sh
#!/bin/bash
#代码一定注意空格,逻辑就是:如果nginx进程不存在则启动nginx,如果nginx无法启动则kill掉keepalived所有进程
A=`ps -C nginx --no-header | wc -l`
if [ $A -eq 0 ];thensystemctl start nginxsleep 2if [ `ps -C nginx --no-header | wc -l` -eq 0 ] thensystemctl stop keepalivedfi
fi
3、配置keepalived
[root@open-Euler1 conf.d]# vim /etc/keepalived/keepalived.conf
! Configuration File for keepalivedglobal_defs {router_id LVS_1
}vrrp_script check_nginx {script "/etc/keepalived/check_nginx.sh" #你的监控脚本位置,路径不能出错
}vrrp_instance VI_1 {state MASTERinterface ens160lvs_sync_daemon_interface ens192virtual_router_id 51priority 100advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.121.180}track_script {check_nginx
}
}
VRRP script(补充)
通过vrrp_script实现对集群资源的监控
1)在keepalived学习总结中已经说过,keepalived只是提供一个VIP,但高可用的是服务,因此keepalived一般会与lvs、nginx、haproxy、mysql…等服务器联合使用,以实现服务的高可用,但是若keepalived与之联合使用的服务异常时,此处keepalived提供的VIP也就没有任何意义了,因此此时的VIP我们希望它可以自动检测与keepalived连用的服务是否正常,若服务不正常,VIP实现自动飘移至backup节点,此时可以使用VRRP scripts实现。
2)keepalived调用外部的辅助脚本进行资源监控,并根据监控的结果状态能实现优先动态调整。
3)vrrp_script:自定义资源监控脚本,vrrp实例根据脚本返回值进行下一步操作,脚本可被多个实例调用。track_script:调用vrrp_script定义的脚本去监控资源,定义在实例之内,调用事先定义的vrrp_script。
4)VRRP scripts的实现:
1>通过killall命令探测服务运行状态:
这种监控集群服务的方式主要是通过killall命令实现的。killall会发送一个信号到正在运行的指定命令的进程。如果没指定信号名,则发送SIGTERM。SIGTERM也是信号名的一种,代号为15,它表示以正常的方式结束程序的运行。其实killall可用的信号名有很多,可通过“killall -l ”命令显示所有信号名列表,其中每个信号名代表对进程的不同执行方式,例如,代号为9的信号表示将强制中断一个程序的运行。这里要用到的信号为0,代号为0的信号并不表示要关闭某个程序,而表示对程序(进程)的运行状态进行监控,如果发现进程关闭或其他异常,将返回状态码1,反之,如果发现进程运行正常,将返回状态码0.vrrp_script模块正是利用了killall命令的这个特性,变相实现了对服务运行状态的监控。
例:
vrrp_script check_mysqld {
script "killall -0 mysqld"
interval 2
}track_script {
check_mysqld
}
这个例子定义了一个服务监控模块check_mysqld,其采用的监控的方式是通过“killall -0 mysqld”的方式,其中“interval”选项检查的时间间隔,即2s执行一次检测。
2>通过脚本进行服务状态监控:
vrrp_script <SCRIPT_NAME> { #定义一个检测脚本,在global_defs 之外配置script <STRING>|<QUOTED-STRING> # shell命令或脚本路径interval <INTEGER> # 间隔时间,单位为秒,默认1秒timeout <INTEGER> # 超时时间weight <INTEGER:-254..254> # 权重,当脚本成功或失败对当前节点的优先级是增加还是减少,这个值会与定义的优先级做加法例:-80时则为priority+(-80)。weight为正数:1、当 Master 节点的“ vrrp_script” 脚本检测失败时, 如果 Master 节点的 “priority ” 值小于 Backup 节点的 “ weight” 值与 “ priority ” 值之和, 将发生主、 备切换。2、当 Master 节点的“ vrrp_script” 脚本检测成功时, 如果 Master 节点的 “ weight ” 值与 “ priority ” 值之和大于 Backup 节点的 “ weight” 值与 “ priority” 值之和, 主节点依然为主节点, 不发生切换。weight为负数:1、当 Master 节点的 “ vrrp script” 脚本检测失败时, 如果 Master 传点的 “ priority” 值与 “weight” 值之差小于 Backup 竹点的 “ priority ” 值, 将发生主、 备切换。2、当 Master 节点的“ vrrp_script” 脚本检测成功时, 如果 Master 诗点的 “ priority ” 值大于 Backup 节点的 “priority ” 值, 主节点依然为主节点, 不发生切换。fall <INTEGER> #脚本几次失败转换为失败rise <INTEGER> # 脚本连续监测成果后,把服务器从失败标记为成功的次数user USERNAME [GROUPNAME] # 执行监测的用户或组init_fail # 设置默认标记为失败状态,监测成功之后再转换为成功状态
}
这是最常见的监控方式,其监控过程类似于nagios的执行方式,不同的是,这里只有0、1两种返回状态,例如:
vrrp_script chk_mysqld {
script "/etc/keepalived/check_mysqld.sh"
interval 2
}track_script {
chk_mysqld
}
其中,check_mysqld.sh的内容为:
#!/bin/bash
/usr/bin/mysql -e "show status;" > /dev/null 2>&1
if [ $? -eq 0 ];then
MYSQL_STATUS=0
else
MYSQL_STATUS=1
fiexit $MYSQL_STATUS
这是一个最简单的实现MySQL服务状态检测的shell脚本,它通过登录MySQL数据库后执行查询操作来检测MySQL运行是否正常,如果检测正常,将返回状态码0,否则返回状态码1。
3.3.2 从调度服务器
1、安装keepalived
[root@open-Euler2 conf.d]# yum install keepalived -y
2、开发检测nginx存活的shell脚本
[root@open-Euler2 conf.d]# vim /etc/keepalived/check_nginx.sh
#!/bin/bash
#代码一定注意空格,逻辑就是:如果nginx进程不存在则启动nginx,如果nginx无法启动则kill掉keepalived所有进程
A=`ps -C nginx --no-header | wc -l`
if [ $A -eq 0 ];thensystemctl start nginxsleep 2if [ `ps -C nginx --no-header | wc -l` -eq 0 ] thensystemctl stop keepalivedfi
fi
3、配置keepalived
[root@open-Euler2 keepalived]# cat /etc/keepalived/keepalived.conf
! Configuration File for keepalivedglobal_defs {router_id LVS_2 #改
}vrrp_script check_nginx {script "/etc/keepalived/check_nginx.sh"
}vrrp_instance VI_1 {state BACKUP #改interface ens160lvs_sync_daemon_interface ens192virtual_router_id 51priority 80 #改advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.121.180}track_script {check_nginx
}
}
注意:keepalived配置文件里面注意空格问题。
比如:script "/etc/keepalived/check_nginx.sh"后面不能空格。
4 项目测试
启动主从调度的nginx和keepalived
[root@open-Euler1 ~]# systemctl restart nginx keepalived
[root@open-Euler2 ~]# systemctl restart nginx keepalived
Master,Backup都正常,只有Master对外提供服务
[root@open-Euler1 conf.d]# ip a | grep "192.168.121.180"inet 192.168.121.180/32 scope global ens160
Master宕机,Backup接替Master对外提供服务
模拟Master的keepalived服务器停止
[root@open-Euler1 ~]# systemctl stop keepalived.service
此时VIP在open-Euler2上
[root@open-Euler2 conf.d]# ip a | grep "192.168.121.180"inet 192.168.121.180/32 scope global ens160
Master恢复正常,Master继续提供服务,Backup停止服务
模拟Master的keepalived服务恢复正常
[root@open-Euler1 ~]# systemctl start keepalived.service
此时VIP在Master上
[root@open-Euler1 conf.d]# ip a | grep "192.168.121.180"inet 192.168.121.180/32 scope global ens160
Master上的nginx服务停止,监控脚本尝试重新启动nginx
[root@open-Euler1 conf.d]# systemctl stop nginx
[root@open-Euler1 conf.d]# systemctl status nginx
● nginx.service - The nginx HTTP and reverse proxy serverLoaded: loaded (/usr/lib/systemd/system/nginx.service; disabled; vendor preset: disabled)Active: active (running) since Fri 2025-02-28 20:05:22 CST; 4s agoProcess: 14207 ExecStartPre=/usr/bin/rm -f /run/nginx.pid (code=exited, status=0/SUCCESS)Process: 14211 ExecStartPre=/usr/sbin/nginx -t (code=exited, status=0/SUCCESS)Process: 14214 ExecStart=/usr/sbin/nginx (code=exited, status=0/SUCCESS)Main PID: 14215 (nginx)Tasks: 3 (limit: 8932)Memory: 4.0MCGroup: /system.slice/nginx.service├─ 14215 "nginx: master process /usr/sbin/nginx"├─ 14216 "nginx: worker process"└─ 14217 "nginx: worker process"Feb 28 20:05:22 open-Euler1 systemd[1]: Starting The nginx HTTP and reverse proxy server...
Feb 28 20:05:22 open-Euler1 nginx[14211]: nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
Feb 28 20:05:22 open-Euler1 nginx[14211]: nginx: configuration file /etc/nginx/nginx.conf test is successful
Feb 28 20:05:22 open-Euler1 systemd[1]: Started The nginx HTTP and reverse proxy server.
可以看到即使我关闭了nginx服务监控脚本也帮我重新开启了服务
模拟修改错误nginx配置文件的话导致无法启动
[root@open-Euler1 conf.d]# vim /etc/nginx/nginx.conf
[root@open-Euler1 conf.d]# systemctl stop nginx
查看日志
[root@open-Euler1 nginx]# tail -f /var/log/messages
可以看到日志中监控脚本检测失败
这时VIP就飘移到了open-Euler2服务器上
相关文章:
nginx+keepalived负载均衡及高可用
1 项目背景 keepalived除了能够管理LVS软件外,还可以作为其他服务的高可用解决方案软件。采用nginxkeepalived,它是一个高性能的服务器高可用或者热备解决方案,Keepalived主要来防止服务器单点故障的发生问题,可以通过其与Nginx的…...
数据结构理论
目录 基本概念和术语 数据 数据元素 数据项 数据对象 数据结构 数据的结构 逻辑结构 存储结构(物理结构) 数据类型 定义 原子数据类型 结构数据类型 抽象数据类型(Abstract Data Type,ADT) 算法和算法分…...
【心得】一文梳理高频面试题 HTTP 1.0/HTTP 1.1/HTTP 2.0/HTTP 3.0的区别并附加记忆方法
面试时很容易遇到的一个问题—— HTTP 1.0/HTTP 1.1/HTTP 2.0/HTTP 3.0的区别,其实这四个版本的发展实际上是一环扣一环的,是逐步完善的,本文希望帮助读者梳理清楚各个版本之间的区别,并且给出当前各个版本的应用情况,…...
在Spring Boot项目中导出复杂对象到Excel文件
在Spring Boot项目中导出复杂对象到Excel文件,可以利用Hutool或EasyExcel等库来简化操作。这里我们将详细介绍如何使用Hutool和EasyExcel两种方式来实现这一功能。 使用Hutool导出复杂对象到Excel 首先确保你的pom.xml中添加了Hutool的依赖: <depe…...
spark 常见操作命令
配置虚拟机 配置即让自己的虚拟机可以联网,和别的虚拟机通讯 一、配置vm虚拟机网段。 具体设置为:虚拟机左上角点击编辑→虚拟网络编辑器 选择VMnet8, 要改动两个地方(注意:它会需要管理员权限ÿ…...
深入理解设计模式中的工厂模式(Factory Pattern)
各类资料学习下载合集 https://pan.quark.cn/s/8c91ccb5a474 工厂模式是创建对象的一种设计模式,属于创建型设计模式。它提供了一种方法来创建对象,而无需在代码中直接指定对象的具体类。工厂模式通过将对象的创建过程封装起来,使得代码更加灵活、可维护…...
DPDK网络开发
DPDK(Data Plane Development Kit)是一个用于快速数据包处理的开源库,广泛应用于高性能网络应用开发。 环境准备 硬件要求 NIC(网络接口卡):支持DPDK的网卡,如Intel的82599、X710等。 CPU&am…...
第三节:基于Winform框架的串口助手小项目---串口操作《C#编程》
知识是无尽的宝藏,学习的过程虽有挑战,但每一次突破都是对自我的升华,向着更优秀的自己全力进发。 -----------WHAPPY 本节将重点介绍,如何修改控件的属性、SerialPort类的使用及实现串口初始化的操作 1.修改控件属性 修改属性…...
机器学习核函数
在机器学习中,核函数(Kernel Function)是一个非常重要的概念,特别是在支持向量机(SVM)等算法中有着广泛的应用。下面从定义、作用、常见的核函数类型、工作原理等方面详细介绍: 定义࿱…...
linux中使用firewall命令操作端口
一、开放端口 1. 开放一个端口 sudo firewall-cmd --zonepublic --add-port8443/tcp --permanent sudo firewall-cmd --reload 2. 开放一组连续端口 sudo firewall-cmd --zonepublic --add-port100-500/tcp --permanent sudo firewall-cmd --reload 3. 一次开放多个不连续…...
【金融量化】Ptrade中的基础交易与高级量化交易策略的下单接口
1 基础交易与订单管理接口 1. order 功能:用于按指定数量买卖股票或其他金融产品。 参数: security:股票代码(字符串类型)。amount:交易数量(整数类型),正数表示买入&…...
解决docker认证问题 failed to authorize: failed to fetch oauth token
报错信息[bash1]解决方案 全局代理打开“buildkit”: false ,见[图1] [bash1] >docker build -t ffpg . [] Building 71.8s (3/3) FINISHED docker:desktop-linux> [internal] load bui…...
从“人力投放”到“智能战争”,谁能抢占先机?
流量成本飙升、用户行为碎片化、广告创意同质化……传统网络推广模式正面临失效危机。而AI技术的爆发,正在彻底改写游戏规则。小马识途营销顾问解析:“AI如何颠覆网络推广逻辑?企业又该如何借势破局?” 一、精准营销:…...
STM32_IIC外设工作流程
STM32 IC 外设工作流程(基于寄存器) 在 STM32 中,IC 通信主要通过一系列寄存器控制。理解这些寄存器的作用,能够帮助我们掌握 IC 硬件的运行机制,实现高效的数据传输。本文以 STM32F1(如 STM32F103&#x…...
Python 爬取唐诗宋词三百首
你可以使用 requests 和 BeautifulSoup 来爬取《唐诗三百首》和《宋词三百首》的数据。以下是一个基本的 Python 爬虫示例,它从 中华诗词网 或类似的网站获取数据并保存为 JSON 文件。 import requests from bs4 import BeautifulSoup import json import time# 爬取…...
浅浅初识AI、AI大模型、AGI
前记:这里只是简单了解,后面有时间会专门来扩展和深入。 当前,人工智能(AI)及其细分领域(如AI算法工程师、自然语言处理NLP、通用人工智能AGI)的就业前景呈现高速增长态势,市场需求…...
Spring40种注解(下)!!
Spring Bean 注解 ComponentScan ComponentScan注解用于配置Spring需要扫描的被组件注解注释的类所在的包。 可以通过配置其basePackages属性或者value属性来配置需要扫描的包路径。value属性是basePackages的别名。 Component Component注解用于标注一个普通的组件类&#…...
DeepSeek 系列模型:论文精读《A Survey of DeepSeek Models》
引言:一篇快速了解 DeepSeek 系列的论文。我在翻译时加入了一些可以提高 “可读性” 的连词 ✅ NLP 研 2 选手的学习笔记 笔者简介:Wang Linyong,NPU,2023级,计算机技术 研究方向:文本生成、大语言模型 论文…...
LeetCode hot 100—环形链表 II
题目 给定一个链表的头节点 head ,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。 如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部…...
【AI】【Unity】关于Unity接入DeepseekAPI遇到的坑
前言 由于deepseek网页端在白天日常抽风,无法正常的使用,所以调用API就成了目前最好的选择,尤其是Deepseek的API价格低得可怕,这不是和白送的一样吗!然后使用过很多本地部署接入API的方式,例如Chatbox、Pa…...
计算机视觉算法实战——医学影像分割(主页有源码)
✨个人主页欢迎您的访问 ✨期待您的三连 ✨ ✨个人主页欢迎您的访问 ✨期待您的三连 ✨ ✨个人主页欢迎您的访问 ✨期待您的三连✨ 1. 领域简介✨✨ 医学影像分割是计算机视觉在医疗领域的重要应用,旨在从CT、MRI、X光等医学图像中精确分割出目标区域&…...
51单片机——存储类型
主要内容:区分data,bdata,idata,pdata,xdata,code 8051系列单片机存储器结构的特点:ROM和RAM独立编址 8051系列单片机将程序存储器(ROM)和数据存储器(RAM)分开,并有各自的寻址机构和寻址方式。…...
python19-if和match的美
课程:B站大学 记录python学习,直到学会基本的爬虫,使用python搭建接口自动化测试就算学会了,在进阶webui自动化,app自动化 分支语句那些事儿 if 条件判断if...else 判断语句if...elif...else 多重条件分支嵌套也能在 e…...
期权有哪些用处?期权和期货比优势在哪?
期权如同金融市场的“瑞士军刀”,既能防御风险,又能主动出击。相较于期货的“刚性对决”,期权更像“柔性博弈”——通过策略组合在不确定性中捕捉确定性收益。 期权有哪些用处? 期权的核心价值在于其非对称性——买方风险有限&am…...
【html期末作业网页设计】
html期末作业网页设计 作者有话说项目功能介绍 网站结构完整代码网站样图 作者有话说 目前,我们的项目已经搭建了各页面的基本框架,但内容填充还不完善,各页面之间的跳转逻辑也还需要进一步优化。 我们深知,一个好的项目需要不断…...
ComfyUI AnimeDiff动画参数总结
ComfyUI AnimeDiff动画参数总结 一、动画生成核心参数 参数名称建议值/范围作用说明备注步数(Steps)15-25控制AI计算迭代次数,越高细节越精细,但耗时更长推荐20步,显存不足可降至15步CFG值7.0-8.5提示词对画面的控制…...
基于Three.js的多视图3D Tiles同步可视化技术解析
文章目录 基于Three.js的多视图3D Tiles同步可视化技术解析一、技术背景与价值二、核心实现原理2.1 视口分割算法2.2 视角同步机制三、关键代码解析3.1 渲染管线优化3.2 3D Tiles加载四、交互系统实现4.1 多视图事件分发4.2 射线拾取优化五、性能优化方案5.1 渲染性能指标5.2 W…...
7、什么是死锁,如何避免死锁?【高频】
(1)什么是死锁: 死锁 是指在两个或多个进程的执行时,每个进程都持有资源,并都在等待其他进程 释放 它所需的资源,如果此时所有的进程一直占有资源而不释放,就导致了死锁。 死锁只有同时满足 四…...
自动化学习-使用git进行版本管理
目录 一、为什么要学习git 二、git是什么 三、git如何使用 1、git的下载安装和配置 2、git常用的命令 3、gitee远程仓库的使用 (1)注册 (2)创建仓库 (3)配置公钥(建立电脑和git…...
前端大文件上传
一、切片上传技术原理 切片上传是把大文件分割成多个较小的切片,分别上传这些切片,最后在服务器端将它们合并成完整文件。这种方式能有效应对网络不稳定导致的上传失败问题,还可利用多线程并行上传,提升上传效率。 二、前端实现…...
【网络】实现电脑与笔记本电脑之间的直接网络连接
要实现电脑与笔记本电脑之间的直接网络连接,可以通过有线或无线两种方式。以下是详细的步骤指南: 一、有线直连(通过网线) 1. 准备工具 网线:使用交叉网线(适用于旧设备)或普通直连网线&#…...
“深入浅出”系列之音视频开发:(12)使用FFmpeg实现倍速播放:技术细节与优化思路
一、前言 在音视频处理领域,倍速播放是一个常见的需求,尤其是在视频播放器、在线教育平台等场景中,用户常常需要以不同的速度播放视频内容。然而,实现一个高质量的倍速播放功能并不容易,尤其是在处理音频时࿰…...
qt作业day2
1:在注册登录的练习里面,追加一个QListWidget 项目列表 要求:点击注册之后,将账号显示到 listWidget上面去 以及,在listWidget中双击某个账号的时候,将该账号删除 .h #ifndef WIDGET_H #define WIDGET_H …...
Qt:day1
一、作业 写1个Widget窗口,窗口里面放1个按钮,按钮随便叫什么; 创建2个Widget对象: Widget w1, w2; w1.show(); w2不管; 要求: 点击 w1.btn,w1隐藏,w2显示; 点击 w2.btn&…...
基于微信小程序的停车场管理系统的设计与实现
第1章 绪论 1.1 课题背景 随着移动互联形式的不断发展,各行各业都在摸索移动互联对本行业的改变,不断的尝试开发出适合于本行业或者本公司的APP。但是这样一来用户的手机上就需要安装各种软件,但是APP作为一个只为某个公司服务的一个软件&a…...
详细Linux基础知识(不断完善)
终端类型分类 1. 物理终端 直接连接到计算机的硬件设备2. 虚拟终端 通过快捷键切换的文本模式界面: Ctrl + Alt + F1 # 登录窗口 Ctrl + Alt + F2 # 当前图形界面 Ctrl + Alt + F3 # 虚拟命令终端 Ctrl + Alt + F4-F6 # 备用虚拟终端3. 图形终端 模拟终端:图形环境中的…...
类和对象-继承-C++
1.定义 面向对象的三大特征之一,为了减少重复的代码 2.语法 class 子类 :继承方式 父类 (子类也叫派生类,父类也称为基类) 例:class age:public person; #include<iostrea…...
初阶数据结构(C语言实现)——3顺序表和链表(1)
目录 【本节目标】1. 线性表2.顺序表2.1概念及结构2.2 接口实现2.2.0 动态顺序表2.2.1 顺序表初始化SLInit()2.2.2 销毁和打印2.2.3 尾插SLPushBack()2.2.4 尾删SLPopBack()2.2.5 头插2.2.6 头删2.2.7 插入…...
nuxt常用组件库html-validator、@nuxtjs/i18n、@nuxt/image、@unocss/nuxt使用解析
html-validator 主要用于自动验证nuxt服务器呈现的HTML(SSR和SSG),以检测可能导致水合错误的HTML常见问题,有助于减少水合错误,检测常见的可访问性错误。 安装 npx nuxilatest module add html-validator配置 若自动更新nuxt.config.ts配置文…...
4G工业路由器在公交充电桩中的应用与优势
随着电动公交车的普及,公交充电桩的稳定运行和高效管理是交通营运部门最关心的问题。4G工业路由器凭借其卓越的数据采集和通讯能力,成为实现充电桩智能化管理的关键。 公交充电桩运维管理需求概述: 1.实时性:实时监控充电状态、剩…...
matlab 四维数据可视化(已解决)
虽然这不是传统意义上的“4维可视化”,但你可以通过在三维空间中表示两个维度来间接展示4维数据。例如,你可以使用颜色来表示第四个维度。 clc clear close all% 假设X, Y, Z为你的三维数据,C为第四维数据 X rand(100, 1); Y rand(100, 1);…...
歌曲分类和流行度预测
1. 项目介绍 本项目从kaggle平台上下载了数据集,该数据集包含了3万多首来自Spotify API 的歌曲,共有23个特征。首先对数据集进行预处理,如重复行、缺失值、标准化处理等。再对预处理后的数据进行探索性分析,观察各变量的分布情况&…...
经验分享:用一张表解决并发冲突!数据库事务锁的核心实现逻辑
背景 对于一些内部使用的管理系统来说,可能没有引入Redis,又想基于现有的基础设施处理并发问题,而数据库是每个应用都避不开的基础设施之一,因此分享个我曾经维护过的一个系统中,使用数据库表来实现事务锁的方式。 之…...
oracle decode
1. 基本语法 DECODE(expression, search1, result1, search2, result2, ..., default_result) expression :需要比较的表达式或列。search1, search2, ... :要匹配的值。result1, result2, ... :当 expression 等于 search 时返回的结果。def…...
让后台界面布局更灵活:在GrapesJS中复刻Java的五区式布局
当你想要在可视化编辑器中做一个类似Java BorderLayout 的五区布局,却发现市面上大多只能“简单拼接”而难以自由扩展时,你或许就需要一个更灵活的布局管理器来帮忙。本篇文章就从这个痛点开始,带你一步步揭秘如何用 GrapesJS 自定义并实现一…...
【网络安全 | 漏洞挖掘】分享21个基础漏洞案例
未经许可,不得转载。 文章目录 案例1:绕过500状态码案例2:修改前端实现任意文件上传案例3:Nmap扫描端口命令案例4:绕过限制实现任意文件读取案例5:删除任意目录文件案例6:锁定任意账户案例7:重置任意用户密码案例8:接管任意账户方法一方法二案例9:功能校验机制绕过案…...
期权适合什么类型的投资者交易?
财顺小编本文主要介绍期权适合什么类型的投资者交易?期权适合的投资者类型需结合其风险偏好、投资目标及市场判断能力综合评估。 期权适合什么类型的投资者交易? 1. 风险管理型投资者(稳健型) 适用场景:持有股票、大…...
浅谈C++/C命名冲突
前言 在这里我会简要地介绍产生命名冲突的原因,和C中处理命名冲突的方法,同时和C语言的解决办法进行比较。 相信你在阅读完之后一定会有收获。对于我们来说,了解编译器的编译链接过程才能更好的理解编译器是如何报错的,更能让我们…...
【星云 Orbit • STM32F4】08. 用判断数据头来接收据的串口通用程序框架
【星云 Orbit • STM32F4】08. 用判断数据头来接收据的串口通用程序框架 1. 引言 本教程旨在帮助嵌入式开发小白从零开始,学习如何在STM32F407微控制器上实现一个基于串口的数据接收程序。该程序能够通过判断数据头来接收一串数据,并将其存储到缓冲区中…...
C# OnnxRuntime部署DAMO-YOLO香烟检测
目录 说明 效果 模型信息 项目 代码 下载 参考 说明 效果 模型信息 Model Properties ------------------------- --------------------------------------------------------------- Inputs ------------------------- name:input tensor:Floa…...