keepalived高可用介绍
keepalived 是 Linux 一个轻量级的高可用解决方案,提供了心跳检测和资源接管、检测集群中的系统服务,在集群节点间转移共享IP 地址的所有者等。
工作原理
keepalived 通过 VRRP(virtual router redundancy protocol)虚拟路由冗余协议来实现高可用。在这个协议里会将多态功能相同的路由组成一个小组,这个小组会有一个 master 角色 和 N(N >=1)个 backup 角色。
Keepalived 有三个模块:core、check、vrrp。
其中:
core 模块 为 Keepalived 的核心,负责主进程启动、维护以及全局配置文件的加载和解析;
check 模块负责 健康检查;
vrrp 负责实现 vrrp 协议。
keepalived 的体系结构
keepalived 的体系 结构从整体上分为 两层,分别是用户层 (User Space)和 内核空间层(Kernel Space)。
内核空间层处于最底层,它包括 IPVS 和 NETLINK 两个模块。IPVS 模块是 Keepalived 引入 的一个第三方模块,通过 IPVS 可以实现基于 IP 的负载均衡集群。IPVS 默认包含在 LVS 集群软件中。而对于 LVS 集群软件,在 LVS 集群中, IPVS 安装在 一台叫 Director Server 的服务器上,同时在 Director Server 上虚拟出一个 IP 地址对外提供服务,而用户必须通过这个虚拟 IP 地址才能访问服务。这个虚拟 IP 一般成为 LVS 的 VIP,即 Virtual IP。访问的请求首先经过 VIP 到达 Director Server ,然后有 Director Server 从服务器集群节点中选取一个 服务节点响应用户的请求。
Keepalived的配置文件解析
Keepalived的核心组件,包含了一系列功能模块,主要有WatchDog、Checkers、VRRP Stack、IPVS wrapper 和Netlink Reflector,下面介绍每个模块所实现的功能如下:
1、WatchDog
WatchDog是计算机可靠性领域中一个极为简单又非常有效的检测工具,它的工作原理是针对被监视的目标设置一个计数器和一个阈值,WatchDog会自己增加此计数值,然后等待被监视的目标周期性地重置该计数值。一旦被监控目标发生错误,就无法重置此计数值,WatchDog就会检测到,于是采取对应的恢复措施,例如重启或关闭。
在linux中很早就引入了WatchDog功能,而Keepalived正是通过WatchDog的运行机制来监控Checkers和VRRP进程的。
2、 Checkers
这是Keepalived最基础的功能,也是最主要的功能,可实现对服务器运行状态检测和故障隔离。
3、 VRRP Stack
这是Keepalived后来引入的VRRP功能,可以实现HA集群中失败切换(Failover)功能。Keepalived通过VRRP功能再结合LVS负载均衡软件即可部署一个高性能的负载均衡集群系统。
4、 IPVS wrapper
这是IPVS功能的一个实现。IPVS wrapper模块可以将设置好的IPVS规则发送到内核空间并提交给IPVS模块,最终实现IPVS模块的负载均衡功能。
5、 Netlink Reflector
用来实现高可用集群中Failover时虚拟IP(VIP)的设置和切换。Netlink Reflector的所有请求最后都发送到内核空间层的NETLINK模块来完成。
配置文件说明
keepalived配置文件按层级和模块划分的,每层由"{ }"来界定。 在主配置文件中可以通过include来涵盖多个子配置文件。 语法说明:
BOOL: on|off|true|false|yes|no
TIMER: 以秒为单位的时间值,包括小数秒,如3,2.71828。计时器的分辨率是微妙。
关于脚本引用:
双引号"字符串中嵌入其他双引号或空格,那么字符串将仅在带引号的字符串之后结束(如:“abcd” efg h jkl “mnop” 等同于 “abcd efg h jkl mnop”;)。
对于使用参数指定脚本,不带引号的空格将分隔参数。如果参数需要包含空格,则应将其括在单引号(')中
配置文件结构
! Configuration File for keepalived# 全局定义
global_defs {# 指定接收通知的邮箱地址列表notification_email {acassen@firewall.locfailover@firewall.locsysadmin@firewall.loc}# 指定发件人的邮箱地址notification_email_from Alexandre.Cassen@firewall.loc# SMTP 服务器地址,用于发送邮箱通知smtp_server 192.168.200.1# SMTP 连接超时时间smtp_connect_timeout 30# 标识当前节点的唯一 IDrouter_id LVS_DEVEL# 跳过检查 VRRP 广播地址vrrp_skip_check_adv_addr# 其余严格的 VRRP 模式vrrp_strict# 设置 GARP 的时间间隔vrrp_garp_interval 0# 设置 GNA 的时间间隔vrrp_gna_interval 0
}# VRRP 实例
vrrp_instance VI_1 {# 当前节点的角色 (MASTER 或 BACKUP)。主节点设置为 MASTER,从节点设置为 BACKUPstate MASTER# 绑定的网络接口(如 eth0)interface eth0# 虚拟路由的 ID(范围0 - 255),同一组中的所有节点必须使用相同的值virtual_router_id 51# 节点的优先级(范围1 - 254),数值越高优先级越高priority 100# VRRP 广播间隔时间(秒)advert_int 1# VRRP 认证信息authentication {# 认证类型(PASS 表示简单密码认证)auth_type PASS# 认证密码auth_pass 1111}# 虚拟 IP 地址列表,这些 IP 将绑定在当前节点的网络接口上virtual_ipaddress {192.168.200.16192.168.200.17192.168.200.18}
}# 虚拟服务器
# 定义一个虚拟服务器,监听指定的IP 和端口(如:192.168.200.100 443)
virtual_server 192.168.200.100 443 {# 健康检查的间隔时间(秒)delay_loop 6# 负载均衡算法(如 rr 表示轮训)lb_algo rr# 负载均衡模式(如 NAT 表示网络地址转换)lb_kind NAT# 会话保持时间(秒)persistence_timeout 50# 协议类型(TCP)protocol TCP# 定义真实后端服务器real_server 192.168.201.100 443 {# 权重值,用于分配流量的比例weight 1# 使用 SSL 请求进行健康检查SSL_GET {# 检查的目标 URL 及其 MD5 摘要值url {path /digest ff20ad2481f97b1754ef3e12ecd3a9cc}url {path /mrtg/digest 9b3a0c85a887a256d6939da88aabd8cd}# 连接超时时间connect_timeout 3# 失败后重试时间retry 3# 重试前的延迟时间delay_before_retry 3}}
}
配置文件包括以下几个模块:
1.GLOBAL CONFIGURATION
包含配置文件中的global_defs、static_ipaddress、static_route区域,负责定义邮件的相关配置、route_id、vrrp配置、多播地址、节点的ip和路由信息等
global_defs 全局配置
vrrpd1. vrrp_script添加一个周期性执行的脚本。脚本的退出状态码会被调用它的所有的VRRP Instance记录。2. vrrp_sync_group将所有相关的VRRP实例定义在一起,作为一个VRRP Group,如果组内的任意一个实例出现问题,都可以实现Failover3. garp_group4. vrrp_instance
LVS配置
virtual_serverreal_server
real_server中的健康检查
HTTP_GET or SSL_GET
TCP_CHECK
TCP_CHECK
DNS_CHECK
DNS_CHECK
全局配置模块
! Configuration File for keepalived
global_defs { #全局定义部分notification_email { #设置报警邮件地址,可设置多个acassen@firewall.loc #接收通知的邮件地址failover@firewall.loc} notification_email_from test0@163.com #设置 发送邮件通知的地址smtp_server smtp.163.com #设置 smtp server 地址,可是ip或域名.可选端口号 (默认25)smtp_connect_timeout 30 #设置 连接 smtp server的超时时间router_id LVS_DEVEL #主机标识,用于邮件通知vrrp_strict #严格执行VRRP协议规范,此模式不支持节点单播script_user keepalived_script #指定运行脚本的用户名和组。默认使用用户的默认组。如未指定,默认为keepalived_script 用户,如无此用户,则使用rootenable_script_security #如过路径为非root可写,不要配置脚本为root用户执行。
}
2.BFD CONFIGURATION
用于快速检测系统之间的通信故障,并在出现故障时通知上层应用。
它具有两优点:
对网络设备间任意类型的双向转发路径提供快速、轻负荷的故障检测
用单一的机制对任何介质、任何协议层进行实时检测,并支持不同的检测时间与开销
3. VRRPD CONFIGURATION
包含配置文件中的vrrp_script、vrrp_instance、vrrp_sync_group、garp_group区域,负责定义每个vrrp虚拟路由器
vrrp_script配置
作用:添加一个周期性执行的脚本。脚本的退出状态码会被调用它的所有的VRRP Instance记录。
注意:至少有一个VRRP实例调用它并且优先级不能为0.优先级范围是1-254.
vrrp_script <SCRIPT_NAME> {...}
选项说明:
script "/path/to/somewhere":指定要执行的脚本的路径。
interval <INTEGER>:指定脚本执行的间隔。单位是秒。默认为1s。
timeout <INTEGER>:指定在多少秒后,脚本被认为执行失败。
weight <-254 --- 254>:调整优先级。默认为2.
rise <INTEGER>:执行成功多少次才认为是成功。
fall <INTEGER>:执行失败多少次才认为失败。
user <USERNAME> [GROUPNAME]:运行脚本的用户和组。
init_fail:假设脚本初始状态是失败状态。
解释:
weight:
1. 如果脚本执行成功(退出状态码为0),weight大于0,则priority增加。
2. 如果脚本执行失败(退出状态码为非0),weight小于0,则priority减少。
3. 其他情况下,priority不变
vrrp_instance
命令说明:
state MASTER|BACKUP:指定该keepalived节点的初始状态。
interface eth0:vrrp实例绑定的接口,用于发送VRRP包。
use_vmac [<VMAC_INTERFACE>]:在指定的接口产生一个子接口,如vrrp.51,该接口的MAC地址为组播地址,通过该接口向外发送和接收VRRP包。
vmac_xmit_base:通过基本接口向外发送和接收VRRP数据包,而不是通过VMAC接口。
native_ipv6:强制VRRP实例使用IPV6.(当同时配置了IPV4和IPV6的时候)
dont_track_primary:忽略VRRP接口的错误,默认是没有配置的。
track_interface {eth0eth1 weight <-254-254>...
}:如果track的接口有任何一个出现故障,都会进入FAULT状态。
track_script {<SCRIPT_NAME><SCRIPT_NAME> weight <-254-254>
}:添加一个track脚本(vrrp_script配置的脚本。)
mcast_src_ip <IPADDR>:指定发送组播数据包的源IP地址。默认是绑定VRRP实例的接口的主IP地址。
unicast_src_ip <IPADDR>:指定发送单薄数据包的源IP地址。默认是绑定VRRP实例的接口的主IP地址。
version 2|3:指定该实例所使用的VRRP版本。
unicast_peer {<IPADDR>...
}:采用单播的方式发送VRRP通告,指定单播邻居的IP地址。
virtual_router_id 51:指定VRRP实例ID,范围是0-255.
priority 100:指定优先级,优先级高的将成为MASTER。
advert_int 1:指定发送VRRP通告的间隔。单位是秒。
authentication {auth_type PASS|AH:指定认证方式。PASS简单密码认证(推荐),AH:IPSEC认证(不推荐)。auth_pass 1234:指定认证所使用的密码。最多8位。
}
virtual_ipaddress {<IPADDR>/<MASK> brd <IPADDR> dev <STRING> scope <SCOPE> label <LABEL>192.168.200.17/24 dev eth1192.168.200.18/24 dev eth2 label eth2:1
}:指定VIP地址。
nopreempt:设置为不抢占。默认是抢占的,当高优先级的机器恢复后,会抢占低优先级的机器成为MASTER,而不抢占,则允许低优先级的机器继续成为MASTER,即使高优先级的机器已经上线。如果要使用这个功能,则初始化状态必须为BACKUP。
preempt_delay:设置抢占延迟。单位是秒,范围是0---1000,默认是0.发现低优先级的MASTER后多少秒开始抢占。
通知脚本:
notify_master <STRING>|<QUOTED-STRING> [username [groupname]]
notify_backup <STRING>|<QUOTED-STRING> [username [groupname]]
notify_fault <STRING>|<QUOTED-STRING> [username [groupname]]
notify <STRING>|<QUOTED-STRING> [username [groupname]]
# 当停止VRRP时执行的脚本。
notify_stop <STRING>|<QUOTED-STRING> [username [groupname]]
smtp_alert
vrrp_sync_group
作用:将所有相关的VRRP实例定义在一起,作为一个VRRP Group,如果组内的任意一个实例出现问题,都可以实现Failover。vrrp_sync_group VG_1 {group {inside_network # vrrp instance nameoutside_network # vrrp instance name...}...
}
说明:
如果username和groupname没有指定,则以默认的script_user所指定的用户和组。
1. notify_master /path/to_master.sh [username [groupname]]作用:当成为MASTER时,以指定的用户和组执行脚本。
2. notify_backup /path/to_backup.sh [username [groupname]]作用:当成为BACKUP时,以指定的用户和组执行脚本。
3. notify_fault "/path/fault.sh VG_1" [username [groupname]]作用:当该同步组Fault时,以指定的用户和组执行脚本。
4. notify /path/notify.sh [username [groupname]]作用:在任何状态都会以指定的用户和组执行脚本。说明:该脚本会在notify_*脚本后执行。notify可以使用3个参数,如下:$1:可以是GROUP或INTANCE,表明后面是组还是实例。$2:组名或实例名。$3:转换后的目标状态。有:MASTER、BACKUP、FAULT。
5. smtp_alert:当状态发生改变时,发送邮件。
6. global_tracking:所有的VRRP实例共享相同的tracking配置。
注意:脚本文件要加上x权限,同时指令最好写绝对路径。
4.LVS CONFIGURATION
包含配置文件中的virtual_server_group、virtual_server区域,负责lvs集群配置
LVS模块结构:
virtual_server{… ...real_server{… ...}
}
virtual_server
virtual_server IP Port | virtual_server fwmark int | virtual_server group string {delay_loop <INT>:健康检查的时间间隔。lb_argo rr|wrr|lc|wlc|lblc|sh|dh:LVS调度算法。lb_kind NAT|DR|TUN:LVS模式。persistence_timeout 360:持久化超时时间,单位是秒。默认是6分钟。persistence_granularity:持久化连接的颗粒度。protocol TCP|UDP|SCTP:4层协议。ha_suspend:如果virtual server的IP地址没有设置,则不进行后端服务器的健康检查。virtualhost <STRING>:为HTTP_GET和SSL_GET执行要检查的虚拟主机。如virtualhost www.felix.comsorry_server <IPADDR> <PORT>:添加一个备用服务器。当所有的RS都故障时。sorry_server_inhibit:将inhibit_on_failure指令应用于sorry_server指令。alpha:在keepalived启动时,假设所有的RS都是down,以及健康检查是失败的。有助于防止启动时的误报。默认是禁用的。omega:在keepalived终止时,会执行quorum_down指令所定义的脚本。quorum <INT>:默认值1. 所有的存活的服务器的总的最小权重。quorum_up <STRING>:当quorum增长到满足quorum所定义的值时,执行该脚本。quorum_down <STRING>:当quorum减少到不满足quorum所定义的值时,执行该脚本。
}
real_server
real_server IP Port {weight <INT>:给服务器指定权重。默认是1.inhibit_on_failure:当服务器健康检查失败时,将其weight设置为0,而不是从Virtual Server中移除。notify_up <STRING>:当服务器健康检查成功时,执行的脚本。notify_down <STRING>:当服务器健康检查失败时,执行的脚本。uthreshold <INT>:到这台服务器的最大连接数。lthreshold <INT>:到这台服务器的最小连接数。
}
相关文章:
keepalived高可用介绍
keepalived 是 Linux 一个轻量级的高可用解决方案,提供了心跳检测和资源接管、检测集群中的系统服务,在集群节点间转移共享IP 地址的所有者等。 工作原理 keepalived 通过 VRRP(virtual router redundancy protocol)虚拟路由冗余…...
基于大模型的脑梗死全流程诊疗技术方案
目录 《基于大模型的脑梗死全流程诊疗技术方案》一、核心算法实现1. 多模态特征融合算法(术前规划)2. 术中实时预警算法二、系统模块设计1. 术前规划系统流程图2. 术中实时监控系统架构三、技术验证方案1. 模型验证矩阵2. 实验验证设计四、关键技术创新点五、工程实现规范1. …...
ngx_timezone_update
定义在 src\os\unix\ngx_time.c void ngx_timezone_update(void) { #if (NGX_FREEBSD)if (getenv("TZ")) {return;}putenv("TZUTC");tzset();unsetenv("TZ");tzset();#elif (NGX_LINUX)time_t s;struct tm *t;char buf[4];s tim…...
Redis 热key问题怎么解决?
Redis 热 Key 问题分析与解决方案 热 Key(Hot Key)是指被高频访问的某个或多个 Key,导致单个 Redis 节点负载过高,可能引发性能瓶颈甚至服务崩溃。以下是常见原因及解决方案: 1. 热 Key 的常见原因 突发流量:如明星八卦、秒杀商品、热门直播等场景。缓存设计不合理:如全…...
JavaWeb(楠)
JavaWeb21-1:Java Web开发的地位、Tomcat服务器 Java Web开发概述 主流地位:Java可用于移动端、桌面应用、机器学习等多个领域,但在Web开发领域优势显著,是Java最主流的研发方向。市场上95%以上的Web端开发都使用Java,…...
批量将 JSON 转换为 Excel/思维导入等其它格式
json 格式相信对大家来说都不陌生,这是一种轻量级的结构化数据,可以对对象进行描述。json 格式也是一种普通的文本文件格式,用记事本就能够打开编辑 json 格式的文件,可以很方便的转换为其他格式。今天要给大家介绍的就是如何将 j…...
C# Winform 入门(13)之通过WebServer查询天气预报
展示 控件 添加WebServer 右键项目> 添加引用> 添加服务引用 天气预报URL: WeatherWebService Web 服务WeatherWebService Web 服务http://www.webxml.com.cn/WebServices/WeatherWebService.asmx 查询按钮实现 private void btn_Inquiry_Click(object sender, EventA…...
算法思想之滑动窗口(一)
欢迎拜访:雾里看山-CSDN博客 本篇主题:算法思想之滑动窗口(一) 发布时间:2025.4.6 隶属专栏:算法 目录 滑动窗口算法介绍核心思想时间复杂度适用场景注意事项 例题长度最小的子数组题目链接题目描述算法思路代码实现 无重复字符的…...
爬虫工程师无意义的活
30岁的年龄;这个年龄大家都是成年人;都是做父母的年龄了;你再工位上的心态会发生很大变化的; 爬虫工程师基本都是如此;社会最low的一帮连销售都做不了的;单子都开不出来的然后转行做爬虫工程师的;这样的人基本不太和社会接触; 你作为爬虫初级工程师就敲着键盘然后解析着html;…...
DeepSeek 关联公司公布新型数据采集专利 提升数据采集效率与质量
4 月 1 日,国家知识产权局公布了一项由 DeepSeek 关联公司杭州深度求索人工智能基础技术研究有限公司申请的专利,名为 “一种广度数据采集的方法及其系统”,公开号为 CN 119739917 A,申请日期可追溯至 2024 年 12 月。此专利的发布…...
实际犯错以及复盘1
Ds1302 需要两个 一个Set_Rtc 一个Read_Rtc : 本质 read是 85-2i 的 写入是84-2i 然后 写入的时候 是需要对 0x8e 进行 0x00 和0x80进行解开和 锁定的开头结尾。 使用的时候 赋值给ucRtc[i] 然后 主函数使用的时候 需要直接写个(ucRtc) 因为unsigned char* 默认的…...
初探:简道云系统架构及原理
一、系统架构概述 简道云作为一款低代码开发平台,其架构设计以模块化和云端协同为核心,主要分为以下层次: 1. 前端层 可视化界面:基于Web的拖拽式表单设计器,支持动态渲染(React/Vue框架)。多…...
Nginx负载均衡时如何为指定ip配置固定服务器
大家在用Nginx做负载均衡时,一般是采用默认的weight权重指定或默认的平均分配实现后端服务器的路由,还有一种做法是通过ip_hash来自动计算进行后端服务器的路由,但最近遇到一个问题,就是希望大部分用户采用ip_hash自动分配后端服务…...
玩转MCP:用百度热搜采集案例快速上手并接入cline
MCP的大火,让MCP服务器开发也变得热门,上一篇文章: 手搓MCP客户端&服务端:从零到实战极速了解MCP是什么? 手搓了一个极其简单的小场景的MCP实战案例,详细的安装环境及操作步骤已经讲过了,本文不在重复…...
003集——《利用 C# 与 AutoCAD API 开发 WPF 随机圆生成插件》(侧栏菜单+WPF窗体和控件+MVVM)
本案例聚焦于开发一款特色鲜明的 AutoCAD 插件。其核心功能在于,用户在精心设计的 WPF 控件界面中输入期望生成圆的数量,完成输入后,当用户点击 “生成” 按钮,一系列联动操作随即展开。通过数据绑定与命令绑定这一精妙机制&#…...
设计模式简述(十)责任链模式
责任链模式 描述基本使用使用 描述 如果一个请求要经过多个类似或相关处理器的处理。 可以考虑将这些处理器添加到一个链上,让请求逐个经过这些处理器进行处理。 通常,在一个业务场景下会对整个责任链进行初始化,确定这个链上有哪些Handler…...
分组(二分查找)
#include <bits/stdc.h> using namespace std; const int N1e55; int a[N]; int n,k;bool f(int x){int num1;int ma[1];for(int i2;i<n;i){if(a[i]-m>x){ // 当前元素加入当前组会超过极差 xnum; // 新开一组ma[i]; // 新组的最小值设为当前元素}}r…...
vue的主要核心文件介绍
1.package.json 查看依赖包的版本 项目基本信息记录 项目标识:记录项目名称(name 字段)、版本号(version 字段)、描述(description 字段)等基础信息,方便识别和管理项目。例如&…...
从奖励到最优决策:动作价值函数与价值学习
从奖励到最优决策:动作价值函数与价值学习 价值学习动作价值函数对 U t U_t Ut求期望得到动作价值函数动作价值函数的意义最优动作价值函数(Optimal Action-Value Function)如何理解 Q ∗ Q^* Q∗函数 价值学习的基本思想Deep Q-Network(DQN)DQN玩游戏的具体流程如…...
DApp实战篇:先用前端起个项目
前言 本篇将使用vue框架quasar起一个项目,为了防止大家不会使用quasar,本篇详细讲解一下quasar如何使用。 quasar 如果你不想深入了解quasar,其实你完全可以将quasar当成一个vue的组件库即可,它是一个类谷歌Material风格的UI组件库,但同时它又是一个基于vue的强大框架。…...
论文阅读11——V2V-LLM:采用多模式大型语言模型的车对车协同自动驾驶
原文地址: 2502.09980https://arxiv.org/pdf/2502.09980 论文翻译: V2V-LLM: Vehicle-to-Vehicle Cooperative Autonomous Driving with Multi-Modal Large Language Models V2V-LLM:采用多模式大型语言模型的车对车协同自动驾驶 摘要&#…...
NLP 梳理01 — 文本预处理和分词
文章目录 一、说明二、文本预处理概述2.1 为什么要预处理文本?2.2 文本预处理的常见步骤2.3 什么是令牌化?2.4 为什么令牌化很重要? 三、分词类型四、用于分词化的工具和库五、实际实施六、编写函数以对文本进行标记七、结论 一、说明 本文总…...
Windows11 优雅的停止更新、禁止更新
网上有很多关闭自动更新的方法,改注册表、修改组策略编辑器、禁用Windows Update等等,大同小异,但最后奏效的寥寥无几,今天给大家带来另一种关闭win11自动更新的方法,亲测有效! 1、winR 打开运行窗口&…...
Kafka 中的 offset 提交问题
手动提交和自动提交 我们来一次性理清楚:Kafka 中的自动提交 vs 手动提交,到底区别在哪,怎么用,什么场景适合用哪个👇 🧠 一句话总结 ✅ 自动提交:Kafka 每隔一段时间自动提交 offset ✅ 手动…...
PowerBI窗口函数与视觉计算
文章目录 一、 窗口函数1.1 OFFSET(动态查询、求连续值)1.1.1 不使用orderBy1.1.2 使用orderBy1.1.3 统计连续值的最大出现次数(待补) 1.2 INDEX(静态查询)1.3 WINDOW(滚动求和、累计求和、帕累…...
代码随想录算法训练营Day22
回溯知识 力扣77.组合【medium】 一、回溯知识 1、定义 回溯法也可以叫做回溯搜索法,它是一种搜索的方式。回溯是递归的副产品,只要有递归就会有回溯。 2、回溯法的效率 回溯的本质是穷举,穷举所有可能,然后选出我们想要的答案…...
几种常见的HTTP方法之GET和POST
如大家所了解的,每条 HTTP 请求报文都必须包含一个请求方法,这个方法会告诉服务器要执行什么操作(例如获取一个 Web 页面、运行一个网关程序、删除一个文件等)。常见的几种 HTTP 方法如下: GET: 请求指定的…...
Nginx之https重定向为http
为了将Nginx中443端口的请求重定向到80端口,你可以按照以下步骤进行操作: 确认Nginx已经正确安装并运行: 确保Nginx服务已经在你的系统上安装并运行。你可以通过运行以下命令来检查Nginx的状态(具体命令可能因操作系统而异&a…...
落地DevOps文化:运维变革的正确打开方式
落地DevOps文化:运维变革的正确打开方式 DevOps,这个近年来被谈论得沸沸扬扬的概念,是企业数字化转型的一把钥匙。然而,很多公司虽然喊着“要上DevOps”,却苦于如何真正落地。而DevOps不仅仅是技术工具的堆砌,更是一种文化的重塑。从我的经历来看,DevOps实施的核心在于…...
《C++后端开发最全面试题-从入门到Offer》目录
当今科技行业对C++开发者的需求持续高涨,从金融科技到游戏开发,从嵌入式系统到高性能计算,C++凭借其卓越的性能和灵活性始终占据着关键地位。然而,成为一名优秀的C++工程师并非易事,不仅需要扎实的语言基础,还要掌握现代C++特性、设计模式、性能优化技巧以及各种工业级开…...
24统计建模国奖论文写作框架2(机器学习+自然语言处理类)(附原文《高校负面舆情成因与演化路径研究》)
一、引言 研究背景及意义 文献综述 研究内容与创新点 二、高校负面舆情热点现状分析 案例数据的获取与处理 高效负面舆情热点词频分析 高效负面舆情热点变化趋势分析 三、高校负面舆情成因分析 高校负面舆情变量的选取与赋值 基于QCA方法的高校负面舆情成因分析 四、…...
论文阅读笔记——Deformable Radial Kernel Splatting
DRK 论文 DRK(可变形径向核)的核心创新正是通过极坐标参数化与切平面投影,对传统3D高斯泼溅(3D-GS)进行了多维度的优化。 传统 3DGS 依赖径向对称的高斯核,只能表示平滑、各向同性的形状(球体、…...
网络编程—TCP/IP模型(IP协议)
上篇文章: 网络编程—TCP/IP模型(TCP协议)https://blog.csdn.net/sniper_fandc/article/details/147011479?fromshareblogdetail&sharetypeblogdetail&sharerId147011479&sharereferPC&sharesourcesniper_fandc&sharef…...
Android NDK C/C++交叉编译脚本
以下是 Android (arm64-v8a) 交叉编译 C/C 项目的完整脚本模板,基于 NDK 工具链,支持自定义源文件编译为静态库/动态库/可执行文件: 1. 基础交叉编译脚本 (build_android.sh) bash 复制 #!/bin/bash# Android 交叉编译脚本 (arm64-…...
IS-IS-单区域的配置
一、IS-IS的概念 IS-IS(Intermediate System to Intermediate System,中间系统到中间系统)是一种链路状态路由协议,最初设计用于OSI(Open Systems Interconnection)参考模型的网络层(CL…...
Java EE期末总结(第四章)
目录 一、ORM框架 二、MyBatis与Hibernate 1、 概念与设计理念 2、SQL 控制 3、学习成本 4、开发效率 三、MyBatisAPI 1、SqlSessionFactoryBuilder 2、SqlSessionFactory 3、SqlSession 四、MyBatis配置 1、核心依赖与日志依赖 2、建立.XML映射文件 3、建立映射…...
Kafka 的选举机制
Kafka 的选举机制在 Zookeeper 模式 和 KRaft 模式 下有所不同,主要体现在 领导选举 和 集群元数据管理 的方式上。下面详细介绍这两种模式下 Kafka 如何进行选举机制。 1. Zookeeper 模式下的选举机制 在早期的 Kafka 架构中,集群的元数据管理和选举机…...
FreeRTOS移植笔记:让操作系统在你的硬件上跑起来
一、为什么需要移植? FreeRTOS就像一套"操作系统积木",但不同硬件平台(如STM32、ESP32、AVR等)的CPU架构和外设差异大,需要针对目标硬件做适配配置。移植工作就是让FreeRTOS能正确管理你的硬件资源。 二、…...
设计模式简述(十二)策略模式
策略模式 描述基本使用使用传统策略模式的缺陷以及规避方法 枚举策略描述基本使用使用 描述 定义一组策略,并将其封装起来到一个策略上下文中。 由调用者决定应该使用哪种策略,并且可以动态替换 基本使用 定义策略接口 public interface IStrategy {…...
如何在idea中快速搭建一个Spring Boot项目?
文章目录 前言1、创建项目名称2、勾选需要的依赖3、在setting中检查maven4、编写数据源5、开启热启动(热部署)结语 前言 Spring Boot 凭借其便捷的开发特性,极大提升了开发效率,为 Java 开发工作带来诸多便利。许多大伙伴希望快速…...
【注解简化配置的原理是什么】
注解(Annotation)简化配置的核心原理是将原本分散在外部文件(如XML、properties)中的元数据直接内嵌到代码中,通过声明式编程让框架或工具自动处理这些元数据,从而减少手动配置的复杂度。以下是其实现原理的…...
Livox-Mid-70雷达使用------livox_mapping建图
1.ubuntu20.04 和Livox mid 70 的IP设置 连接好Livox-Mid-70雷达,然后进行局域网配置 1.1 Livox mid 70的IP是已知的,即192.168.1.1XX, XX表示mid 70广播码的后两位 1.2 ubuntu 20.04的IP设置 a.查看本机IP名 ifconfig b.设置本机IP地址 sudo ifconfig enx00e04…...
Django中使用不同种类缓存的完整案例
Django中使用不同种类缓存的完整案例 推荐超级课程: 本地离线DeepSeek AI方案部署实战教程【完全版】Docker快速入门到精通Kubernetes入门到大师通关课AWS云服务快速入门实战目录 Django中使用不同种类缓存的完整案例步骤1:设置Django项目步骤2:设置URL路由步骤3:视图级别…...
代码随想录算法训练营Day32| 完全背包问题(二维数组 滚动数组)、LeetCode 518 零钱兑换 II、377 组合总数 IV、爬楼梯(进阶)
理论基础 完全背包问题 在完全背包问题中,每种物品都有无限个,我们可以选择任意个数(包括不选),放入一个容量为 W W W 的背包中。我们希望在不超过容量的情况下,最大化背包内物品的总价值。 完全背包&a…...
Django SaaS案例:构建一个多租户博客应用
Django SaaS案例:构建一个多租户博客应用 推荐超级课程: 本地离线DeepSeek AI方案部署实战教程【完全版】Docker快速入门到精通Kubernetes入门到大师通关课AWS云服务快速入门实战目录 Django SaaS案例:构建一个多租户博客应用如果你正在从事一个SaaS(软件即服务)项目或一…...
静态库与动态库
静态库(Static Library) 定义:静态库(如 .a 文件或 .lib 文件)是编译时直接链接到可执行文件中的库。其代码和数据会被完整复制到最终的可执行文件中。 特点: 独立部署:无需依赖外部库文件。 …...
优选算法的妙思之流:分治——归并专题
专栏:算法的魔法世界 个人主页:手握风云 目录 一、归并排序 二、例题讲解 2.1. 排序数组 2.2. 交易逆序对的总数 2.3. 计算右侧小于当前元素的个数 2.4. 翻转对 一、归并排序 归并排序也是采用了分治的思想,将数组划分为多个长度为1的子…...
PDFBox渲染生成pdf文档
使用PDFBox可以渲染生成pdf文档,并且自定义程度高,只是比较麻烦,pdf的内容位置都需要手动设置x(横向)和y(纵向)绝对位置,但是每个企业的单据都是不一样的,一般来说都会设…...
flutter dio网络请求与json数据解析
在Flutter中,Dio 是一个功能强大且易于使用的网络请求库,用于处理HTTP请求和响应。与 http 包相比,Dio 提供了更多高级功能,例如拦截器、文件上传/下载、请求取消等。结合 json_serializable 或手动解析 JSON 数据,可以…...
7. RabbitMQ 消息队列——延时队列(Spring Boot + 安装message_exchange“延迟插件“ 的详细配置说明)的详细讲解
7. RabbitMQ 消息队列——延时队列(Spring Boot 安装message_exchange"延迟插件" 的详细配置说明)的详细讲解 文章目录 7. RabbitMQ 消息队列——延时队列(Spring Boot 安装message_exchange"延迟插件" 的详细配置说明)的详细讲解1. RabbitMQ 延时队列概…...