轻轻松松带你进行-负载均衡LVS实战

8. LVS部署命令介绍

8.1 LVS软件相关信息
1.程序包:ipvsadm
2.Unit File: ipvsadm.service
3.主程序:/usr/sbin/ipvsadm
4.规则保存工具:/usr/sbin/ipvsadm-save
5.规则重载工具:/usr/sbin/ipvsadm-restore
6.配置文件:/etc/sysconfig/ipvsadm-config
7.ipvs调度规则文件:/etc/sysconfig/ipvsadm
8.2 ipvsadm命令
# 安装
yum install -y ipvsadm
8.2.1 核心功能
  • 集群服务管理:增、删、改
  • 集群服务的RS管理:增、删、改
  • 查看命令参数
管理集群服务 ipvsadm -A|E -t(tcp)|u(udp)|f(防护墙标签) \
service-address(集群地址;VIP) \
[-s scheduler(调度算法)] \
[-p [timeout]] \
[-M netmask] \
[--pepersistence_engine] \
[-b sched-flags] ipvsadm -D -t|u|f service-address 删除
ipvsadm –C 清空
ipvsadm –R 重载
ipvsadm -S [-n] 保存管理集群中的real 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 删除RSipvsadm -L|l [options] 查看RSipvsadm -Z [-t|u|f service-address] 清楚计数器
8.2.2 参数解释
参数功能
-A --add-service添加一条新的虚拟服务
-E --edit-service编辑虚拟服务
-D --delete-service删除虚拟服务
-C --clear清除所有的虚拟服务规则
-R --restore恢复虚拟服务规则
-a --add-server在一个虚拟服务中添加一个新的真实服务器
-e --edit-server编辑某个真实服务器
-d --delete-server删除某个真实服务器
-L | -l --list显示内核中的虚拟服务规则
-n --numeric以数字形式显示IP端口
-c --connection显示ipvs中目前存在的连接,也可以用于分析调度情况
-Z --zero将转发消息的统计清零
-p --persistent配置持久化时间
–set tcp tcpfin udp配置三个超时时间(tcp/tcpfin/udp)
-t | -uTCP/UDP协议的虚拟服务
-g | -m | -iLVS模式为:DR | NAT | TUN
-w配置真实服务器的权重
-s配置负载均衡算法,如:rr, wrr, lc等
–timeout显示配置的tcp/tcpfin/udp超时时间
–stats显示历史转发消息统计(累加值)
–rate显示转发速率信息(瞬时值)
8.3 LVS集群中的增删改
8.3.1 管理集群服务中的增删改
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 火墙标记,是一个数字# 增加 
[root@DR-server ~]# ipvsadm -A -t 172.25.254.100:80 -s rr 
[root@DR-server ~]# ipvsadm -A -f 66 -p 3000 # 修改 
[root@DR-server ~]# ipvsadm -E -t 172.25.254.100:80 -s wrr -p 3000 # 删除 
[root@DR-server ~]# ipvsadm -D -t 172.25.254.100:80 
[root@DR-server ~]# ipvsadm -D -f 66
8.3.2 管理集群中RealServer的增删改
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 # 输出速率信息
# 添加 
[root@DR-server ~]# ipvsadm -a -t 172.25.254.100:80 -r 192.168.0.30 -m 
[root@DR-server ~]# ipvsadm -a -t 172.25.254.100:80 -r 192.168.0.40 -m -w 2 # 更改 
[root@DR-server ~]# ipvsadm -e -t 172.25.254.100:80 -r 192.168.0.30 -m -w 1 
[root@DR-server ~]# ipvsadm -e -t 172.25.254.100:80 -r 192.168.0.30 -i -w 1 # 删除 
[root@DR-server ~]# ipvsadm -d -t 172.25.254.100:80 -r 192.168.0.30
[root@DR-server ~]# ipvsadm -Ln
[root@DR-server ~]# ipvsadm -Ln --rate[root@DR-server ~]# ipvsadm -C 
[root@DR-server ~]# ipvsadm -Z -t 172.25.254.20:80 
[root@DR-server ~]# ipvsadm -Ln --rate 
  • pvs规则:/proc/net/ip_vs
  • ipvs连接:/proc/net/ip_vs_conn
# 保存
# 1.第一种方法
[root@lvs ~]# ipvsadm-save  > /etc/sysconfig/ipvsadm-config				# 此过程很慢;想要快点可以去/etc/hosts做dns解析# 2.第二种方法
# 相当于 lvs:http <==> 172.25.254.100:80
[root@lvs ~]# ipvsadm -Sn > /etc/sysconfig/ipvsadm-config
# 恢复策略如下图(也可在NAT部署实战查看详细):
image-20250714164449880

11. LVS实战案例

11.1 部署NAT模式集群案例
11.1.1 架构图如下

在这里插入图片描述

11.1.2 部署过程如下
1. 实验环境
主机IPVIP网关角色
lvs192.168.0.100172.25.254.100172.25.254.2调度器VS
webserver-01192.168.0.10NULL192.168.0.100真实服务器RS
webserver-02192.168.0.20NULL192.168.0.100真实服务器RS
Client172.25.254.200NULL172.25.254.2客户端
image-20250712190553539 image-20250712200919699
1.LVS使用vmset.sh之后记得将第二张网卡(仅主机)的网关与DNS删除即可NAT:172.25.254.100	仅主机:192.168.0.100
2.两台webserver需要提前将网卡调整至仅主机模式,如下图所示:s-01:192.168.0.10	# 网关:192.168.0.100	为LVS仅主机的IPs-02:192.168.0.20	# 网关:192.168.0.100	为LVS仅主机的IP
3.客户端client使用vmset.sh之后即可NAT:172.25.254.200systemctl disable --now firewalld		# 四台主机都执行!
image-20250712195736182
2. 配置命令

(1)LVS中打开内核路由功能

# 查询一下连接状态
[root@LVS ~]# sysctl -a | grep ip_forward
net.ipv4.ip_forward = 0
net.ipv4.ip_forward_update_priority = 1
net.ipv4.ip_forward_use_pmtu = 0# 写入参数并查看
[root@LVS ~]# echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
[root@LVS ~]# tail -1 /etc/sysctl.conf
net.ipv4.ip_forward = 1# 启用
[root@LVS ~]# sysctl -p
net.ipv4.ip_forward = 1
image-20250714155815139

(2)两台server主机进行测试,并在lvs里面进行必要的测试

dnf install -y httpdecho xxxxxx > /var/www/html/index.html		# 测试时xxxx的内容最好不一样可以看得更直观一点!# 在真实生产环境中,两台server配置必须一模一样!
systemctl enable --now httpd# 完成之后可以在LVS里面进行检测;
[root@lvs ~]# curl 192.168.0.10[root@lvs ~]# curl 192.168.0.20# 如果出现'No route to host'问题,建议关闭火墙或者增添必要火墙命令

(3)在lvs中安装lvs软件–ipvsadm

[root@lvs ~]# dnf install -y ipvsadm

(4)添加调度策略、并查看

[root@lvs ~]# ipvsadm -A -t 172.25.254.100:80  -s  rr# -A:添加策略# -t:tcp协议# 172.25.254.100:80 集群地址:端口# -s rr  	-s:调度算法	  rr:轮询算法[root@lvs ~]# ipvsadm -a -t 172.25.254.100:80  -r 192.168.0.10:80 -m# -a:新添一台RS# -t:tcp协议# 172.25.254.100:80 集群地址:端口# -r:RS地址(端口)# -m:LVS模式为NAT模式[root@lvs ~]# ipvsadm -a -t 172.25.254.100:80  -r 192.168.0.20:80 -m[root@lvs ~]# ipvsadm -Ln		# 显示规则及端口
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags-> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  172.25.254.100:80 rr-> 192.168.0.10:80              Masq    1      0          0-> 192.168.0.20:80              Masq    1      0          0
image-20250713233317272

(5)客户端测试

[root@client ~]# hostname -I
172.25.254.200
[root@client ~]# for i in {1..10}; do curl 172.25.254.100; done
webserver-01 - 192.168.0.10
webserver-02 - 192.168.0.20
webserver-01 - 192.168.0.10
webserver-02 - 192.168.0.20
webserver-01 - 192.168.0.10
webserver-02 - 192.168.0.20
webserver-01 - 192.168.0.10
webserver-02 - 192.168.0.20
webserver-01 - 192.168.0.10
webserver-02 - 192.168.0.20
image-20250714002124540

(6)进行策略保存

# 1.第一种方法
[root@lvs ~]# ipvsadm-save  > /etc/sysconfig/ipvsadm-config				# 此过程很慢;想要快点可以去/etc/hosts做dns解析[root@lvs ~]# more /etc/sysconfig/ipvsadm-config
-A -t lvs:http -s rr
-a -t lvs:http -r 192.168.0.10:http -m -w 1
-a -t lvs:http -r 192.168.0.20:http -m -w 1# 2.第二种方法
# 相当于 lvs:http <==> 172.25.254.100:80
[root@lvs ~]# ipvsadm -Sn
-A -t 172.25.254.100:80 -s rr
-a -t 172.25.254.100:80 -r 192.168.0.10:80 -m -w 1
-a -t 172.25.254.100:80 -r 192.168.0.20:80 -m -w 1
[root@lvs ~]# ipvsadm -Sn > /etc/sysconfig/ipvsadm-config
image-20250713233907504

可选–(7)命令测试:删除所有规则并重载规则、并客户端测试

[root@lvs ~]# ipvsadm -C		# 清空规则
[root@lvs ~]# ipvsadm -Ln# 重新加载规则(前提:进行过保存...)
[root@lvs ~]# ipvsadm -R  <  /etc/sysconfig/ipvsadm-config
[root@lvs ~]# ipvsadm -Ln# 在客户端中再次进行测试
[root@client ~]# for i in {1..20}; do curl 172.25.254.100; done

image-20250714004203404image-20250714005006327

可选–(8)将ipvsadm.service调为开机自启

systemctl enable --now ipvsadm.service

可选–(9)算法测试:轮询算法–>权重调用算法

[root@lvs ~]# ipvsadm -E -t 172.25.254.100:80 -s wrr
[root@lvs ~]# ipvsadm -e -t 172.25.254.100:80 -r 192.168.0.10:80 -m -w 2
[root@lvs ~]# ipvsadm -e -t 172.25.254.100:80 -r 192.168.0.20:80 -m -w 1[root@lvs ~]# ipvsadm -Sn
-A -t 172.25.254.100:80 -s wrr
-a -t 172.25.254.100:80 -r 192.168.0.10:80 -m -w 2
-a -t 172.25.254.100:80 -r 192.168.0.20:80 -m -w 1# 客户端测试
[root@client ~]# for i in {1..30}; do curl 172.25.254.100; done
image-20250714005925145
11.2 部署DR模式集群案例
11.2.1 架构图如下
image-20250715002019155
11.2.2 部署过程如下
1. 实验环境
主机网络适配器
(NAT/仅主机/双网卡)
IP、VIPGateWay角色
CLIENTNATNAT:172.25.254.200172.25.254.100客户端
ROUTER双网卡NAT:172.25.254.100
仅主机:192.168.0.100
null路由器
LVS仅主机仅主机:
lo:VIP:192.168.0.200
DIP:192.168.0.50
192.168.0.100负载调度器
WEBSERVER-01仅主机仅主机:
lo:VIP:192.168.0.200
DIP:192.168.0.10
192.168.0.100真实服务器-01
WEBSERVER-02仅主机仅主机:
lo:VIP:192.168.0.200
DIP:192.168.0.20
192.168.0.100真实服务器-02
image-20250714190032156 image-20250714213751016 image-20250714193141404
cat /etc/NetworkManager/system-connections/网卡名.nmconnection# 查看一下网卡配置
# 提示:如果是使用的vmset.sh配置的信息,记得要修改仅主机网卡的网关及相关信息
# 仅主机模式下,三台主机(LVS+WS-01+WS-02)的网关都为路由器(ROUTER)仅主机模式下的IP地址# 可以使用 route -n 查看路由表
image-20250714194816618
[root@WEBSERVER-01 ~]# route -n
[root@WEBSERVER-02 ~]# route -n# 由此可知,两台主机的网关都在路由器的内网接口上!
image-20250714202320676
# 测试一下路由器与客户端是否可以ping通全网(如下图所示):
# 客户端:
[root@CLIENT ~]# hostname -I
172.25.254.200
[root@CLIENT ~]# ping -c1 172.25.254.100
[root@CLIENT ~]# ping -c1 192.168.0.50
[root@CLIENT ~]# ping -c1 192.168.0.10
[root@CLIENT ~]# ping -c1 192.168.0.20# 路由器:
[root@ROUTER ~]# hostname -I
172.25.254.100 192.168.0.100
[root@ROUTER ~]# ping -c1  172.25.254.200
[root@ROUTER ~]# ping -c1  192.168.0.50
[root@ROUTER ~]# ping -c1  192.168.0.10
[root@ROUTER ~]# ping -c1  192.168.0.20
image-20250714194623236
# 关闭SELinux及火墙
# 由于母盘已将SELinux关闭,此处不考虑;只考虑火墙
# 为每一台主机(除过)进行火墙关闭!
systemctl disable --now firewalld
  • ROUTER 主机打开内核路由功能
[root@ROUTER ~]# sysctl -a | grep ip_forward
net.ipv4.ip_forward = 0[root@ROUTER ~]# echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf[root@ROUTER ~]# sysctl -p
net.ipv4.ip_forward = 1
2. 解决vip响应配置部署步骤

(1)在LVS与WEBSERVER中设定lo:VIP

[root@LVS ~]# ip addr add dev lo 192.168.0.200/32
[root@WEBSERVER-01 ~]# ip addr add dev lo 192.168.0.200/32
[root@WEBSERVER-02 ~]# ip addr add dev lo 192.168.0.200/32# 也可以lvs直接使用回环网卡(但是需要桥接网络,不推荐),如下图配置:
# 但是建议RS-01与RS-02写入配置
[connection]
id=lo
type=loopback
interface-name=lo[ipv4]
address1=127.0.0.1/8,
address2=172.25.254.200/32,
method=manual
image-20250715135646097 image-20250714205459752

(2)在WEBSERVER-01与WEBSERVER-02中解决响应问题(可以写入配置文件)

# arp广播的作用:获取MAC地址# server-01:
# 全局限制arp响应(防止arp冲突 --> all.arp_ignore = 1 )
# 全局限制arp宣告(确保服务器不将VIP宣告到外部网络 --> all.arp_announce = 2 ;2-->只响应本机;1-->响应外部网络)
# 隔离环回接口接应(lo.arp_ignore = 1)
# 隔离环回接口宣告(lo.arp_announce = 2)
[root@WEBSERVER-01 ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
[root@WEBSERVER-01 ~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce[root@WEBSERVER-01 ~]# echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
[root@WEBSERVER-01 ~]# echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore[root@WEBSERVER-01 ~]# sysctl -a | grep arp_ignore
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.default.arp_ignore = 0
net.ipv4.conf.eth0.arp_ignore = 0
net.ipv4.conf.lo.arp_ignore = 1[root@WEBSERVER-01 ~]# sysctl -a | grep arp_announce
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.default.arp_announce = 0
net.ipv4.conf.eth0.arp_announce = 0
net.ipv4.conf.lo.arp_announce = 2[root@WEBSERVER-01 ~]# echo "net.ipv4.conf.all.arp_ignore = 1" >> /etc/sysctl.conf
[root@WEBSERVER-01 ~]# echo "net.ipv4.conf.lo.arp_ignore = 1" >> /etc/sysctl.conf
[root@WEBSERVER-01 ~]# echo "net.ipv4.conf.lo.arp_announce = 2" >> /etc/sysctl.conf
[root@WEBSERVER-01 ~]# echo "net.ipv4.conf.all.arp_announce = 2" >> /etc/sysctl.conf[root@WEBSERVER-01 ~]# sysctl -p
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.all.arp_announce = 2# server-02:
# 全局限制arp响应(防止arp冲突 --> all.arp_ignore = 1 )
# 全局限制arp宣告(确保服务器不将VIP宣告到外部网络 --> all.arp_announce = 2 )
# 隔离环回接口接应(lo.arp_ignore = 1)
# 隔离环回接口宣告(lo.arp_announce = 2)
[root@WEBSERVER-02 ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
[root@WEBSERVER-02 ~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce[root@WEBSERVER-02 ~]# echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
[root@WEBSERVER-02 ~]# echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore[root@WEBSERVER-02 ~]# sysctl -a | grep arp_ignore
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.default.arp_ignore = 0
net.ipv4.conf.eth0.arp_ignore = 0
net.ipv4.conf.lo.arp_ignore = 1[root@WEBSERVER-02 ~]# sysctl -a | grep arp_announce
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.default.arp_announce = 0
net.ipv4.conf.eth0.arp_announce = 0
net.ipv4.conf.lo.arp_announce = 2[root@WEBSERVER-02 ~]# echo "net.ipv4.conf.all.arp_ignore = 1" >> /etc/sysctl.conf
[root@WEBSERVER-02 ~]# echo "net.ipv4.conf.lo.arp_ignore = 1" >> /etc/sysctl.conf
[root@WEBSERVER-02 ~]# echo "net.ipv4.conf.all.arp_announce = 2" >> /etc/sysctl.conf
[root@WEBSERVER-02 ~]# echo "net.ipv4.conf.lo.arp_announce = 2" >> /etc/sysctl.conf[root@WEBSERVER-02 ~]# sysctl -p
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.lo.arp_announce = 2
image-20250714204009365

(3)在LVS中配置策略、保存/还原

# 先下载命令
[root@LVS ~]# dnf  install -y ipvsadm# 配置策略
[root@LVS ~]# ipvsadm -A -t 192.168.0.200:80 -s wrr
[root@LVS ~]# ipvsadm -a -t 192.168.0.200:80 -r 192.168.0.10 -g -w 1
[root@LVS ~]# ipvsadm -a -t 192.168.0.200:80 -r 192.168.0.20 -g -w 2# 进行查看
[root@LVS ~]# 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.0.200:80 wrr-> 192.168.0.10:80              Route   1      3          0-> 192.168.0.20:80              Route   2      4          0# 进行策略保存
[root@LVS ~]# ipvsadm-save > /etc/sysconfig/ipvsadm-config# 后期开机后如果被清空ipvsadm -C
# 策略还原
[root@LVS ~]# ipvsadm-R < /etc/sysconfig/ipvsadm-config
3. 测试
# 两台RS主机下载httpd进行测试
# RS-01:
[root@WEBSERVER-01 ~]# yum install -y httpd
[root@WEBSERVER-01 ~]# systemctl enable --now httpd
[root@WEBSERVER-01 ~]# echo "this is WEBSERVER-01: `hostname -I`" > /var/www/html/index.html# RS-02:
[root@WEBSERVER-02 ~]# yum install -y httpd
[root@WEBSERVER-02 ~]# systemctl enable --now httpd
[root@WEBSERVER-02 ~]# echo "this is WEBSERVER-02: `hostname -I`" > /var/www/html/index.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/89130.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/89130.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C#.NET 集合框架详解

简介 C# 集合框架是处理数据集合的核心组件&#xff0c;位于 System.Collections 和 System.Collections.Generic 命名空间。它提供了多种数据结构来高效存储和操作数据。 集合框架概览 System.Collections (非泛型老版) └─ System.Collections.Generic (泛…

网络劫持对用户隐私安全的影响:一场无形的数据窃取危机

在互联网时代&#xff0c;网络劫持如同一把“隐形镰刀”&#xff0c;悄然威胁着用户的隐私安全。当我们在浏览网页、使用社交媒体或进行在线交易时&#xff0c;看似正常的网络连接背后&#xff0c;可能正暗藏着数据被窃取的风险。网络劫持通过多种技术手段干预用户与服务器的正…

使用 Helm 下载 Milvus 安装包(Chart)指南

目录 &#x1f4e6; 使用 Helm 下载 Milvus 安装包&#xff08;Chart&#xff09;指南 &#x1f6e0; 环境准备 &#x1f680; 第一步&#xff1a;添加 Milvus Helm 仓库 &#x1f50d; 第二步&#xff1a;查看可用版本 &#x1f4e5; 第三步&#xff1a;下载指定版本的 C…

EXTI 外部中断

目录 STM32中断 NVIC 中断控制器 NVIC优先级分组 EXTI 外部中断 AFIO 复用IO口 外部中断/事件控制器&#xff08;EXTI&#xff09;框图 STM32中断 在STM32微控制器中&#xff0c;共有68个可屏蔽中断通道&#xff0c;涵盖了多个外设&#xff0c;如外部中断&#xff08;EXT…

WebApplicationType.REACTIVE 的webSocket

通用请求体类 Data ApiModel("websocket请求消息") public class WebSocketRequest<T> implements Serializable {private static final long serialVersionUID 1L;/*** 参考&#xff1a;com.mcmcnet.gacne.basic.service.common.pojo.enumeration.screen.AiB…

降本增效!自动化UI测试平台TestComplete并行测试亮点

在跨平台自动化测试中&#xff0c;企业常面临设备投入高、串行测试耗时长、测试覆盖率难以兼顾的困境。自动化UI测试平台TestComplete的并行测试引擎提供了有效的解决方案&#xff1a;通过云端海量设备池与CI/CD深度集成&#xff0c;实现多平台、多浏览器并行测试&#xff0c;显…

云、实时、时序数据库混合应用:医疗数据管理的革新与展望(上)

云、实时、时序数据库混合应用:医疗数据管理的革新与展望 1、引言 1.1 研究背景与意义 在信息技术飞速发展的当下,医疗行业正经历着深刻的数字化转型。这一转型不仅是技术层面的革新,更是关乎医疗体系未来发展方向的深刻变革。从医疗服务的提供方式,到医疗管理的模式,再…

代码随想录算法训练营十六天|二叉树part06

LeetCode 530 二叉搜索树的最小绝对差 题目链接&#xff1a;530. 二叉搜索树的最小绝对差 - 力扣&#xff08;LeetCode&#xff09; 给你一个二叉搜索树的根节点 root &#xff0c;返回 树中任意两不同节点值之间的最小差值 。 差值是一个正数&#xff0c;其数值等于两值之差…

自增主键为什么不是连续的?

前言 如果一个线程回滚&#xff0c;例如唯一键冲突的情况回滚时&#xff0c;回滚了sql语句&#xff0c;但是并没有把自增的值也-1。那么就会导致下一条插入的数据自增id出现了跳跃。 自增主键为什么不是连续的&#xff1f;前言执行时机为什么自增主键不是连续的为什么不回滚自…

OpenCV图像基本操作:读取、显示与保存

在图像处理项目中&#xff0c;图像的 读取&#xff08;imread&#xff09;、显示&#xff08;imshow&#xff09; 和 保存&#xff08;imwrite&#xff09; 是最基础也是最常用的三个操作。本文将详细介绍这三个函数的功能、用法和注意事项&#xff0c;并提供一个完整示例供读者…

.NET控制台应用程序中防止程序立即退出

在VB.NET控制台应用程序中防止程序立即退出&#xff0c;主要有以下几种常用方法&#xff0c;根据需求选择适合的方案&#xff1a; 方法1&#xff1a;等待用户输入&#xff08;推荐&#xff09; Module Module1Sub Main()Console.WriteLine("程序开始运行...") 这里是…

Vue3 + Three.js 极速入门:打造你的第一个3D可视化项目

文章目录前言一、环境准备1.1 创建Vue3项目1.2 安装Three.js二、Three.js核心概念速览三、实战&#xff1a;创建旋转立方体3.1 组件化初始化四、核心代码解析4.1 Vue3响应式整合技巧4.2 性能优化要点五、进阶功能扩展5.1 数据驱动控制5.2 加载3D模型六、常见问题解决七、资源推…

【设计模式】享元模式(轻量级模式) 单纯享元模式和复合享元模式

享元模式&#xff08;Flyweight Pattern&#xff09;详解一、享元模式简介 享元模式&#xff08;Flyweight Pattern&#xff09; 是一种 结构型设计模式&#xff08;对象结构型模式&#xff09;&#xff0c;它通过共享技术实现相同或相似对象的重用&#xff0c;以减少内存占用和…

驱动开发_2.字符设备驱动

目录1. 什么是字符设备2. 设备号2.1 设备号概念2.2 通过设备号dev分别获取主、次设备号的宏函数2.3 主设备号的申请静态申请动态分配2.4 注销设备号3. 字符设备3.1 注册字符设备3.2 注销字符设备3.3 应用程序和驱动程序的关系3.4 file_opertaions结构体3.5 class_create3.6 创建…

直播推流技术底层逻辑详解与私有化实现方案-以rmtp rtc hls为例-优雅草卓伊凡

直播推流技术底层逻辑详解与私有化实现方案-以rmtp rtc hls为例-优雅草卓伊凡由于我们的甲方客户要开始为我们项目产品上加入私有化的直播&#xff0c;这块不得不又捡起来曾经我们做直播推流的事情了&#xff0c;其实私有化直播一直并不是一件容易的事情&#xff0c;现在大部分…

一文读懂现代卷积神经网络—深度卷积神经网络(AlexNet)

目录 深度卷积神经网络&#xff08;AlexNet&#xff09;是什么&#xff1f; 一、AlexNet 的核心创新 1. 深度架构 2. ReLU 激活函数 3. 数据增强 4. Dropout 正则化 5. GPU 并行计算 6. 局部响应归一化&#xff08;LRN&#xff09; 二、AlexNet 的网络结构 三、AlexN…

JVM 垃圾收集算法全面解析

1. 引言1.1 为什么需要垃圾收集&#xff1f;在Java应用中&#xff0c;垃圾收集&#xff08;Garbage Collection&#xff0c;GC&#xff09;是一个至关重要的机制&#xff0c;它使得开发者不需要手动管理内存。与传统的语言&#xff08;如C或C&#xff09;不同&#xff0c;Java通…

Vmware中安装的CentOS7如何扩展硬盘大小

起初创建虚拟机时&#xff0c;大小设置不合理&#xff0c;导致我在尝试开源项目时空间不足重新扩展硬盘&#xff0c;不仅需要在虚拟机设置中配置&#xff0c;还需要在系统内重新进行分区一、虚拟机设置打开虚拟机设置→硬盘→扩展&#xff0c;将大小设置为自己期望的大小&#…

Python+MongoDB高效开发组合

如大家所知&#xff0c;Python与MongoDB的结合是一种高效的开发组合&#xff0c;主要用于通过Python进行数据存储、查询及管理&#xff0c;利用MongoDB的文档型数据库特性实现灵活的数据处理。下面让 Python 连接上 MongoDB&#xff1a;安装 PyMongo&#xff1a;pip3 install p…

【论文阅读】Masked Autoencoders Are Effective Tokenizers for Diffusion Models

introduce什么样的 latent 空间更适合用于扩散模型&#xff1f;作者发现&#xff1a;相比传统的 VAE&#xff0c;结构良好、判别性强的 latent 空间才是 diffusion 成功的关键。研究动机&#xff1a;什么才是“好的 latent 表征”&#xff1f;背景&#xff1a;Diffusion Models…