LVS原理及部署

文章目录

一、LVS原理

1.LVS简介

LVS 全称 Linux Virtual Server ,是 Linux 内核层实现的高性能、高可用的负载均衡集群技术,由章文嵩博士开发,目前是 Linux 内核的标准模块之一。它的核心作用是将前端的请求流量分发到后端多台真实服务器(Real Server)上,从而提升服务的并发处理能力和可用性。

LVS 官网:http://www.linuxvirtualserver.org/

2.集群和分布式

集群cluster):是为了解决某个特定的问题将多台计算机组合起来形成的单个系统,同一个业务系统,部署在多台服务器上,每一台服务器实现的功能没有差别,数据和代码是一样的

集群常见的三种类型:

  • LB:LoadBalancing负载均衡,由多台主机组成,每个主机只承担访问的一部分
  • HA:HighAvailiablity高可用
  • HPC:高性能计算

分布式 :一个业务拆分成多个子业务,或不同的任务部署在多台服务器上。每一台服务器实现的工能是有差别的,数据和代码不一样,分布式每一台服务器加起来,才是完成的业务。分布式的每一个节点都完成不同的业务,如果一个几点下线,整个业务可能会失败

分布式是缩短单个任务的执行时间来提升效率,而集群是提高单位时间的执行任务数量来提升效率

3.LVS集群结构

在大型网站中,访问用户多,通过在前面部署负载均衡服务器,后面服务器完成同一业务。当用户访问时,负载均衡服务器根据后端服务器的负载情况,决定由哪一台服务器响应。当后端服务器宕机时,其他服务器可以顶上,确保业务顺利。

工作原理:调度器根据调度算法并依据请求报文的目标ip和目标协议及端口将其转发至某一RS。

3.LVS相关术语

  • VS:Virtual Server 调度器
  • RS:Real Server 真实业务主机
  • CIP:client ip 客户端主机
  • VIP:Vitual Server ip VS外网的ip,客户端能够访问到的ip
  • DIP:director ip VS内网的ip,vs访问内网的ip
  • RIP:Real Server ip 真实业务主机

二、 LVS负载均衡四种工作模式

1.nat模式

修改请求报文的目标ip

数据逻辑:
  1. 当客户端访问服务器时,客户端发送请求数据包(源ip,目标ip:VIP,端口:80)
  2. VS收到后做dnat将报文中的源ip换成vs的dip,目标ipDip换成Rip,端口:9000
  3. RS收到后,做出响应后,发送响应包给VS(源地址:RIP1,目标CIP,端口9000)
  4. VS收到响应包后,改变包中的数据(源I地址RIP-->VIP),端口(9000-->80),然后将响应的数据包发送给客户端

在nat模式中接收和返回客户端的数据包都要经过lvs调度器,因此调度器容易阻塞


客户端请求在到达vip后进入PREROUTING链,当未配置ipvs时直接进入INPUT链,当配置了ipvs后,请求通过PREROUTING链后被ipvs截胡并做nat转发

2.DR模式

DR:直接路由,LVS默认模式,原理是改写请求报文的mac进行转发,源mac是Dip所在接口的mac,目标mac是挑选的RIP所在接口的mac,源目ip均未改变。
在DR模式中,RS收到访问请求后不需要传回给vs,直接把数据发送给client,所以rs和vs上都要有vip

DR模式数据传输过程分析
  1. 客户端发送数据帧给vs调度器的内容为(源ip:cip,目的ip:vip+客户端man,vs调度器mac)
  2. VS调度器收到后,ipvs捕获后将源mac:client-mac-->DIP-mac,目的mac:vip-mac-->rip-mac,数据帧中的源目ip均未改变。
  3. 当数据帧到达RS后,RS发现目的ip是VS的vip,因此RS必须要也要有一个相同的vip。VS,RS有相同的vip,如不做措施的话会导致地址冲突,可以在各RS修改内核参数,来限制arp响应和通告的级别
    RS得到2中的数据包做出响应回传数据包,数据包中的内容为VIP+RS1的MAC+客户端IP+客户端IP的MAC

在RS上修改内核参数以限制arp通告及应答级别

bash 复制代码
/proc/sys/net/ipv4/conf/all/arp_ignore
/proc/sys/net/ipv4/conf/all/arp_announce

3.Tun模式(了解)

不修改请求报文的ip(源:CIP,目:VIP),而是在原来的ip报文之外在封装一个ip首部(源i:DIP,目:RIP),挑选出的RS,RS直接响应给客户端(源:vip,目:cip)


tun模式数据传输过程分析:

1.客户端发送请求数据包,包内有源IP+vip+dport

2.到达vs调度器后对客户端发送过来的数据包重新封装添加IP报文头,新添加的IP报文头中包含TUNSRCIP(DIP)+TUNDESTIP(RSIP1)并发送到RS1

3.RS收到VS调度器发送过来的数据包做出响应,生成的响应报文中包含SRCIP(VIP)+DSTIP(CIP)+port,响应数据包通过网络直接回传给client

4.fullnat模式(了解)

fullnat:通过同时修改请求报文的源IP地址和目标IP地址进行转发

CIP --> DIP ,VIP --> RIP

1.VIP是公网地址,RIP和DIP是私网地址,且通常不在同一IP网络;因此,RIP的网关一般不会指向DIP

2.RS收到的请求报文源地址是DIP,因此,只需响应给DIP;但Director还要将其发往Client

3.请求和响应报文都经由Director

4.支持端口映射

LVS工作模式总结

1.nait与fullnat:请求报文和响应报文都要经过调度器

2.nat:RIP的网关指向DIP

3.fullnat:RIP和DIP未必在同一IP网络,但要能通信

4.dr与tun:请求报文经过Director,但响应报文直接发往Client

  1. dr:通过封装新的MAC首部实现,通过MAC网络转发

  2. tun:通过在原IP报文外封装新IP头实现转发,支持远距离通信

三、LVS调度算法

调度器根据在调度时是否考虑RS当前的负载情况分为静态算法和动态算法

静态算法:

仅仅依据算法本身进行调度,不考虑RS负载情况

  1. RR:轮询算法,将外部请求按顺序依次轮流分配给集群中的每台服务器。不考虑服务器当前的连接数量和响应速度。适合服务器硬件性能完全一致,每个请求处理时间相差不多的场景
  2. WRR:加权轮询,在轮询的基础上,为每台服务器分配一个权重,权重高的服务器被轮询的次数更多。考虑了服务器处理能力的差异。适合服务器性能不均的集群。
  3. DH:目标地址哈希,根据请求的目标IP地址通过哈希函数计算出一个哈希值,将哈希值与服务器列表的大小进行取模运算,得到应该处理请求的服务器。能够实现会话保持,同一个目标的ip的请求总是被定向到同一台服务器。
  4. SH:源地址哈希,与目标地址哈希类似,它是根据请求的源ip地址进行哈希计算。能够实现基于客户端的会话保持,同一个的客户端的请求总是被定向到同一台服务器。

动态算法

:根据RS当前的负载情况以及调度算法进行调度,overhead负载值小的优先调度

1.LC :最少连接,将请求分配给当前活动连接数最少的服务器,动态均衡。适合请求处理时间长短不一,地址服务器负载差异较大的场景。

overload=activeconns(活动连接数)x256+inactiveconns(非活动链接数)

2。WLC:加权最少连接,lvs的默认算法,在最少连接的基础上加入了权重,它会计算每台服务器的负载值,将请求分配给改值最小的服务器

Overhead=(activeconns+1+inactiveconns) x 256/weight

3.LBLC:动态的DH算法,使用场景:根据负载状态实现正向代理。

4.LBLCR:LBLC with Replication,带复制功能的LBLC,解决LBLC负载不均衡问题,从负载重的复制到负载轻的RS

新增算法

FO:(Weighted Fai Over)常用作灰度发布在此FO算法中,遍历虚拟服务所关联的真实服务器链表,找到还未过载没IP_VS_DEST_F OVERLOAD标志的且权重最高的真实服务器,进行调度 当服务器承接大量链接,我们可以对此服务(IP_VS_DEST_FOVERLOAD)标记,那么vs调度器就不会把链接调度到有过载标记的主机中。
OVF (Overflow-connection)调度算法基于真实服务器的活动连接数量和权重值实现。将新连接调度到权重值最高的真实服务器,直到其活动连接数量超过权重值,之后调度到下一个权重值最高的真实服务器,在此OVF算法中,遍历虚拟服务相关联的真实服务器链表,找到权重值最高的可用真实服务器。一个可用的真实服务器需要同时满足以下条件:

未过载(未设置IP_VS_DEST_F OVERLOAD标志)

真实服务器当前的活动连接数量小于其权重值

其权重值不为零

四、LVS部署命令

1.lvs相关配置文件

  • 程序包:ipvsadm
  • 主程序:/usr/sbin/ipvsadm
  • 规则保存工具:/usr/sbin/ipvsadm-save
  • 规则重载工具:/usr/sbin/ipvsadm-restore
  • 配置文件:/etc/sysconfig/ipvsadm-config
  • ipvs调度规则文件:/etc/sysconfig/ipvsadm

2.lvs相关命令

核心功能:增、删、改、查看

命令参数:

管理集群服务

bash 复制代码
#调度器配置
ipvsadm -A|E -t(tcp)|u(udp)|f(防护墙标签) \
service-address(集群地址) \
[-s scheduler(调度算法)] \
[-p [timeout]] \
[-M netmask] \


ipvsadm -D -t|u|f service-address 删除
ipvsadm --C 清空
ipvsadm --R 重载
ipvsadm -S [-n] 保存

ipvsadm -Ln 查看

#集群中的真实Server
ipvsadm -a|e -t|u|f service-address -r server-address [-g | -i| -m](工作模式) [-w weight](权重)
ipvsadm -d -t|u|f service-address -r server-address	删除RS

lvs集群中的增删改命令参数分析

bash 复制代码
ipvsadm -A|E -t|u|f service-address [-s scheduler] [-p [timeout]]

-A #添加

-E #修改

-t #tcp服务

-u #udp服务

-s #指定调度算法,默认为WLC

-p #设置持久连接超时,持久连接可以理解为在同一个时间段同一个来源的请求调度到同一Realserver

-f #firewall mask 火墙标记,是一个数字

bash 复制代码
#增加
[root@lvs ~] ipvsadm -A -t 192.168.159.20:80 -s rr
[root@lvs ~] ipvsadm -A  -f 666  -p 3000

#修改
[root@lvs ~] ipvsadm -E -t 192.168.159.20:80  -s wrr -p 3000

#删除
[root@lvs ~]ipvsadm -D -t 192.168.159.20:80
[root@lvs ~] ipvsadm -D -f 666

lvs集群中RealServer的增删改

bash 复制代码
ipvsadm -a|e   -t|u|f     service-address    -r realserver-address  [-g|i|m]     [-w weight]

-a #添加realserver

-e #更改realserver

-t #tcp协议

-u #udp协议

-f #火墙 标签

-r #realserver地址

-g #直连路由模式

-i #ipip隧道模式

-m #nat模式

-w #设定权重

-Z #清空计数器

-C #清空lvs策略

-L #查看lvs策略

-n #不做解析

--rate :输出速率信息

bash 复制代码
#添加
[root@lvs ~] ipvsadm -a -t 192.168.159.20:80 -r 192.168.0.30 -m
[root@lvs ~] ipvsadm -a -t 192.168.159.20:80 -r 192.168.159.100 -m -w 2

#更改
[root@lvs ~] ipvsadm -e -t 192.168.159.20:80  -r 192.168.159.100 -m -w 1
[root@lvs~] ipvsadm -e -t 192.168.159.20:80  -r 192.168.159.100 -i -w 1

#删除
[root@lvs ~] ipvsadm -d -t 192.168.159.20:80 -r 192.168.159.100

五、NAT模式集群部署

原理图:

  • VS用双网卡,一个NA模式连接外网,一个是仅主机网卡与后端Web服务器相连

  • Web服务器采用仅主机网卡与director相连

  • Web服务器网关指向DIP: 192.168.159.20

  • 后端web服务器不需要连接外网

实验环境:

主机名 ip vip 角色
node1 192.168.159.0 192.168.65.65 调度器(VS)
node2 192.168.159.100,GW 192.168.159.20 null 真实服务器(RS)
node3 192.168.159.200,GW 192.168.159.20 null 真实服务器(RS)

配置命令

1.在VS中开启内核路由功能

bash 复制代码
[root@VS ~] echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
[root@VS ~] sysctl -p
net.ipv4.ip_forward = 1

2.安装ipvsadm(vs,rs)

bash 复制代码
yum install ipvsadm -y

3.在vs中添加调度策略

bash 复制代码
[root@VS ~] ipvsadm -A -t 192.168.65.65:80 -s rr

[root@VS ~] ipvsadm -a -t 192.168.65.65:80 -r 192.168.159.100 -m

[root@VS ~] ipvsadm -a -t 192.168.65.65:80 -r 192.168.159.200 -m

#查看策略
[root@VS ~] ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.65.65:80 rr
  -> 192.168.159.100:80           Masq    1      0          0
  -> 192.168.159.200:80           Masq    1      0          0

4.保存规则,清空,重载

bash 复制代码
[root@VS ~] ipvsadm -Sn > /etc/sysconfig/ipvsadm
[root@VS ~] ipvsadm -C
[root@VS ~] ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
  
[root@VS ~]ipvsadm -R < /etc/sysconfig/ipvsadm
[root@VS ~] ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.65.65:80 rr
  -> 192.168.159.100:80           Masq    1      0          0
  -> 192.168.159.200:80           Masq    1      0          0

5.测试

bash 复制代码
  24/01/2026   17:09.37   /home/mobaxterm  for n in {1..6} ;do curl 192.168.65.65 ;done
RS2 - 192.168.159.200
RS1 - 192.168.159.100
RS2 - 192.168.159.200
RS1 - 192.168.159.100
RS2 - 192.168.159.200
RS1 - 192.168.159.100
                        

6.修改为权重轮询调度算法

bash 复制代码
[root@VS ~] ipvsadm -E -t 102.168.65.65:80 -s wrr
No such service
[root@VS ~] ipvsadm -E -t 192.168.65.65:80 -s wrr
[root@VS ~] ipvsadm -e -t 192.168.65.65:80  -r 192.168.159.100:80 -m -w 2
[root@VS ~] ipvsadm -e -t 192.168.65.65:80  -r 192.168.159.200:80 -m -w 1
[root@VS ~] ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.65.65:80 wrr
  -> 192.168.159.100:80           Masq    2      0          0
  -> 192.168.159.200:80           Masq    1      0          0



#测试效果
                                                                                
  24/01/2026   17:10.04   /home/mobaxterm  for n in {1..6} ;do curl 192.168.65.65 ;done
RS2 - 192.168.159.200
RS1 - 192.168.159.100
RS1 - 192.168.159.100
RS2 - 192.168.159.200
RS1 - 192.168.159.100
RS1 - 192.168.159.100

DR模式集群部署

实验环境:


ip等配置信息

在仅主机模式的主机中将vip写在lo环回接口上。

主机名 ip vip 角色
client 192.168.65.10 vmware NAT null 测试主机
router NAT:192.168.65.65,仅主机:192.168.159.10 null 路由器
lvs 192.168.159.50,GW 192.168.159.10 仅主机 lo:192.168.159.20 调度器
RS1 192.168.159.100,GW 192.168.159.10 仅主机 lo:192.168.159.20 web服务器1
RS2 192.168.159.200, GW 192.168.159.10 仅主机 lo:192.168.159.20 web服务器2

1.在将每台主机配置到后,测试每台主机相互之间是否能够平通

解决vip响应问题

DR模型中各主机上均需要配置VIP,解决地址冲突的方式有三种:

(1)在前端网关做静态绑定

(2)在各RS使用arptables

(3)在各RS修改内核参数,来限制arp响应和通告的级别

限制响应级别:arp_ignore

  • 0:默认值,可使用本地任意接口上配置的任意地址进行响应
  • 1:仅在请求的目标IP配置在本地主机的接收到请求报文的接口上时,才给予响应

限制通告级别:arp_announce

  • 0:默认值,把本机所有接口的所有信息向每个接口的网络进行通告

  • 1:尽量避免将接口信息向非直接连接网络进行通告

  • 2:必须避免将接口信息向非本网络进行通告

    配置代码为:

bash 复制代码
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce

2.在vs上配置策略

bash 复制代码
[root@vs ~] ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
[root@vs ~] ipvsadm -A -t 192.168.159.20:80 -s rr
[root@vs ~] ipvsadm -a -t 192.168.159.20:80 -r 192.168.159.100:80 -g
[root@vs ~] ipvsadm -a -t 192.168.159.20:80 -r 192.168.159.200:80 -g
[root@vs ~]ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.159.20:80 rr
  -> 192.168.159.100:80           Route   1      0          0
  -> 192.168.159.200:80           Route   1      0          0
[root@vs ~]#

3.测试

bash 复制代码
[root@client ~] for n in {1..6} ;do curl 192.168.65.65 ;done
RS2 - 192.168.159.200
RS1 - 192.168.159.100
RS1 - 192.168.159.100
RS2 - 192.168.159.200
RS1 - 192.168.159.100
RS1 - 192.168.159.100

六、利用防火墙标签巧妙解决轮询错误

例如:

当在RS中同时开放80和443端口,那么默认控制是分开轮询的,

当我第一次访问80被轮询到RS1后下次访问443仍然可能会被轮询到RS1上

问题复现

1.首先在RS上开启https服务。

2.在vs调度器上写80和443来那个端口的策略

bash 复制代码
[root@vs ~] ipvsadm -A -t 192.168.159.20:80 -s rr
[root@vs ~] ipvsadm -a -t 192.168.159.20:80 -r 192.168.159.100:80 -g
[root@vs ~] ipvsadm -a -t 192.168.159.20:80 -r 192.168.159.200:80 -g


[root@vs ~] ipvsadm -A -t 192.168.159.20:443 -s rr
[root@vs ~] ipvsadm -a -t 192.168.159.20:443 -r 192.168.159.100:443 -g
[root@vs ~] ipvsadm -a -t 192.168.159.20:443 -r 192.168.159.200:443 -g
[root@vs ~] ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.159.20:80 rr
  -> 192.168.159.100:80           Route   1      0          1
  -> 192.168.159.200:80           Route   1      0          2
TCP  192.168.159.20:443 rr
  -> 192.168.159.100:443          Route   1      0          2
  -> 192.168.159.200:443          Route   1      0          2


[root@client ~] curl -k https://192.168.159.20;curl 192.168.159.20
RS2 - 192.168.159.200
RS2 - 192.168.159.200

可以发现两次都被调度到同一台服务器

防火墙标记解决轮询调度问题

实现方法:

bash 复制代码
iptables -t mangle -A PREROUTING -d $vip -p $proto -m multiport --dports $portl,$port2,..-i MARK --set-mark NUMBER

防火墙标签配置:

bash 复制代码
在mangle表上设定端口标签,认为80和443是一个整体
[root@vs ~] iptables -t mangle -A PREROUTING -d 192.168.159.20 -p tcp -m multiport --dports 80,443 -j MARK --set-mark  6666

[root@vs ~] iptables -t mangle  -L -n
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination
MARK       tcp  --  0.0.0.0/0            192.168.159.20       multiport dports 80,443 MARK set 0x1a0a

Chain INPUT (policy ACCEPT)
target     prot opt source               destination

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination

设定调度策略:

bash 复制代码
[root@vs ~] ipvsadm -C
[root@vs ~] ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
  
[root@vs ~] ipvsadm -A -f 6666 -s rr
[root@vs ~] ipvsadm -a -f 6666 -r 192.168.159.100 -g
[root@vs ~] ipvsadm -a -f 6666 -r 192.168.159.200 -g
[root@vs ~] ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
FWM  6666 rr
  -> 192.168.159.100:0            Route   1      0          0
  -> 192.168.159.200:0            Route   1      0          0

#测试

[root@client ~] curl -k https://192.168.159.20;curl 192.168.159.20
RS2 - 192.168.159.200
RS1 - 192.168.159.100
[root@client ~] curl -k https://192.168.159.20;curl 192.168.159.20
RS2 - 192.168.159.200
RS1 - 192.168.159.100

可以看到在添加标记后调度正常

七、LVS会话粘滞(持久连接)

用户上网过程中有很多情况下需要和服务器进行交互,客户需要提交响应信息给服务器,如果单纯的进行调度会导致客户填写的表单丢失,为了解决这个问题我们可以用sh算法,但是sh算法比较简单粗暴,可能会导致调度失衡

解决方法:

持久连接的核心是 "基于内存的状态记录"。

LVS 调度器会在其内存中维护一个"连接跟踪表"。

当一个来自某个源(通常是客户端 IP)的请求首次到达时,调度器会根据配置的负载均衡算法(如 wlc, rr等)选择一个后端真实服务器(RS)。

调度器会记录下这个"源"和它所分配的"RS"的映射关系,并设置一个超时时间(默认360s)。

配置方法:

bash 复制代码
ipvsadm -AlE -tlulf service-address [-s scheduler] [-p [timeout]]默认360秒	

vs调度器配置策略:

设定超时时间为一分钟

bash 复制代码
[root@vs ~] ipvsadm -E -f 6666 -s rr -p 1
[root@vs ~] ipvsadm -Lnc
IPVS connection entries
pro expire state       source             virtual            destination
[root@vs ~] ipvsadm -Lnc
IPVS connection entries
pro expire state       source             virtual            destination
TCP 01:56  FIN_WAIT    192.168.65.10:47554 192.168.159.20:80  192.168.159.200:80
IP  00:57  ASSURED     192.168.65.10:0    0.0.26.10:0        192.168.159.200:0


测试:

[root@client ~] curl 192.168.159.20
RS1 - 192.168.159.100
[root@client ~]curl 192.168.159.20
RS1 - 192.168.159.100
[root@client ~] curl 192.168.159.20
RS1 - 192.168.159.100

从结果可知,在超时时间内访问都被调度到同一服务器

相关推荐
学习3人组2 小时前
Docker run 挂载本地两个目录到容器内的写法(核心规则+实操示例)
运维·docker·容器
梁洪飞2 小时前
内核启动卡死在Starting kernel ...,没有任何打印如何定位
linux·arm开发·嵌入式硬件·arm
321.。2 小时前
深入理解 Linux 线程封装:从 pthread 到 C++ 面向对象实现
linux·开发语言·c++
EmbedLinX2 小时前
Linux内核之文件系统:从VFS到实际存储的运作机制
linux·服务器·c语言·c++
实心儿儿2 小时前
Linux —— 进程概念 - 初识进程
linux·运维·服务器
weixin_462446232 小时前
Linux/Mac 一键自动配置 JAVA_HOME 环境变量(含 JDK 完整性校验)
java·linux·macos
济6172 小时前
linux 系统移植(第十六期)---Linux 内核移植(5)-- 修改网络驱动(1)--- Ubuntu20.04
linux·嵌入式硬件
数通工程师2 小时前
实操教程:华为防火墙HRP主备模式完整配置步骤
运维·服务器·网络·网络协议·tcp/ip·华为
雾削木2 小时前
STM32 HAL库 BMP280气压计读取
linux·stm32·单片机·嵌入式硬件