LVS—Linux Virtual Server

news2024/11/26 2:05:42

集群和分布式

系统性能拓展方式:

  • Scale UP:垂直拓展,提高单个服务器的性能,如增加CPU、内存等,单台服务器的性能是有上限的,不可能无限制垂直拓展。
  • Scale Out:水平拓展,增加设备,并行的运行多个服务。即Cluster集群

集群

Cluster:集群,为解决某个特定问题将多台计算机组合起来形成的单个系统

三种类型

LB

Load Balancing,负载均衡,由多个主机组成,每个主机只承担一部分访问请求。

产品分类
软件负载均衡

LVS:四层路由,根据用户请求的IP和端口号,实现将用户的请求分发至不同的主机

HAProxy:支持七层调度,主要针对http协议实现负载均衡

Nginx:支持七层调度,主要针对http、smtp、pop3、imap等协议实现负载均衡,只负责解析有限的七层协议

硬件负载均衡

F5 BIG-IP

Citrix Netscaler

A10

HA

High Availiablity,高可用,以提升服务的始终在线能力为目标,不会因为宕机而导致服务不可用

衡量可用性:在线时间/(在线时间+故障时间)

1年 = 365天 = 8760小时

99% 即一年内有 8760 * 1% = 87.6小时故障

99.9% 即一年内有 8760 * 0.1% = 8.76小时故障

99.99% 即一年内有 8760 * 0.01% = 52.6分钟故障

99.999% 即一年内有 8760 * 0.001% = 5.26分钟故障

99.9999% 即一年内有 8760 * 0.0001% = 31秒故障

产品

Keepalived

HPC

High—performance computing,高性能计算集群,计算海量数据,解决复杂问题。

分布式

分布式存储:Ceph,GlusterFS,FastDFS,MogileFS

分布式计算:hadoop,Spark

分布式常见应用:

  • 分布式应用服务按照功能拆分,使用微服务
  • 分布式静态资源.静态资源放在不同的存储集群上
  • 分布式数据和存储--使用key-value缓存系统
  • 分布式计算--对特殊业务使用分布式计算,比如Hadoop集群

对比

集群:同一个业务系统,部署在多台服务器上。集群中,每一台服务器实现的功能没有差别,数据和代码都是一样的

分布式:一个业务被拆成多个子业务,或者本身就是不同的业务,部署在多台服务器上。分布式中,每台服务器实现的功能是有差别的,数据和代码也是不一样的,分布式每台服务器功能加起来,才是完整的业务

分布式是以缩短单个任务的执行时间来提升效率的,而集群则是通过提高单位时间内执行的任务数来提升效率。

LVS

VS根据请求报文的目标IP和目标协议及端口将其调度转发至某RS,根据调度算法来挑选RS。LVS是集成到内核中的,工作在INPUT链的位置,将发往INPUT的流量进行处理。

相关术语:

VS:Virtual Server,负责调度

RS:Real Server,真正提供服务的服务器

CIP:Client IP

VIP:Virtual Server IP,VS主机的外网IP

DIP:Director IP,VS主机的内网IP

RIP:Real Server IP

工作模式

一、LVS-NAT 地址转换模式

本质是多目标IP的DNAT,通过将请求报文中的目标地址和目标端口修改为某个挑出的RS的RIP和Port实现转发

工作原理

  1. 客户端发送请求到LVS(负载均衡器),请求报文源地址是CIP(客户端IP),目标地址是VIP(LVS外网IP)
  2. LVS收到请求报文后,发现请求的是规则中存在的地址,它将把VIP修改为RIP(真实服务器IP)并依据调度算法将报文发送至RS
  3. RS收到请求报文将响应该请求,会把响应报文返回至LVS
  4. LVS将响应报文的源IP修改为本机的VIP并发送至客户端

注意

  • RIP和DIP应在同一个网络,且应使用私网IP;
  • RIP的网关必须指向lVS的DIP,否则响应报文无法送达客户端。
  • 请求报文和响应报文都必须经过Director转发,Director容易成为系统瓶颈
  • 支持端口映射,可修改请求报文的目标端口
  • VS必须是Linux系统,RS可以是任意系统

二、LVS-DR 直接路由模式

Direct Routing,直接路由,LVS默认模式,应用最广泛。通过为请求报文重新封装一个MAC首部进行转发,源MAC是DIP所在接口的MAC,目标MAC是某个挑选出来的RS的RIP所在接口的MAC地址。源IP/Port、目标IP/Port都保持不变

工作原理

  1. 客户端发送请求到LVS,请求报文源地址是CIP,目标地址是VIP
  2. LVS收到请求报文后,发现请求的是规则中存在的地址,它将把源MAC地址修改为自己DIP的MAC地址,目标MAC地址修改为RIP的MAC地址,并依据调度算法将报文发送至RS
  3. RS收到并处理请求报文后,将响应报文通过lo接口送给eth0网卡直接发送给客户端

注意

  • Direct和各RS都配置有VIP
  • 确保前端路由器将目标IP为VIP的请求报文发送至Direct
    • 在前端网关做静态绑定VIP和Direct的MAC地址
    • 在RS上使用arptables工具
      • arptables -A IN -d $VIP -j DROP
      • arptables -A OUT -s $VIP -j mangle --mangle-ip-s $RIP
    • 在RS上修改内核参数限制arp通告及应答级别
      • /proc/sys/net/ipv4/conf/all/arp_ignore
        • 0 默认值,表示可以用本地任意接口上配置的任意地址进行响应
        • 1 仅在请求的目标IP配置在本地主机中接收到请求报文的接口时才响应
      • /proc/sys/net/ipv4/conf/all/arp_announce
        • 0 默认值,把本机所有接口调度所有信息向每个接口的网络进行通告
        • 1 尽量避免将接口信息向非直连网络进行通告
        • 2 必须避免将接口信息向非本网络进行通过
  • RS的RIP可用私网地址/公网地址;RIP与DIP在同一网络;RIP网关不能指向DIP,以确保响应报文不会经过Direct
  • RS和Direct要在同个物理网络
  • 请求报文要经过Direct,但响应报文不经过Direct,而是直接发往Client
  • 不支持端口映射(端口不能修改)
  • 无需开启ip_forward
  • RS可用大多数系统

三、LVS-TUNIP 隧道模式

不修改请求报文的IP首部(源IP是CIP,目标IP是VIP),而是在原IP报文外再封装一个IP首部(源IP为DIP,目标IP为RIP),将报文发给选出的RS,RS直接响应客户端(源IP是VIP,目标IP是CIP)

工作原理

  1. 客户端发送请求到LVS,请求报文源地址是CIP,目标地址是VIP
  2. LVS收到请求报文后,发现请求的是规则中存在的地址,它将在客户端请求报文的首部再封装一层IP报文,将源IP改为DIP,将目标IP改为RIP,并将包发送给RS
  3. RS收到请求报文后,拆开第一层封装发现里面还有一层IP首部的目标地址是自己lo接口的VIP,会再次处理请求报文,并将响应报文通过lo接口送给eth0网卡直接发送给客户端

注意

  • RIP与DIP可以不处于同一个物理网络,RS的网关一般不能指向DIP,且RIP可以和公网通信。也就是说集群节点可以跨互联网实现。DIP、VIP、RIP可以是公网地址
  • RS的tun接口需配置VIP地址,以便接收direct发过来的数据包,以及作为响应报文的源IP
  • Direct转发给RS时需要借助隧道,隧道外层的IP头部源IP是DIP,目标IP是RIP,而RS响应给客户端的IP头部是根据隧道内层的IP头分析得到的,源IP是VIP,目标IP是CIP
  • 请求报文要经过Direct,但响应不经过Direct,响应由RS自己完成
  • 不支持端口映射
  • RS的系统必须支持隧道功能

四、LVS-FULLNAT

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

CIP > DIP     VIP > RIP

解决的是LVS和RS跨VLAN的问题,而跨VLAN问题解决后,LVS和RS不再存在VLAN上的从属关系,可做到多个LVS对应多个RS,解决水平扩容问题

 注意:

  • VIP是公网地址,RIP和DIP是私网地址,且通常不在同一IP网络;因此RIP的网关一般不指向DIP
  • RS收到的请求报文源地址是DIP,因此只需响应给DIP;但Direct还需将其发给Client
  • 请求和响应报文都经过Direct
  • 相对NAT模式,可更好实现LVS和RS间跨VLAN通讯
  • 支持端口映射

各个工作模式总结比较

NATTUNDR
RS服务器系统任意支持隧道支持Non-arp
RS服务器网络私有网络局域网/广域网局域网
RS服务器数量10-20100100
RS服务器网关负载均衡器自身的路由自身路由
优点端口转换广域网性能最好
缺点Direct易成为瓶颈支持隧道

不支持跨网段

效率一般最高

调试算法

根据其调度时是否考虑各个RS当前的负载状态分为两种:静态方法和动态方法

静态算法

仅根据算法本身进行调度

  • RR:roundrobin,轮询
  • WRR:Weighted RR,加权轮询
  • SH:Source Hashing,实现session sticky,源IP地址hash;将来自同一个IP地址的请求始终发往第一次挑中的RS,从而实现会话绑定
  • DH:Destination Hashing;目标地址hash,第一次轮询调度至RS,后续将发往同一个目标地址的请求始终转发给第一次挑中的RS,典型使用场景是正向代理缓存场景中的负载均衡,如Web缓存

动态算法

主要根据每个RS当前的负载状态以及调度算法进行调度Overhead=value,较小的RS将被调度

  • LC:least connections,适用于长链接应用
    • Overhead=activeconns*256+inactiveconns
  • WLC:Weight LC,默认调度方法
    • Overhead=(activeconns*256+inactiveconns)/weight
  • SED:Shortest Exception Delay,初始连接权重高优先,只检查活动连接,而不考虑非活动连接
    • Overhead=(activeconns+1)*256/weight
  • NQ:Never Queue,第一轮均匀分配,后续SED
  • LBLC:Locality—Based LC,动态DH算法,使用场景:根据负载状态实现正向代理,实现Web Cache等
  • LBLCR:LBLC with Replications,带复制功能的LBLC,解决LBLC负载不均衡问题,从负载重的复制到负载轻的RS,实现Web Cache等

内核版本4.15后新增调度算法

FO (Weighted Fail Over)调度算法,在此FO算法中,遍历虚拟服务所关联的真实服务器链表,找到还
未过载(未设置IP_ _VS_ DEST_ F_ OVERLOAD标志)的且权重最高的真实服务器,进行调度

OVF (Overflow-connection) 调度算法,基于真实服务器的活动连接数量和权重值实现。将新连接调度到权重值最高的真实服务器,直到其活动连接数量超过权重值,之后调度到下一-个权重值最高的真实服务器,在此OVF算法中,遍历虚拟服务相关联的真实服务器链表,找到权重值最高的可用真实服务器。

一个可用的真实服务器需要同时满足以下条件: 

  • 未过载(未设置IP_ VS_ DEST_ F_ OVERLOAD标志)
  • 真实服务器当前的活动连接数量小于其权重值
  • 其权重值不为零

相关软件

程序包:ipvsadm

Unit File: ipvsadm.service

主程序: /usr/sbin/ipvsadm

规则保存工具: /usr/sbin/ipvsadm-save

规则重载工具: /usr/sbin/ipvsadm-restore

配置文件: /etc/sysconfig/ipvsadm-config

ipvs调度规则文件: /etc/sysconfig/ipvsadm

ipvsadm命令

管理集群服务

增加、修改

ipvsadm -A|E -t|u|f service-address [-s scheduler] [-p [timeout]]

-A:添加一个集群服务

-E:编辑一个集群服务

-t:TCP协议端口,VIP:TCP_Port

-u:UDP协议端口,VIP:UDP_Port

-f:firewalld Mark,标记,一个数字

-s scheduler:指定集群的调度算法,默认为WLC

-p:设置超时时间,开启后表示在指定时间内,来自同一个IP的请求都会转发到后端同一台真实服务器

删除

ipvsadm -D -t|u|f service-address

管理集群上的RS

增加、修改

ipvsadm -a|e -t|u|f service-address -r service-address [-g|i|m] [-w weight]

-a:添加一个真实服务器

-e:编辑一个真实服务器

-g:gateway,dr类型,默认

-i:ipip,tun类型

-m:masquerade,nat类型

-w:weight,权重

删除

ipvsadm -d -t|u|f service-address -r service-address

清空定义的所有内容

ipvsadm -C

清空计数器

ipvsadm -Z [-t|u|f service-address]

查看

ipvsadm -L|l [options]

options:

--numeric,-n:以数字形式输出地址和端口

--exact:拓展信息

--connection,-c:当前IPVS连接输出

--state:统计信息

--rate:输出速率信息

ipvs规则

/proc/net/ip_vs

ipvs连接

/proc/net/ip_vs_conn

保存:建议保存至/etc/sysconfig/ipvsadm

ipvsadm-save > 路径

ipvsadm -S > 路径

systemctl stop ipvsadm.service  #会自动保存规则到/etc/sysconfig/ipvsadm

重载

ipvsadm-restore < 路径

systemctl start ipvsadm.service  #会自动加载/etc/sysconfig/ipvsadm的规则

#查看内核支持LVS信息
[root@wenzi ~]#grep -i -C 10 ipvs /boot/config-4.18.0-193.el8.x86_64
...
# IPVS transport protocol load balancing support
#支持的协议
CONFIG_IP_VS_PROTO_TCP=y
CONFIG_IP_VS_PROTO_UDP=y
CONFIG_IP_VS_PROTO_AH_ESP=y
CONFIG_IP_VS_PROTO_ESP=y
CONFIG_IP_VS_PROTO_AH=y
CONFIG_IP_VS_PROTO_SCTP=y

# IPVS scheduler
#调度算法
CONFIG_IP_VS_RR=m
CONFIG_IP_VS_WRR=m
CONFIG_IP_VS_LC=m
CONFIG_IP_VS_WLC=m
CONFIG_IP_VS_FO=m
CONFIG_IP_VS_OVF=m
CONFIG_IP_VS_LBLC=m
CONFIG_IP_VS_LBLCR=m
CONFIG_IP_VS_DH=m
CONFIG_IP_VS_SH=m
# CONFIG_IP_VS_MH is not set
CONFIG_IP_VS_SED=m
CONFIG_IP_VS_NQ=m

# IPVS SH scheduler
CONFIG_IP_VS_SH_TAB_BITS=8

# IPVS MH scheduler
CONFIG_IP_VS_MH_TAB_INDEX=12
...

NAT实验

主机名IPGW
Client192.168.10.11/24
LVS

192.168.10.12/24

192.168.20.1/24

RS1192.168.20.21/24192.168.20.1
RS2192.168.20.22/24192.168.20.1

RS1和RS2安装httpd,作为测试LVS效果

 

 LVS安装ipvsadm

#LVS主机安装ipvsadm
yum -y install ipvsadm


#查看是否开启ipv4转发功能,0是没有开启,1是开启
sysctl net.ipv4.ip_forward
#开启ipv4转发功能
vim /etc/sysctl.conf
net.ipv4.ip_forward=1
#使配置生效
sysctl -p

#配置LVS负载均衡策略  

# -A指定VIP,-t指定TCP,-s指定调度算法rr

ipvsadm -A -t 192.168.10.12:80 -s rr

# -a指定真实服务器,-t指定TCP,-m指nat模式

ipvsadm -a -t 192.168.10.12:80 -r 192.168.20.21:80 -m

ipvsadm -a -t 192.168.10.12:80 -r 192.168.20.22:80 -m

#查看已配置的策略

ipvsadm -Ln

 

 从Client主机访问LVS

DR实验

主机名IPGW
Client192.168.10.11/24192.168.10.1
Router

192.168.10.1/24

192.168.29.141/24

LVS

lo:VIP:192.168.29.100/32

192.168.29.142/24

192.168.29.141/24
RS1

lo:VIP:192.168.29.100/32

192.168.29.143/24

192.168.29.141/24
RS2

lo:VIP:192.168.29.100/32

192.168.29.149/24

192.168.29.141/24

 路由器Router

#开启ipv4路由转发功能

[root@wenzi ~]#echo "net.ipv4.ip_forward"  >> /etc/sysctl.conf

 RS1

[root@RS1 ~]#yum -y install httpd

[root@RS1 ~]#echo "web1" > /var/www/html/index.html

[root@RS1 ~]#echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
[root@RS1 ~]#echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
[root@RS1 ~]#echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
[root@RS1 ~]#echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce

#在lo口配置VIP
[root@RS1 ~]#ifconfig lo:1 192.168.29.100/32
[root@RS1 ~]#ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet 192.168.29.100/0 scope global lo:1
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 00:0c:29:05:13:8b brd ff:ff:ff:ff:ff:ff
    inet 192.168.29.143/24 brd 192.168.29.255 scope global noprefixroute ens160
       valid_lft forever preferred_lft forever
    inet6 fe80::5433:5ac9:62bb:cf34/64 scope link noprefixroute
       valid_lft forever preferred_lft forever

RS2

[root@RS1 ~]#yum -y install httpd

[root@RS1 ~]#echo "web2" > /var/www/html/index.html

[root@RS1 ~]#echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
[root@RS1 ~]#echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
[root@RS1 ~]#echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
[root@RS1 ~]#echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce

#在lo口配置VIP
[root@RS1 ~]#ifconfig lo:1 192.168.29.100/32

[root@RS2 ~]#ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet 192.168.29.100/0 scope global lo:1
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 00:0c:29:2b:af:56 brd ff:ff:ff:ff:ff:ff
    inet 192.168.29.149/24 brd 192.168.29.255 scope global noprefixroute ens160
       valid_lft forever preferred_lft forever
    inet6 fe80::10a:4a5a:dfca:7a85/64 scope link noprefixroute
       valid_lft forever preferred_lft forever

LVS

#在lo口配置VIP

[root@LVS ~]#ifconfig lo:1 192.168.29.100/32

[root@LVS ~]#ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet 192.168.29.100/0 scope global lo:1
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 00:0c:29:ea:07:84 brd ff:ff:ff:ff:ff:ff
    inet 192.168.29.142/24 brd 192.168.29.255 scope global noprefixroute ens160
       valid_lft forever preferred_lft forever
    inet6 fe80::9648:92b:c378:fddf/64 scope link noprefixroute
       valid_lft forever preferred_lft forever

[root@LVS ~]#ipvsadm -A -t 192.168.29.100:80 -s rr
[root@LVS ~]#ipvsadm -a -t 192.168.29.100:80 -r 192.168.29.143 -g
[root@LVS ~]#ipvsadm -a -t 192.168.29.100:80 -r 192.168.29.149 -g

[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.29.100:80 rr
  -> 192.168.29.143:80            Route   1      0          0         
  -> 192.168.29.149:80            Route   1      0          0   

客户端测试

LVS高可用实现

LVS不可用时

Director不可用时,整个系统将不可用;

解决方案:

高可用,Keepalived、heartbeat/corosync

RS不可用时

某个RS不可用时,Director依然会调度请求至此RS

解决方案:

由Director对各个RS健康状态进行检查,失败时禁用,成功时启用。

Keepalived、heartbeat/corosync、Idirectord。

检测方式:icmp(网络层)、端口检测(传输层)、请求某关键资源(应用层)

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

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

相关文章

用Python采集电商平台商品数据进行可视化分析

目录标题 前言环境使用:模块使用:基本流程思路:代码展示获取数据扩展知识数据可视化 尾语 前言 嗨喽~大家好呀&#xff0c;这里是魔王呐 ❤ ~! 环境使用: python 3.8 解释器 pycharm 编辑器 模块使用: 第三方模块 需要安装 requests —> 发送 HTTP请求 内置模块 不需…

嵌入式处理器常用存储介质

一、存储器 二、XIP设备 XIP(excute in place)&#xff0c;本地执行。像上述nor flash这种设备&#xff0c;上电后不需要初始化&#xff0c;CPU通过地址总线和数据总线直连的&#xff0c;可以直接访问并取址执行&#xff0c;称之为XIP设备。 像emmc这种&#xff0c;在SOC内部有…

JVM打印GC信息

-XX:PrintGCDetails 一、代码 public class GcDemo {public static void main(String[] args) {Object obj new Object();obj null;System.gc();} } 二、配置 三、测试 [GC (System.gc()) [PSYoungGen: 5242K->872K(152576K)] 5242K->880K(500736K), 0.0011529 sec…

如何使用 Amazon Systems Manager 集中管理 Amazon IoT Greengrass 设备

对于边缘设备管理员来说&#xff0c;远程管理大量不同的系统和应用程序会是一项富有挑战性的任务。Amazon IoT Greengrass 可帮助这些系统管理员管理其边缘设备应用程序堆栈。不过&#xff0c;这些设备上的系统软件必须通过与其大型 IT 企业的运营策略一致的运营策略来单独更新…

文件共享服务器

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 目录 前言 一、概述 二、FTP连接类型 三、端口 四、工作模式 五、安装配置 1、 服务名 2、主配置文件 3、 用户控制文件 4、 用户验证类型 5、 安装 6、 匿名用户验证 7、本…

python操作Elasticsearch数据库

Elasticsearch&#xff08;ES&#xff09;,ES是一个开源的高扩展的分布式全站搜索引擎&#xff0c;是整个Elastic Stack技术栈的核心。它可以近乎实时的存储、检索数据&#xff1b;本身扩展性很好&#xff0c;可以扩展到上百台服务器&#xff0c;处理PB级别的数据。 安装好ES之…

go mod 设置国内源 windows 环境 win10

启用 go module 功能 go env -w GO111MODULEon 配置 goproxy 变量 go env -w GOPROXYhttps://goproxy.cn,direct 下载包就行了&#xff0c;速度飞快 go mod tidy 检测 goproxy 是否配置好 运行 go env | findstr goproxy 查看 goproxy Go module 从 Go v1.12 版本开始存在&a…

springboot3+vue3 前后端分离项目模板

更好的阅读体验 \color{red}{更好的阅读体验} 更好的阅读体验 项目地址 功能简介-视频演示 功能概要 支持登录和注册功能。支持密码找回和邮箱验证。支持“记住我”功能。包含完整的上述功能的基础页面。 登录功能 支持“用户名/密码”登录。登录可选“记住我”&#xff0c;勾…

域名+云服务器+springBoo:怎样零成本进行云服务器的学习

零成本进行云服务器的学习 1.项目开发需要学习云服务器的使用 2.申请域名 为了让服务器运行我的springBoot项目&#xff0c;我们首先需要一个域名&#xff0c;很多网站提供免费域名的使用申请&#xff0c;我在阿里云上申请了一年域名的体验。 3.将域名绑定到三丰云&#xff0c…

WCF的IIS宿主部署

IIS的web服务开启网上已经很多&#xff0c;不再赘述。 关键点&#xff1a;WCF发布的文件夹要加上IIS的权限能够读取。否则报没有权限。

动态规划——删除并获得点数

题目链接 leetcode在线oj题——删除并获得点数 题目描述 给你一个整数数组 nums &#xff0c;你可以对它进行一些操作。 每次操作中&#xff0c;选择任意一个 nums[i] &#xff0c;删除它并获得 nums[i] 的点数。之后&#xff0c;你必须删除 所有 等于 nums[i] - 1 和 nums…

SQL性能分析——执行频率、慢查询日志、profile详情

1.SQL的执行频率 2.慢查询日志 show variables like slow_query_log;修改完成以后&#xff0c;再次查询以后发现&#xff0c;slow_query_log的开关时开着的。 3.profile详情

BGP实验--联邦

1&#xff0c;AS1存在两个环回&#xff0c;一个地址为192.168.1.0/24 该地址不嫩在任何协议中宣告 AS3中存在两个环回&#xff0c;一个地址为192.168.2.0/24该地址不能再任何协议中宣告&#xff0c;最终要求这两个环回可用互相通讯 AS1中的另一个环回为10.0.0.0 24&#…

在 Linux 系统上下载 Android SDK

使用ubuntu系统进行车机开发&#xff0c;今天开始配置环境&#xff0c;首先是下载android studio&#xff0c;然后下载android sdk&#xff0c;这里需要注意的是linux系统不能使用windows系统下的Android sdk&#xff0c;亲测会出现各种问题。 常规思路&#xff0c;下载sdk&am…

【前端知识】JavaScript——<script>的8个属性

【前端知识】JavaScript——<script>的8个属性 <script>元素的8个属性&#xff1a; 属性释义async表示应该立即开始下载脚本&#xff0c;但不能阻止其他页面动作&#xff0c;比如下载资源或等待其他脚本加载。只对外部脚本文件有效。charset使用 src 属性指定的代…

力扣 134. 加油站

题目来源&#xff1a;https://leetcode.cn/problems/gas-station/description/ C题解1&#xff1a; 感觉也属于暴力&#xff0c;有一点点简化。在汽油获得总量小于消耗总量时直接返回-1&#xff0c;对于出发的加油站编号&#xff0c;其当前站的汽油净获得量一定大于等于0&#…

【严重】Grafana Azure AD环境身份认证绕过漏洞

漏洞描述 Grafana 是一个跨平台、开源的数据可视化网络应用平台。Azure AD 是由微软提供的一种云身份验证和访问管理服务。 在 Azure AD 中&#xff0c;多个用户可以拥有相同的电子邮件地址。攻击者可以创建一个与目标 Grafana 账户相同的电子邮件地址的恶意帐户&#xff0c;并…

Java IO流的使用

IO流概述 Java.io 包几乎包含了所有操作输入、输出需要的类。所有这些流类代表了输入源和输出目标。一个流可以理解为一个数据的序列。输入流表示从一个源读取数据&#xff0c;输出流表示向一个目标写数据。 Java.io 包中的流支持很多种格式&#xff0c;比如&#xff1a;基本…

SQLite数据库介绍以及安装

SQLite简介 轻量化&#xff0c;易用的嵌入式数据库&#xff0c;用于设备端的数据管理&#xff0c;可以理解成单点的数据库。传统服务器型数据 库用于管理多端设备&#xff0c;更加复杂 SQLite是一个无服务器的数据库&#xff0c;是自包含的。这也称为嵌入式数据库&#xff0c…

栈--C语言实现数据结构

本期带大家一起用C语言实现栈&#x1f308;&#x1f308;&#x1f308; 一、栈的概念&#x1f30e; 栈是一种常见的数据结构&#xff0c;它遵循后进先出&#xff08;Last In, First Out&#xff09;的原则。可以将其类比为现实生活中的一摞书或者一叠盘子。 栈由一个连续的内…