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

轻轻松松带你进行-负载均衡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://anchithere.hfytgp.cn
http://bolus.hfytgp.cn
http://career.hfytgp.cn
http://allod.hfytgp.cn
http://adolphus.hfytgp.cn
http://backcourt.hfytgp.cn
http://choosey.hfytgp.cn
http://anchoretic.hfytgp.cn
http://avail.hfytgp.cn
http://air.hfytgp.cn
http://affectingly.hfytgp.cn
http://calamite.hfytgp.cn
http://chromate.hfytgp.cn
http://amoebiasis.hfytgp.cn
http://ammeter.hfytgp.cn
http://carelessly.hfytgp.cn
http://bloomer.hfytgp.cn
http://cadaster.hfytgp.cn
http://assembly.hfytgp.cn
http://anta.hfytgp.cn
http://chromatist.hfytgp.cn
http://alfreda.hfytgp.cn
http://candace.hfytgp.cn
http://capitalizer.hfytgp.cn
http://amaldar.hfytgp.cn
http://canterbury.hfytgp.cn
http://centesis.hfytgp.cn
http://azine.hfytgp.cn
http://annoyingly.hfytgp.cn
http://bedside.hfytgp.cn
http://www.dtcms.com/a/281113.html

相关文章:

  • 随机奖励能提升Qwen数学表现?本质是数据污染
  • brupsuite使用中遇到的一些问题(bp启动后浏览器无法连接)/如何导入证书
  • YCQ340汽油机气缸体总成设计cad【8张】设计说明书
  • 模拟C++简易配置系统(模板类 + 全局管理)
  • 一区 Top (HPJ) | WGAS+WGCNA分析文章套路
  • 零基础学软件测试:超详细软件测试基础理论知识讲解
  • 【实时Linux实战系列】使用系统调用实现实时同步
  • Java项目:基于SSM框架实现的学生档案管理系统【ssm+B/S架构+源码+数据库+毕业论文+开题报告】
  • 智能体技术深度解析:从概念到企业级搭建指南
  • 自学java,什么书比较好?
  • MaxKB使用笔记【持续ing】
  • LeetCode 1888. 使二进制字符串字符交替的最少反转次数
  • 维基框架发布 1.0.11 至中央仓,深化国产化 DevOps 生态整合
  • 3-Nodejs-使用fs文件系统模块
  • kotlin的自学笔记1
  • 文心一言开源版部署及多维度测评实例
  • Listener(监听器)
  • 拓扑排序一>可达性统计
  • [WUSTCTF2020]朴实无华
  • Vue 3的核心机制-解析事件流、DOM更新、数据请求、DOM操作规范及组件库DOM操作的解决方案
  • 日记_7.14_实际开发的进步
  • 使用Spring Cloud LoadBalancer报错java.lang.IllegalStateException
  • Wordpress登录数据库连接失败的问题
  • Web攻防-PHP反序列化字符逃逸增多减少成员变量属性解析不敏感Wakeup绕过
  • 网络:TCP序列号和滑动窗口,顺序保证
  • 【R语言】警告conversion failure on ‘中文字符‘ in ‘mbcsToSbcs‘: for 注 (U+6CE8)
  • 枪机、支持POE、4G连接交换机实现多屏幕显示
  • 【郑大二年级信安小学期】Day12:编写渗透测试脚本搭建虚拟环境
  • 淘宝扭蛋机小程序开发:重构电商娱乐化体验的新范式
  • 不同系统记录项目进度不一致,如何统一口径