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

【高可用】keepalived的试用与学习笔记

版本日期修订人描述
V1.02025/2/23nick huang创建文档

背景

最近,预研给现有的Nginx单点实例添加故障转移的功能,以备单实例故障时无法快速恢复。
本文记录Keepalived的学习笔记,供自己或同学日后参考。

Keepalived

Keepalived是一个开源的高可用性解决方法,主要用于在Linux中实现服务的故障检测、自动故障转移和负载均衡。

Tips
从他的名称就能了解他的作用:keep alived —— 保持活跃

Tips
高可用(High Availability,HA),是指通过设计和技术手段,使系统或服务在面对硬件故障、网络故障、软件故障等潜在风险时,仍能持续稳定地提供服务的能力。
高可用不是单一的技术,而是架构设计、工程实现等的综合实现。
Keepalived是构建高可用集群的工具之一,通过VRRP协议和健康检查机制,简化服务冗余的实现。

VRRP协议(虚拟路由冗余协议)

Keepalived是基于VRRP协议的实现工具。VRRP协议定义了主备节点和故障切换的标准流程。

VRRP的背景:
在VRRP出现之前,局域网依赖单一物理设备作为默认网关,这种设计存在单点故障风险。
在90年代,IETF开始制定统一的网关冗余标准,通过VRRP解决上述问题。
VRRP作用:允许多台网关冗余协同工作,通过故障检测和切换手段在秒级通过虚拟IP完成切换,主机难以感知到网关变化。

安装

笔者使用的时CentOS,方便起见,用的是yum安装。

## yum命令
yum -y install keepalived## 查看安装后的路径和文件
# rpm -ql keepalived

简单的HelloWorld场景运行一下

1、我们先搭建好Nginx,Nginx的过程省略。
现在以下地址,应该能访问Nginx的默认静态资源:%nginx_hone%/html/index.html

http://服务器1的IP

2、备份好主可配置文件
Keepalived的主配置文件为:/etc/keepalived/keepalived.conf
我们后面需要修改此文件,修改前备份一下呗:

cp /etc/keepalived/keepalived.conf  /etc/keepalived/keepalived.conf.bak.origin

3、编辑主配置文件

vi /etc/keepalived/keepalived.conf

配置文件内容,实际可以了解各配置的作用并做调整或增删:

! Configuration File for keepalivedglobal_defs {router_id NGINX_HAvrrp_skip_check_adv_addrvrrp_strictvrrp_garp_interval 0vrrp_gna_interval 0
}vrrp_instance VI_1 {state MASTERinterface enp0s3virtual_router_id 66priority 100advert_int 1authentication {auth_type PASSauth_pass 你的密码}virtual_ipaddress {你的虚拟IP}
}

对于上述的配置的作用,做了一些简单地整理:

global_defs { # 全局定义notification_email { # 收到通知邮件xxxxxx@xxxxxx.xxx}notification_email_from xxxxxx@xxxxxx.xxx # 发件人smtp_server xxx.xxx.xxx.xxx # 发送邮件所使用的SMTP服务器地址smtp_connect_timeout 30 # 发送邮件连接超时时间router_id LVS_DEVEL # Keepalived的路由ID,在VRRP通信中用于标识不同的Keepalived实例vrrp_skip_check_adv_addr # 是否跳过VRRP广告报文中的源地址是否与上一个报文相同,启用则写入此配置项,无需赋值vrrp_strict # 是否严格遵守VRRP协议的规定vrrp_garp_interval 0 # 在VRRP环境中,当Master设备出现故障并切换到Backup时,Backup设备会发送Gratuitous ARP消息,以通知网络中的其他设备更新其ARP缓存,确保数据包能够正确地发送到新的Master设备。vrrp_garp_interval用于控制Gratuitous ARP消息的发送频率(实际上是发送延迟,延迟越短,频率越高)vrrp_gna_interval 0 # 在VRRP环境中,邻居通告消息用于在VRRP路由器之间传递状态信息,以确保它们之间的同步和协调,这些消息包括路由器的优先级、虚拟IP地址等信息,对于VRRP协议的正常运作至关重要,此配置用于配置此消息的发送延迟时间
}# 虚拟路由器实例配置
vrrp_instance VI_1 {state MASTER # 虚拟路由器实例的状态:MASTER为主路由器,BACKUP为备份路由器interface eth0 # 实例要绑定的物理接口(通常是一个真实网络接口)virtual_router_id 51 # 虚拟路由器标识符,用于唯一标识一个VRRP备份组,确保同一个局域网内,不同的VRRP备份组之间不会互相干扰priority 100 # 优先级,用于决定哪个路由器实例将成为VRRP备份组中的主路由器advert_int 1 # 通告间隔,用于指定VRRP路由器实例发送VRRP通告报文的时间间隔,这个参数对VRRP备份组的稳定性和故障转移速度有重要影响,默认1秒authentication { # 认证,用于确保VRRP备份组内的路由器实例之间的通信安全。通过配置认证,可以防止未经授权的路由器实例加入VRRP备份组,从而保护网络的稳定性和安全性auth_type PASS # 认证类型auth_pass xxxxxx # 认证密码}virtual_ipaddress { # 用于指定一个或多个虚拟IP地址,这些虚拟IP地址不属于任何物理接口,而是被分配给VRRP虚拟路由实例。当VRRP组的主路由器选举完成后,主路由器将接管这些虚拟IP地址,并对外提供服务。你的VIP IP 1你的VIP IP 2你的VIP IP 3}track_script { # 用于关联之前定义的vrrp_script监控脚本}
}

4、启动
在启动前,你可以使用ip a查询并记录一下网络信息。
启动后因为加入虚拟IP的特性,网络信息会加入虚拟IP的变化。

启动命令:

systemctl start keepalived.service

5、验证结果
你可以从这几个角度检查下是否启动:

1)查看进程
ps -ef | grep keep2)查看系统日志的Keepalived相关日志
less /var/log/messages3)查看网络信息中是否存在配置的虚拟IP
ip a

如果顺利,你应该可以通过虚拟IP访问Nginx的资源:

http://虚拟IP/

两个Nginx副本,Keepalived做故障转移

1、在另一台服务器再搭建一个Nginx实例,搭建过程省略。

2、添加检测Nginx进程是否存活的脚本,并添加执行权限

vi /opt/keepalived/shell/monitor_nginx.sh

脚本内容:

Tips
本脚本仅做本次测试使用,实际使用可以写得更严谨、健壮些。

后话:经过简单地压测,此脚本在主服务器的Nginx宕机后,二次启动时,会有几秒的中断。
因为此脚本的判断点是“是否有Nginx的进程”,而Nginx在“启动进程”到“真正能接受请求”,可能还是有时间差的,这不够严谨,所以造成几秒的中断。

#!/bin/bashnginx_ps_num=`ps -C nginx --no-header | wc -l`if [ $nginx_ps_num == 0 ]; thenexit 1
fiexit 0

可以看到上述脚本有两种返回:
1)返回0,表示监控的服务正常运行,不会触发故障转移
2)返回1,表示监控的服务异常,可能触发故障转移(取决于失败次数和其他配置)

3、在服务器1配置主配置文件

vi /etc/keepalived/keepalived.conf

配置内容参考,实际可以了解各配置的作用并做调整或增删:

! Configuration File for keepalivedglobal_defs {router_id NGINX_HAvrrp_skip_check_adv_addrvrrp_strictvrrp_garp_interval 0vrrp_gna_interval 0
}vrrp_script monitor_nginx_script {script "/opt/keepalived/shell/monitor_nginx.sh"interval 1weight 10fall 1rise 3
}vrrp_instance VI_21 {state MASTERinterface enp0s3virtual_router_id 66priority 55advert_int 1authentication {auth_type PASSauth_pass 你的密码}virtual_ipaddress {你的虚拟IP}track_script {monitor_nginx_script}
}

对于上述的新增配置的作用,做了一些简单地整理:

vrrp_script monitor_xxxxx_script { # 定义脚本来监控某些条件或服务的状态,这些脚本通常用于检测后端服务的健康状态script "/opt/keepalived/shell/monitor_xxxxx.sh" # 具体要执行的脚本的路径或内容,这个脚本是一个shell命令或可执行程序,它会被Keepalived定期调用以检查某个条件或服务的状态interval 1 # 定期执行监控脚本的时间间隔,单位为秒weight -20 # 当执行脚本的执行结果触发状态变化时,应该增加或减少VRRP实例的优先级的量值。正数权重,当脚本执行成功时,VRRP实例的优先级会增加相应权重值;负数权重,当脚本执行失败时,VRRP实例的优先级会减少相应的权重值。timeout 3 # 脚本超时时间,单位为秒(可选配置)fall 2 # 失败次数达到此值时触发状态切换(可选配置)rise 2 # 成功次数达到此值时恢复状态(可选配置)
}

4、在服务器1配置主配置文件

vi /etc/keepalived/keepalived.conf

配置内容参考,实际可以了解各配置的作用并做调整或增删:

! Configuration File for keepalivedglobal_defs {router_id NGINX_HAvrrp_skip_check_adv_addrvrrp_strictvrrp_garp_interval 0vrrp_gna_interval 0
}vrrp_script monitor_nginx_script {script "/opt/keepalived/shell/monitor_nginx.sh"interval 1weight 10fall 1rise 3
}vrrp_instance VI_22 {state BACKUPinterface enp0s3virtual_router_id 66priority 50advert_int 1authentication {auth_type PASSauth_pass 你的密码}virtual_ipaddress {你的虚拟IP}track_script {monitor_nginx_script}
}

5、启动及验证
在启动前,你可以使用ip a查询并记录一下网络信息。
启动后因为加入虚拟IP的特性,网络信息会加入虚拟IP的变化。

启动命令:

systemctl start keepalived.service

两台服务器均启动成功后,你可以发现其中一台服务器的网络信息上有虚拟IP的信息,那台就是主服务器。

你访问以下地址,实际访问的是主服务器的资源。
http://虚拟IP/

Tips
因为使用Nginx的默认静态资源作访问测试。
可以将两台Nginx服务器的默认静态资源稍作修改(添加标识),使得我们用浏览器访问时能够识别当时访问的是哪台机器。
具体如何修改呢?
编辑此文件:%nginx_hone%/html/index.html,在内容中添加你可辨别的表示即可。

此时,我们可以测试故障转移的场景:
关闭主服务器的Nginx进程,再访问以下地址。如果顺利的话,你应该可以访问成功,此时实际访问的是另一台服务器的资源了:
http://虚拟IP/

Tips
如果发现故障转移不成功,或发现两台服务器的网络信息中均包含虚拟IP信息。
可以检查下服务器的防火墙是否禁止了相关的网络行为。

最后

小弟不才,学识有限,如有错漏,欢迎指正哈。
如果本文对你有帮助,记得“一键三连”(“点赞”、“评论”、“收藏”)哦!

相关文章:

【高可用】keepalived的试用与学习笔记

版本日期修订人描述V1.02025/2/23nick huang创建文档 背景 最近,预研给现有的Nginx单点实例添加故障转移的功能,以备单实例故障时无法快速恢复。 本文记录Keepalived的学习笔记,供自己或同学日后参考。 Keepalived Keepalived是一个开源的…...

在Dify中实现联网检索功能(模拟DeepSeek)

跟着上一篇博客:Error response from daemon: Get “https://registry-1.docker.io/v2/“: request canceled while的解决办法-CSDN博客 DeepSeek发布之后,感觉联网检索功能变成标配了。这篇博客简单介绍一下怎么在Dify中配置初步的联网检索功能&#x…...

Deepseek-强化学习算法(通俗易懂版)

首先先贴一张Deepseek核心技术的梳理图: 上图详细了讲述了Deepseek主要在哪些阶段用了强化学习方法(GRPO) 1.GRPO算法 GRPO是一种用于提高语言模型推理能力的强化学习算法。它在DeepSeekMath论文中,在数学推理的背景下被提出。G…...

[展示]Webrtc NoiseSuppressor降噪模块嵌入式平台移植

最近在尝试把WebRtc的NoiseSuppressor模块移植到嵌入式平台,现在已经移植了,尝试了下效果,降噪效果很显著,噪声带被显著抑制了 降噪前: 降噪后:...

了解 RAG 第二部分:经典 RAG 的工作原理

在本系列的第一篇文章中,我们介绍了检索增强生成 (RAG) ,解释了扩展传统大型语言模型 (LLM)功能的必要性。我们还简要概述了 RAG 的核心思想:从外部知识库检索上下文相关的信息,以确保 LLM 生成准确且最新的信息,而不会…...

剖析IO原理和零拷贝机制

目录 1 Linux的五种IO模型1.1 模型调用的函数1.1.1 recv函数1.1.2 select函数1.1.3 poll函数1.1.4 epoll函数1.1.5 sigaction函数 1.2 IO模型1.2.1 阻塞IO模型1.2.2 非阻塞IO模型1.2.3 IO复用模型1.2.4 信号驱动IO模型1.2.5 异步IO模型1.2.6 IO模型比较 2 Java的BIO、NIO、AIO2…...

【论文精读】MapTR:用于在线矢量化高精地图构建的结构化建模与学习

论文地址: MAPTR: STRUCTURED MODELING AND LEARNING FOR ONLINE VECTORIZED HD MAP CONSTRUCTION 源代码:MapTR 摘要 High-definition(HD Map)map为自动驾驶场景提供了丰富且精确的环境信息,是自动驾驶系统规划中不…...

云图库平台(五)——后端图片模块开发

目录 一、需求分析二、库表设计三、图片的处理如何实现图片的上传和下载创建图片的业务流程如何对图片进行解析 四、创建并使用对象存储五、后端操作对象存储初始化客户端通用能力类文档上传文件下载 一、需求分析 管理员功能: 图片的上传和创建:仅管理…...

Linux红帽:RHCSA认证知识讲解(一)RedHat背景与环境配置

Linux红帽:RHCSA认证知识讲解(一)RedHat背景与环境配置 前言一、RedHat公司背景二、RedHat环境安装步骤三、windows使用远程工具连接环境并上传文件到redhat方法: 前言 在接下来的博客中,我们从基础开始将介绍红帽Linu…...

【Linux】基于UDP/TCP套接字编程与守护进程

目录 一、网路套接字编程 (一)基础概念 1、源IP地址与目的IP地址 2、端口号 3、TCP与UDP 4、网络字节序 (二)套接字编程接口 1、socket 常见API 2、sockaddr结构 (三)UDP套接字 1、UDP服务器创建…...

Linux CentOS 上 Ollama 的安装与部署:从入门到实践

Linux CentOS 上 Ollama 的安装与部署:从入门到实践 随着人工智能技术的快速发展,大语言模型(LLMs)的应用场景越来越广泛。Ollama 作为一个轻量级的 AI 模型管理工具,为开发者提供了便捷的模型部署和管理解决方案。本文将详细介绍如何在 Linux CentOS 系统上安装和部署 O…...

大数据学习之任务流调度系统Azkaban、Superset可视化系统

一.任务流调度系统Azkaban 1.课程介绍 2.为什么需要工作流调度系统 3.AZKABAN是什么 4.AZKABAN下载 5.制作安装包 6.tar包准备 7.MYSQL配置AZKABAN 8.配置EXECUTOR SERVER 9.配置WEBSERVER 10.单作业实战_yaml语言(今天稍晚更新) 11.单作业实战 12.多作业依赖实战 13.失败自动重…...

网络空间安全(2)应用程序安全

前言 应用程序安全(Application Security,简称AppSec)是一个综合性的概念,它涵盖了应用程序从开发到部署,再到后续维护的整个过程中的安全措施。 一、定义与重要性 定义:应用程序安全是指识别和修复应用程序…...

UDP、TCP的区别

UDP(用户数据报协议)和TCP(传输控制协议)是两种常用的传输层协议,它们在数据传输方式、可靠性和应用场景等方面有显著区别。以下是它们的主要区别: ### 1. 连接方式 - **TCP**:面向连接。通信前…...

Linux 第二次脚本作业

1、需求:判断192.168.1.0/24网络中,当前在线的ip有哪些,并编写脚本打印出来。 2、设计一个 Shell 程序,在/userdata 目录下建立50个目录,即 user1~user50,并设置每个目录的权限,其中其他用户的权…...

高清下载油管视频到本地

下载工具并安装: yt-dlp官网地址: GitHub - yt-dlp/yt-dlp: A feature-rich command-line audio/video downloader ffmpeg官网地址: Download FFmpeg 注:记住为其添加环境变量 操作命令: 该指令表示以720p码率下载VIDEO_UR…...

Linux 命令大全完整版(07)

2. linux 系统设置命令 ulimit 功能说明&#xff1a;控制 shell 程序的资源。语法&#xff1a;ulimit [-aHS][-c <core 文件上限>][-d <数据节区大小>][-f <文件大小>][-m <内存大小>][-n <文件数目>][-p <缓冲区大小>][-s <堆叠大小…...

基于CentOS7安装kubesphere和Kubernetes并接入外部ES收集日志

一、修改所有节点主机名 主节点就修改成master hostnamectl set-hostname master 然后输入bash刷新当前主机名 工作节点1就修改成node1 hostnamectl set-hostname node1 然后输入bash刷新当前主机名 二、全部节点安装依赖并同步时间 yum -y install socat conntrack ebta…...

Javascript网页设计案例:通过PDFLib实现一款PDF分割工具,分割方式自定义-完整源代码,开箱即用

功能预览 一、工具简介 PDF 分割工具支持以下核心功能: 拖放或上传 PDF 文件:用户可以通过拖放或点击上传 PDF 文件。两种分割模式: 指定范围:用户可以指定起始页和结束页,提取特定范围的内容。固定间距:用户可以设置间隔页数(例如每 5 页分割一次),工具会自动完成分…...

高速差分信号的布线

差分信号如何在PCB上布线&#xff1f; 1.差分信号必须保证线间距相等&#xff0c;禁止打过孔或者放置元器件 2.差分信号必须打孔时&#xff0c;必须要保证伴随屏蔽地过孔&#xff08;缝合定位孔&#xff09;&#xff0c;减少信号干扰问题。 3.差分信号走线弯曲位置推荐&#…...

用openresty和lua实现壁纸投票功能

背景 之前做了一个随机壁纸接口&#xff0c;但是不知道大家喜欢对壁纸的喜好&#xff0c;所以干脆在实现一个投票功能&#xff0c;让用户给自己喜欢的壁纸进行投票。 原理说明 1.当访问http://demo.com/vote/时&#xff0c;会从/home/jobs/webs/imgs及子目录下获取图片列表&…...

智能测试执行 利用算法 利用图像识别、自然语言处理等技术实现自动化测试执行

以下将从Web应用和移动应用两个方面,给出利用图像识别、自然语言处理等技术实现自动化测试执行的实例,并附上部分代码示例。 Web应用自动化测试实例:模拟用户登录操作测试 需求理解 对于一个Web应用的登录功能进行自动化测试,我们可以结合自然语言处理理解测试用例描述,…...

AI学习之-阿里天池

阿里天池&#xff08;Tianchi&#xff09;是阿里巴巴集团旗下的一个数据科学与人工智能竞赛平台&#xff0c;致力于推动数据科学和人工智能的发展。在天池平台上&#xff0c;人们可以参与各种数据竞赛和挑战&#xff0c;解决实际问题&#xff0c;提升数据科学技能。天池平台提供…...

AGI觉醒假说的科学反驳:从数学根基到现实约束的深度解析

文章目录 引言:AGI觉醒论的核心迷思一、信息论视角:意识产生的熵约束1.1 香农熵的物理极限1.2 量子退相干的时间屏障二、数学根基:形式系统的自指困境2.1 哥德尔不完备定理的现代诠释三、概念解构:AGI觉醒假说的认知陷阱3.1 术语混淆的迷雾3.2 拟人化谬误的认知根源四、意识…...

SpringMVC的基本使用

controller标记一个类是控制器类 RequestMapping 进行路由映射可以是类也可以是方法&#xff0c;路由的/可以不加&#xff0c;但建议加上 1&#xff09;简单的映射返回一个hello RequestMapping("/m1")public String m1() { return "hello";} 2&#x…...

【漫话机器学习系列】103.学习曲线(Learning Curve)

学习曲线&#xff08;Learning Curve&#xff09;详解 1. 什么是学习曲线&#xff1f; 学习曲线&#xff08;Learning Curve&#xff09;是机器学习和深度学习领域中用于评估模型性能随训练过程变化的图示。它通常用于分析模型的学习能力、是否存在过拟合或欠拟合等问题。 从…...

ubuntu-24.04.1-desktop 中安装 QT6.7

ubuntu-24.04.1-desktop 中安装 QT6.7 1 环境准备1.1 安装 GCC 和必要的开发包:1.2 Xshell 连接 Ubuntu2 安装 Qt 和 Qt Creator:2.1 下载在线安装器2.2 在虚拟机中为文件添加可执行权限2.3 配置镜像地址运行安装器2.4 错误:libxcb-xinerama.so.0: cannot open shared objec…...

MQTT实现智能家居------2、写MQTT程序的思路

举个最简单的例子&#xff1a; 手机------服务器-------家具 我们这里只看手机和家具的客户端&#xff1a; 手机&#xff1a;1&#xff09;需要连接服务器 2&#xff09;需要发布指令给服务器到家里的家具 3&#xff09;接受来自于家里家具的异常状况 4&#xff09;保持心…...

【个人开发】deepspeed+Llama-factory 本地数据多卡Lora微调【完整教程】

文章目录 1.背景2.微调方式2.1 关键环境版本信息2.2 步骤2.2.1 下载llama-factory2.2.2 准备数据集2.2.3 微调模式2.2.3.1 zero-1微调2.2.3.2 zero-2微调2.2.3.3 zero-3微调2.2.3.4 单卡Lora微调 2.2.4 实验2.2.4.1 实验1&#xff1a;多GPU微调-zero12.2.4.2 实验2&#xff1a;…...

DeepSeek 从入门到精通:全面掌握 DeepSeek 的核心功能与应用

引言 DeepSeek 是一款功能强大的工具&#xff08;或平台/框架&#xff0c;具体根据实际定义&#xff09;&#xff0c;广泛应用于数据分析、人工智能、自动化任务等领域。无论你是初学者还是资深开发者&#xff0c;掌握 DeepSeek 的核心功能和应用场景都将为你的工作和学习带来…...

“国补”带火手机换新,出售旧手机应如何保护个人信息安全

在“国补”政策的推动下,手机换新热潮正席卷而来。“国补”以其诱人的补贴力度,成功激发了消费者更换手机的热情。无论是渴望体验最新技术的科技爱好者,还是对旧手机性能不满的普通用户,都纷纷投身到这场手机换新的浪潮之中。 随着大量消费者参与手机换新,二手手机市场迎来…...

驱动开发系列39 - Linux Graphics 3D 绘制流程(二)- 设置渲染管线

一:概述 Intel 的 Iris 驱动是 Mesa 中的 Gallium 驱动,主要用于 Intel Gen8+ GPU(Broadwell 及更新架构)。它负责与 i915 内核 DRM 驱动交互,并通过 Vulkan(ANV)、OpenGL(Iris Gallium)、或 OpenCL(Clover)来提供 3D 加速。在 Iris 驱动中,GPU Pipeline 设置 涉及…...

Windows使用docker部署fastgpt出现的一些问题

文章目录 Windows使用docker部署FastGPT出现的一些问题1.docker部署pg一直重启的问题2.重启MongoDB之后一直出现“Waiting for MongoDB to start...”3.oneapi启动不了failed to get gpt-3.5-turbo token encoder Windows使用docker部署FastGPT出现的一些问题 1.docker部署pg一…...

六十天前端强化训练之第一天HTML5语义化标签深度解析与博客搭建实战

欢迎来到编程星辰海的博客讲解 目录 一、语义化标签的核心价值 1.1 什么是语义化&#xff1f; 1.2 核心优势 二、语义标签详解与使用场景 2.1 布局容器标签 2.2 内容组织标签 三、博客结构搭建实战 3.1 完整HTML结构 3.2 核心结构解析 3.3 实现效果说明 四、学习要点…...

Oracle中补全时间的处理

在实际数据处理的过程中&#xff0c;存在日期不连续的问题&#xff0c;可能会导致数据传到前后端出现异常&#xff0c;为了避免这种问题&#xff0c;通常会从数据端进行日期不全的处理&#xff1a; 以下为补全年份的案例&#xff1a; with x as (select 开始年份 &#xff08;…...

PHP课程预约小程序源码

&#x1f4f1; 课程预约小程序&#xff1a;为您专属定制的便捷预约新体验 在这个快节奏的时代&#xff0c;我们深知每一位瑜伽爱好者、普拉提追随者以及培训机构管理者对高效、便捷服务的迫切需求。因此&#xff0c;我们匠心独运&#xff0c;推出了一款基于PHPUniApp框架开发的…...

(200): error: #29: expected an expression error: #40: expected an identifier

这是因为你乱加define导致你的define与变量名重复就会出现&#xff0c;他找不到错误只会抱着两个错...

一文讲解Redis中的常用命令

①、操作字符串的命令有&#xff1a; SET key value&#xff1a;设置键 key 的值为 value。GET key&#xff1a;获取键 key 的值。DEL key&#xff1a;删除键 key。INCR key&#xff1a;将键 key 存储的数值增一。DECR key&#xff1a;将键 key 存储的数值减一。 ②、操作列表…...

智能交通系统(Intelligent Transportation Systems):智慧城市中的交通革新

智能交通系统&#xff08;Intelligent Transportation Systems, ITS&#xff09;是利用先进的信息技术、通信技术、传感技术、计算机技术以及自动化技术等&#xff0c;来提升交通系统效率和安全性的一种交通管理方式。ITS通过收集和分析交通数据&#xff0c;智能化地调度、控制…...

Node.js 登录鉴权

目录 Session express-session 配置 express-session 函数 ts 要配置声明文件 express-session.d.ts express-session 使用 express-session 带角色 Token 什么是 JWT token jsonwebtoken 使用 jsonwebtoken 带角色 Session express 使用 express-session 管理会话&…...

EPSON L3118彩色喷墨打印机灯全闪故障维修一例

一台EPSON L3118彩色喷墨打印机&#xff0c;故障时开机灯全闪烁&#xff0c;一般来说这种故障问题都不太大&#xff0c;要么就是打印机内部卡纸了&#xff0c;要么就是传感器故障&#xff0c;一般情况下卡纸的问题比较多… …&#xff1b; 但是遇到一用户又菜又爱玩&#xff0c…...

在 Mac ARM 架构的 macOS 系统上启用 F1 键作为 Snipaste 的截屏快捷键

在 Mac ARM 架构的 macOS 系统上启用 F1 键作为 Snipaste 的截屏快捷键&#xff0c;主要涉及到两个方面&#xff1a;确保 F1 键作为标准功能键工作 和 在 Snipaste 中设置 F1 为快捷键。 因为 Mac 默认情况下&#xff0c;F1-F12 键通常用作控制屏幕亮度、音量等系统功能的快捷键…...

基于AT89C51单片机的教室智能照明控制系统

点击链接获取Keil源码与Project Backups仿真图&#xff1a; https://download.csdn.net/download/qq_64505944/90419908?spm1001.2014.3001.5501 C16 部分参考设计如下&#xff1a; 摘 要 本项目的智能教室灯光控制系统通过合理的软硬件设计&#xff0c;有效地提升了教室…...

JavaSE学习笔记25-反射(reflection)

反射 在Java中&#xff0c;反射&#xff08;Reflection&#xff09; 是一种强大的机制&#xff0c;允许程序在运行时检查和操作类、方法、字段等信息。通过反射&#xff0c;可以动态地创建对象、调用方法、访问字段&#xff0c;甚至修改私有成员。反射的核心类是 java.lang.re…...

ctf网络安全题库 ctf网络安全大赛答案

此题解仅为部分题解&#xff0c;包括&#xff1a; 【RE】&#xff1a;①Reverse_Checkin ②SimplePE ③EzGame 【Web】①f12 ②ezrunner 【Crypto】①MD5 ②password ③看我回旋踢 ④摩丝 【Misc】①爆爆爆爆 ②凯撒大帝的三个秘密 ③你才是职业选手 一、 Re ① Reverse Chec…...

旋转位置编码(ROPE)详解:从Transformer到现代前沿

旋转位置编码&#xff08;ROPE&#xff09;详解&#xff1a;从Transformer到现代前沿 标签&#xff1a;NLP, Transformer, 位置编码, ROPE, 深度学习, 机器学习 摘要&#xff1a;本文详细介绍了旋转位置编码&#xff08;ROPE&#xff09;在Transformer模型中的应用&#xff0…...

ROS2机器人开发--服务通信与参数通信

服务通信与参数通信 在 ROS 2 中&#xff0c;服务&#xff08;Services&#xff09;通信和参数&#xff08;Parameters&#xff09;通信是两种重要的通信机制。服务是基于请求和响应的双向通信机制。参数用于管理节点的设置&#xff0c;并且参数通信是基于服务通信实现的。 1 …...

安全运维,等保测试常见解决问题。

1. 未配置口令复杂度策略。 # 配置密码安全策略 # vi /etc/pam.d/system-auth # local_users_only 只允许本机用户。 # retry 3 最多重复尝试3次。 # minlen12 最小长度为12个字符。 # dcredit-1 至少需要1个数字字符。 # ucredit-1 至少需要1个大…...

【数据标准】数据标准化是数据治理的基础

导读&#xff1a;数据标准化是数据治理的基石&#xff0c;它通过统一数据格式、编码、命名与语义等&#xff0c;全方位提升数据质量&#xff0c;确保准确性、完整性与一致性&#xff0c;从源头上杜绝错误与冲突。这不仅打破部门及系统间的数据壁垒&#xff0c;极大促进数据共享…...

Java 18~20 新特性

文章目录 一、Java 18 新特性1.1、UTF-8 作为默认字符集&#xff08;JEP 400&#xff09;1.2、简易 Web 服务器&#xff08;JEP 408&#xff09;1.3、代码片段标签 snippet&#xff08;JEP 413&#xff09;1.4、使用方法句柄重新实现反射核心&#xff08;JEP 416&#xff09;1.…...