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

LVS负载均衡群集与Keepalived高可用

一文读懂LVS负载均衡群集与Keepalived高可用架构

  • 前言
  • 一、LVS DR模式工作原理
      • 1.1 数据包流向分析
      • 1.2 DR模式特点
  • 二、DR模式部署步骤
      • 2.0 环境规划
        • 2.0.1 服务器规划
      • 2.1 配置负载调度器(Director Server)
        • (1) 系统配置
        • (2) 配置虚拟IP
        • (3) 调整内核参数
        • (4) 配置 LVS 服务及调度
      • 2.2 配置节点服务器(Real Server)
        • (1) 配置 VIP 到 `lo` 接口
        • (2) ARP 参数调整,避免MAC冲突
        • (3) 安装 Web 服务
      • 2.3 测试 LVS 群集
    • 三、LVS 面试知识点整理
      • 3.1 LVS三种工作模式
      • 3.2 LVS调度算法
      • 3.3 Nginx vs LVS vs HAProxy 区别
    • 四、LVS+Keepalived群集
      • 1、概念与原理
        • 1.1 Keepalived
        • 1.2 VRRP 工作原理
        • 1.3 Keepalived 主要模块
      • 2、脑裂问题与防护
        • 2.1 脑裂(Split Brain)
        • 2.2 脑裂原因
        • 2.3 防护策略
      • 3、部署步骤
        • 3.1 环境准备
        • 3.2 安装与配置 LVS + Keepalived
          • 3.2.1 DR 服务器操作
          • 3.2.2 配置 Keepalived
          • VIP 配置
          • 重启网络服务
          • 启动服务
          • 内核参数优化
        • 3.3 配置 Web 节点
        • 3.4 测试
        • 3.5 小结与注意事项
    • 结语

前言

  在当今的互联网时代,随着业务的快速发展,用户访问量呈现爆炸式增长。为了应对这种高并发的访问需求,确保网站或应用的稳定性、可靠性和高性能,负载均衡技术应运而生。负载均衡(Load Balancing)是一种将网络流量或计算任务分配到多个服务器上的技术,旨在优化资源利用、最大化吞吐量、最小化响应时间,并避免任何单一资源的过载。
  在众多负载均衡解决方案中,LVS(Linux Virtual Server)和Keepalived凭借其高性能、高可用性和灵活性,成为了企业级应用中的热门选择。本文将深入探讨LVS的DR(Direct Routing)模式工作原理、部署步骤,以及LVS与Keepalived结合使用的群集架构,帮助读者全面理解和掌握这些关键技术。

一、LVS DR模式工作原理

1.1 数据包流向分析

  LVS的DR(Direct Routing)模式,即直接路由模式,是一种高效的四层负载均衡解决方案。其工作流程如下:

  1. 客户端 → Director(负载均衡器):客户端发送请求到VIP(虚拟IP),数据包首先到达Director Server的内核空间。
  2. Director → Real Server(真实服务器):Director判断数据包的目标IP为VIP,识别为集群服务请求。随后,Director修改数据包的目标MAC地址为Real Server的MAC地址,源MAC地址为Director Server的MAC地址,而IP地址保持不变。修改后的数据包被发送到Real Server。
  3. Real Server 处理请求:Real Server接收到目标MAC地址为自己的报文,通过lo接口配置的VIP来处理请求。处理完成后,响应报文的源IP为VIP,目标IP为客户端(CIP),并直接发送给客户端,绕过Director Server。
  4. 客户端接收响应:客户端直接从Real Server接收响应,无需经过Director Server,从而提高了响应速度和系统整体性能。

1.2 DR模式特点

  • 同一物理网络:Director Server与Real Server必须位于同一物理网络内,以确保MAC地址的有效传递。
  • IP地址灵活性:Real Server可以使用私有或公网地址,根据实际需求进行配置。
  • Director角色:Director仅作为请求的入口,不承担网关的角色,减轻了其负担。
  • 直接响应:所有请求经过Director进行负载均衡,但响应直接由Real Server发送给客户端,提升了效率。
  • 网关限制:Real Server的网关不能指向Director Server,以避免不必要的流量经过Director。
  • VIP配置:Real Server的lo接口需要配置VIP,以便正确处理目标为VIP的请求。

二、DR模式部署步骤

2.0 环境规划

2.0.1 服务器规划
  • DR 服务器(负载均衡器):192.168.10.10
  • Web 服务器1(Real Server):192.168.10.50
  • Web 服务器2(Real Server):192.168.10.40
  • VIP(虚拟IP):192.168.10.220

2.1 配置负载调度器(Director Server)

(1) 系统配置

首先,确保系统防火墙和SELinux处于关闭状态,并加载必要的模块与安装相关软件包:

systemctl stop firewalld.service 
systemctl stop iptables.service
setenforce 0 
modprobe ip_vs 
yum -y install ipvsadm 
(2) 配置虚拟IP

为Director Server配置VIP,通过创建虚拟网卡ens33:0实现:

cd /etc/sysconfig/network-scripts/
cp ifcfg-ens33 ifcfg-ens33:0
vim ifcfg-ens33:0
# 内容
DEVICE=ens33:0
ONBOOT=yes
IPADDR=192.168.10.220
NETMASK=255.255.255.255ifup ens33:0   # 开启网卡
ifconfig ens33:0    # 查看网卡

在这里插入图片描述

(3) 调整内核参数

优化内核参数,确保数据包的正确处理:

vim /etc/sysctl.conf
# 添加
net.ipv4.ip_forward = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0
sysctl -p

在这里插入图片描述

(4) 配置 LVS 服务及调度

使用ipvsadm工具配置LVS服务,设置调度算法为轮询(rr),并添加Real Servers:

# 如果有报错文件不存在,需先添加规则再保存
ipvsadm-save > /etc/sysconfig/ipvsadm      # 保存导出
ipvsadm-restore < /etc/sysconfig/ipvsadm   # 恢复  systemctl start ipvsadm
ipvsadm -C
ipvsadm -A -t 192.168.10.220:80 -s rr
ipvsadm -a -t 192.168.10.220:80 -r 192.168.10.40:80 -g
ipvsadm -a -t 192.168.10.220:80 -r 192.168.10.50:80 -g
ipvsadm -ln  # 查看节点状态,Route代表DR模式

在这里插入图片描述

2.2 配置节点服务器(Real Server)

(1) 配置 VIP 到 lo 接口

为每个Real Server配置VIP到lo接口,确保其能正确处理目标为VIP的请求:

cd /etc/sysconfig/network-scripts/
cp ifcfg-lo ifcfg-lo:0
vim ifcfg-lo:0
# 内容
DEVICE=lo:0
ONBOOT=yes
IPADDR=192.168.10.220
NETMASK=255.255.255.255ifup lo:0
ifconfig lo:0
route add -host 192.168.10.220 dev lo:0

在这里插入图片描述
在这里插入图片描述

(2) ARP 参数调整,避免MAC冲突

调整ARP参数,防止VIP的MAC地址冲突:

vim /etc/sysctl.conf
# 添加
net.ipv4.conf.lo.arp_ignore = 1     # 禁锢路由
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
sysctl -p

在这里插入图片描述

(3) 安装 Web 服务

根据需求选择合适的Web服务器软件,以下为三种常见安装方式:

  1. 编译安装Nginx(适用于安装量较少的情况)
  2. 使用Yum安装Nginx(需epel-release源)
  3. 使用Yum安装Apache(httpd)

以简单的echo方式在Web根目录下创建测试页面:

  • 192.168.10.40
    echo 'this is 192.168.10.40 web01!' > /var/www/html/index.html
    
  • 192.168.10.50
    echo 'this is 192.168.10.50 web02!' > /var/www/html/index.html
    

2.3 测试 LVS 群集

在客户端浏览器访问VIP地址:http://192.168.10.220/,应能轮询显示不同节点(Web服务器1和Web服务器2)的页面内容。

注意:LVS-DR模式下,用户访问http://192.168.10.220/后,下次刷新时可能会有约50秒的延迟,这是由于ARP缓存的原因。
在这里插入图片描述
在这里插入图片描述

三、LVS 面试知识点整理

3.1 LVS三种工作模式

模式原理优缺点
NAT(VS/NAT)Director 改变数据包目标IP并转发,RS响应包回到Director再发客户端优点:节点可任意OS;缺点:Director是瓶颈
DR(VS/DR)Director 改变目标MAC地址,RS直接响应客户端优点:Director不处理响应;缺点:节点需与Director同网段
TUN(VS/TUN)Director 封装IP包到隧道,RS解封直接响应客户端优点:Director不处理响应;缺点:节点需支持IP隧道

3.2 LVS调度算法

LVS支持多种调度算法,主要分为固定调度动态调度两类:

  • 固定调度

    • rr(Round Robin):轮询,每个RS均摊请求。
    • wrr(Weighted Round Robin):加权轮询,权重高的RS分配更多的请求。
    • dh(Destination Hashing):目的地址哈希分配。
    • sh(Source Hashing):源地址哈希分配。
  • 动态调度

    • lc(Least Connections):最少连接数。
    • wlc(Weighted Least Connections):加权最少连接。
    • lblc(Locality-Based Least Connections):基于地址的最少连接。

3.3 Nginx vs LVS vs HAProxy 区别

特性NginxLVS (Linux Virtual Server)HAProxy
定位Web 服务器 + 反向代理 + 负载均衡内核级四层负载均衡专业负载均衡器(四层+七层)
工作层级四层(TCP)+ 七层(HTTP/HTTPS)四层(TCP/UDP,传输层)四层 + 七层
性能高(软件级,单机可达十万级并发)极高(内核态,百万级并发)高(接近 Nginx,但更专注负载均衡)
功能特点- 静态资源服务
- 反向代理
- 缓存
- 支持 HTTP/HTTPS 负载均衡
- 高性能转发
- 调度算法丰富(RR、LC、SH…)
- 内核态转发,几乎无性能损耗
- 专注于负载均衡
- 健康检查更强大
- 支持会话保持、SSL 卸载等
健康检查简单(TCP/HTTP)依赖 Keepalived 或其他工具强大(多协议、多方式)
配置复杂度简单较复杂(需 ipvsadm/keepalived 配合)中等(配置文件灵活)
适用场景Web 代理、动静分离、中小型集群超大规模集群、核心四层调度高可用集群、对健康检查要求高的业务
优缺点优点:功能多,易上手
缺点:七层性能不如 LVS/HAProxy
优点:性能最强,稳定
缺点:只能四层,配置偏复杂
优点:专业负载均衡,健康检查强
缺点:不自带 Web 服务

一句话总结:

  • Nginx:轻量、全能,适合 Web 服务和中小型负载均衡。
  • LVS:极致性能,适合四层超大规模集群,但功能单一。
  • HAProxy:专业负载均衡器,四层+七层都行,健康检查能力最强。

四、LVS+Keepalived群集

1、概念与原理

1.1 Keepalived

Keepalived是一个基于**VRRP(Virtual Router Redundancy Protocol)**协议实现高可用性(HA)的软件。其初衷是为LVS负载均衡提供高可用方案,但随着发展,Keepalived也支持其他服务(如Nginx、MySQL等)的高可用性。

主要功能包括:

  1. LVS 集群管理:管理和配置LVS负载均衡集群。
  2. 节点健康检查(Health Check):通过配置Keepalived的keepalived.conf文件,实现对LVS节点IP和相关参数的管理,自动检测并移除故障节点,同时在节点恢复后重新加入集群,确保用户访问不受影响。
  3. 故障自动切换(Failover):实现两台主机(如Master和Backup)之间的故障转移和自动切换,确保服务的持续可用性。当Master主机失效时,Backup主机自动接管其所有工作,包括VIP资源及相关服务;当Master恢复后,可根据配置自动或手动接管回原工作。
  4. 高可用 VIP(虚拟 IP)接管:通过VRRP协议,实现VIP在Master和Backup之间的自动切换与接管,保证服务的连续性。
1.2 VRRP 工作原理

VRRP(Virtual Router Redundancy Protocol)是一种用于实现默认网关冗余的协议,其工作原理如下:

  • MASTER 节点:定期发送心跳(通告)给BACKUP节点,表明其存活状态。
  • BACKUP 节点:若在一定时间内未收到MASTER节点的心跳,则认为MASTER失效,进而接管VIP,成为新的MASTER。
  • MASTER 恢复:当原MASTER节点恢复正常时,可以根据配置选择是否重新接管VIP(抢占模式)或保持BACKUP状态(非抢占模式)。
  • 默认多播地址:224.0.0.18
  • 优先级决定 MASTER 节点:优先级数值越大,越有可能成为MASTER节点。
1.3 Keepalived 主要模块
模块功能
core核心进程、配置文件加载解析
vrrpVRRP 协议实现,高可用
check健康检查,支持 TCP/HTTP/脚本检查

2、脑裂问题与防护

2.1 脑裂(Split Brain)

脑裂是指在高可用(HA)系统中,两个节点(如Master和Backup)由于失去心跳连接,均认为对方已失效,进而各自独立运行,导致系统分裂为两个独立的个体。这种情况可能引发以下后果:

  • 共享资源冲突:两个节点同时尝试控制共享资源,导致资源争夺。
  • 数据损坏:如数据库等共享存储被同时读写,导致数据不一致或损坏。

形象比喻:如同“裂脑人”一样,两个节点争抢“共享资源”和“应用服务”,可能导致严重后果,如共享资源被瓜分、服务无法正常运行,或同时读写共享存储导致数据损坏。

2.2 脑裂原因
  1. 心跳线故障:心跳线(如专用网络线)断开、老化或损坏,导致节点间无法正常通信。
  2. 网卡/驱动故障:网卡硬件或驱动程序出现问题,导致IP配置冲突或通信异常。
  3. 心跳网络设备故障:连接心跳线的设备(如交换机、网卡)出现故障。
  4. 仲裁机器异常:用于仲裁的第三方设备或服务出现问题,无法正确判断节点状态。
  5. 防火墙阻挡 VRRP:节点上开启的防火墙(如iptables)阻止了VRRP心跳消息的传输。
  6. 配置不一致:同一VRRP实例的配置参数(如virtual_router_id、优先级、实例名)在Master和Backup节点上不一致。
  7. vrrp实例名字不一致、优先级一致:VRRP实例名称或优先级配置错误,导致选举异常。
2.3 防护策略

为防止脑裂的发生,可以采取以下防护措施:

  • 双心跳线冗余:配置多条心跳线,采用双线或多线冗余,减少心跳线单点故障的可能性,降低脑裂发生的概率。
  • 磁盘锁(锁定共享资源):由当前服务节点锁定共享磁盘资源,防止脑裂时对方节点抢占资源。然而,若占用资源的一方未主动解锁,后备节点将无法接管资源。为此,可设计“智能”锁机制,如仅在检测到所有心跳线断开时启用磁盘锁,避免误操作。
  • 仲裁机制(Ping 参考 IP):设置一个参考IP(如网关IP),当心跳线完全断开时,两个节点分别Ping参考IP。若某一节点无法Ping通参考IP,则认为本端网络链路故障,主动放弃竞争,让能够Ping通参考IP的一端继续提供服务。更为保险的做法是,Ping不通参考IP的一方自动重启,释放可能占用的共享资源。
  • 脚本监控报警:通过自定义脚本实时监控节点状态与网络连接,发现异常时及时报警,便于管理员快速响应与处理。

3、部署步骤

3.1 环境准备
  • 主 DR(MASTER):192.168.10.10
  • 备 DR(BACKUP):192.168.10.30
  • VIP:192.168.10.220
  • Web 节点
    • 192.168.10.40
    • 192.168.10.50
  • 客户端:192.168.10.1
3.2 安装与配置 LVS + Keepalived
3.2.1 DR 服务器操作

在主DR(192.168.10.10)和备DR(192.168.10.30)上执行以下操作:

systemctl stop firewalld
setenforce 0
yum -y install ipvsadm keepalived
modprobe ip_vs
cat /proc/net/ip_vs  # 检查模块是否加载成功
3.2.2 配置 Keepalived

编辑Keepalived的配置文件/etc/keepalived/keepalived.conf,以下为关键配置示例:

global_defs {router_id LVS_01        # MASTER 为 LVS_01,BACKUP 为 LVS_02smtp_server 127.0.0.1
}vrrp_instance VI_1 {state MASTER            # BACKUP 节点写 BACKUPinterface ens33virtual_router_id 10priority 100            # MASTER 高于 BACKUPadvert_int 1authentication {auth_type PASSauth_pass abc123}virtual_ipaddress {192.168.10.220}
}virtual_server 192.168.10.220 80 {delay_loop 6lb_algo rrlb_kind DRpersistence_timeout 50protocol TCPreal_server 192.168.10.40 80 {weight 1TCP_CHECK {connect_port 80connect_timeout 3nb_get_retry 3delay_before_retry 3}}real_server 192.168.10.50 80 {weight 1TCP_CHECK {connect_port 80connect_timeout 3nb_get_retry 3delay_before_retry 3}}
}

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
配置说明:

  • global_defs:定义全局参数,如router_id,MASTER和BACKUP节点应设置为不同的值(如LVS_01和LVS_02)。
  • vrrp_instance VI_1:定义VRRP实例,设置节点角色(MASTER或BACKUP)、监听接口、虚拟路由ID、优先级、认证信息和虚拟IP地址。
  • virtual_server:定义虚拟服务器,设置负载均衡算法(如rr)、调度类型(如DR)、持久化超时时间、协议类型(如TCP)及后端真实服务器(Real Servers)的健康检查配置。
VIP 配置

在主DR上配置VIP的虚拟网卡ens33:0

vim /etc/sysconfig/network-scripts/ifcfg-ens33:0
# 内容
DEVICE=ens33:0
ONBOOT=yes
IPADDR=192.168.10.220
NETMASK=255.255.255.255
ifup ens33:0   # 开启网卡
# ifconfig ens33:0    # 查看网卡配置
重启网络服务

确保VIP配置生效:

systemctl restart network
ifup ens33:0
启动服务

启动Keepalived和ipvsadm服务,并查看VIP及LVS配置:

systemctl start keepalived
ip addr  # 查看 VIP 是否生效
ipvsadm-save > /etc/sysconfig/ipvsadm
systemctl start ipvsadm
ipvsadm -ln  # 查看 LVS 配置
内核参数优化

优化内核参数,确保数据包的正确处理:

vim /etc/sysctl.conf
# 添加
net.ipv4.ip_forward = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0
sysctl -p
3.3 配置 Web 节点

在每个Web节点(192.168.10.40和192.168.10.50)上执行以下配置:

systemctl stop firewalld
setenforce 0
yum -y install httpd
systemctl start httpd
# 创建测试页面
echo 'this is kgc web!' > /var/www/html/index.html  # 192.168.10.40
echo 'this is benet web!' > /var/www/html/index.html  # 192.168.10.50
# 配置 VIP 到 lo:0
vim /etc/sysconfig/network-scripts/ifcfg-lo:0
# 内容
DEVICE=lo:0
ONBOOT=yes
IPADDR=192.168.10.220
NETMASK=255.255.255.255
service network restart
ifup lo:0
route add -host 192.168.10.220 dev lo:0
# 调整 ARP 参数
vim /etc/sysctl.conf
# 添加
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
sysctl -p

配置说明:

  • 安装并启动Web服务:使用Apache(httpd)作为Web服务器,创建简单的测试页面。
  • 配置VIP到lo:0:为每个Web节点配置VIP到lo接口的别名lo:0,并设置相应的路由,确保目标为VIP的请求被正确处理。
  • 调整ARP参数:防止VIP的MAC地址冲突,确保只有当前处理请求的节点响应VIP的ARP请求。
3.4 测试
  1. 客户端访问 VIP

    在客户端浏览器访问VIP地址:http://192.168.10.220/,应能轮询显示不同Web节点(192.168.10.40和192.168.10.50)的测试页面内容。

  2. 模拟故障切换

    • 停止 MASTER Keepalived

  在主DR(192.168.10.10)上停止Keepalived服务,观察BACKUP节点(192.168.10.30)是否成功接管VIP。

systemctl stop keepalived

在这里插入图片描述
在这里插入图片描述

  • 观察 BACKUP 节点

  确认BACKUP节点是否成功接管VIP,并继续提供服务。

  • 恢复 MASTER

  重新启动主DR上的Keepalived服务,观察VIP是否根据配置的抢占模式(默认是抢占)回归到MASTER节点,或保持在BACKUP节点(如果配置为非抢占模式)。

     systemctl start keepalived
 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/94ce053e24fc4fa19eaa4a2d33328011.png)

在这里插入图片描述

3.5 小结与注意事项
项目注意点
VIP配置DR节点配置VIP的虚拟网卡(如ens33:0),Web节点配置VIP的lo:0接口。
抢占模式默认情况下,MASTER节点恢复后会抢回VIP。如果希望MASTER恢复后不自动抢回VIP,可以在配置中设置nopreempt参数,启用非抢占模式。
健康检查Keepalived支持TCP/HTTP等健康检查方式,能够自动检测并移除故障节点,确保流量只被调度到健康的Real Servers。
防火墙确保Firewalld等防火墙服务关闭或正确配置,允许VRRP心跳消息的传输,通常需要允许多播地址224.0.0.18的通信。
脑裂防护为防止脑裂的发生,建议采取双心跳线冗余、磁盘锁、仲裁机制及脚本监控等防护策略,确保高可用系统的稳定与可靠。

结语

  通过本文的详细介绍,相信您对LVS的DR模式工作原理、部署步骤以及LVS与Keepalived结合实现高可用负载均衡群集有了全面的了解。LVS作为一款高性能的四层负载均衡解决方案,结合Keepalived的强大高可用性管理功能,能够为企业级应用提供稳定、高效的服务保障。
  在实际部署过程中,需根据具体业务需求与网络环境,合理配置各个组件,确保系统的可靠性与性能。此外,持续监控与优化也是保障系统


文章转载自:

http://Fm2ODgT4.fssjw.cn
http://eREoZkSW.fssjw.cn
http://LeclKs7L.fssjw.cn
http://siRHR7ge.fssjw.cn
http://n10ILlWv.fssjw.cn
http://oLfuKK7N.fssjw.cn
http://raDFex0G.fssjw.cn
http://HkyHk0Ad.fssjw.cn
http://BeZjiTp1.fssjw.cn
http://cifXpub1.fssjw.cn
http://s7X696Jy.fssjw.cn
http://zkvvNaKQ.fssjw.cn
http://nG4ZL0jf.fssjw.cn
http://d2CB29PS.fssjw.cn
http://sGhLcrI8.fssjw.cn
http://8HeOuMyn.fssjw.cn
http://8T90rXjw.fssjw.cn
http://wFcoqdXg.fssjw.cn
http://gIhocdFl.fssjw.cn
http://SRS2pEhf.fssjw.cn
http://EHGeLp1T.fssjw.cn
http://3NixuHNc.fssjw.cn
http://BykEFg6m.fssjw.cn
http://Ie4yL357.fssjw.cn
http://RR6KGQAW.fssjw.cn
http://gd1ZXunI.fssjw.cn
http://iMhqnVI2.fssjw.cn
http://J1ndAATh.fssjw.cn
http://P1NA1yYK.fssjw.cn
http://2oRvJMgh.fssjw.cn
http://www.dtcms.com/a/379095.html

相关文章:

  • React中hook的用法及例子(持续更新)
  • 【网络编程】TCP、UDP、KCP、QUIC 全面解析
  • 【1】占位符
  • A2A 中的内存共享方法
  • 力扣704. 二分查找
  • HttpServletRequest vs ServletContext 全面解析
  • 介绍keepalived和LVS
  • NAT技术:SNAT与DNAT区别详解
  • 设计模式-单例桥接命令职责链
  • 数据分析:合并
  • bug:uniCloud报Business Failed, 参数有误retry invoke error
  • 人工智能学习:Transformer结构中的子层连接(Sublayer Connection)
  • 阿里FunASR语音转文字模型搭建
  • Android8 binder源码学习分析笔记(三)
  • sizeof 和 strlen
  • 2025年度4款录音转文字工具横向对比
  • 教资科三【信息技术】— 学科知识(简答题)精简背诵版
  • 滚动列表展示跟随弹框效果
  • readelf 和 ldd 查看文件的依赖
  • 基于社交媒体数据的公众情绪指数构建与重大事件影响分析
  • Cosign 实战:构建可信容器镜像的签名与验证体系
  • 定时器实战:LED闪烁与呼吸灯调试
  • docker部署Gitlab社区版,步骤以及外网访问出现502的解决方式
  • FairGuard aab包签名工具
  • 企业文件图纸全自动加密怎么设置?三步实现自动防护!
  • Redis C++ 实现笔记(I篇)
  • [css] 实现禁止文本被选中
  • MATLAB中进行视觉检测入门教程
  • 人工智能深度学习——多层感知器(人工神经网络)
  • 2025最新超详细FreeRTOS入门教程:第十二章 FreeRTOS调度器与时间片管理