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

构建高性能Linux Virtual Server(LVS)集群

目录

引言

一、集群的基本理论

(一)什么是集群

(二)集群的分类

(三)LB Cluster 负载均衡集群

1.按实现方式划分

2.按协议层划分

(四)HA 高可用集群实现

二、LVS简介

(一)什么是LVS

(二)LVS工作原理

(三)LVS集群类型中的术语

三、LVS工作模式及相关命令

(一)工作模式

1.NAT 模式

2.DR直接路由模式

3.TUN隧道模式

(二)调试算法

(三)ipvsadm 工具

四、NAT模式 LVS负载均衡部署

       (一)配置NFS服务器

1.建立共享文件

2.共享目录

(二)配置网关服务器

1.下载ipvsadm服务

2.添加网卡

3.开启路由转发

4.设置ipvsadm策略

(三)配置服务器

(四)配置公网客户端

五、DR模式部署

(一)原理讲解

(二)配置DR服务器

1.配置虚拟VIP

2.调整/proc响应参数

3.配置ipvsadm规则

(三)配置web服务

1.启用web服务

2.添加虚拟IP

3.调整内核参数

4.web服务器2配置与web服务器1相同


引言

在当今互联网服务环境中,高并发、高可用是衡量系统性能和稳定性的关键指标。为了应对海量请求和实现系统的稳定性,负载均衡技术成为不可或缺的一环。其中,Linux Virtual Server(LVS)作为基于Linux内核的开源负载均衡解决方案,凭借其高效能与灵活配置的特点,在众多场景下得到广泛应用。接下来,我们将深入探讨如何构建一个LVS集群

一、集群的基本理论

(一)什么是集群

人群或事物聚集:在日常用语中,群集指的是一大群人或事物密集地聚在一起。例如,“人们群集在广场上”,这里的“群集”是指大量人群聚集的现象。

计算机技术中的集群:在计算机科学和信息技术领域,群集(Cluster)通常指的是多个独立的计算机系统通过网络连接起来协同工作,共同提供服务或者执行计算任务的一种技术架构。

这种群集可以实现负载均衡、高可用性、高性能计算等功能。

(二)集群的分类

负载均衡集群(LB Cluster):负载均衡是一种分布式计算技术,旨在通过一个或多个负载均衡器将网络流量和计算任务分配到后端的一组服务器上。这样,每个服务器只需处理一部分请求,避免了单个服务器过载,并且能够实现服务的水平扩展。在LVS集群中,Director节点就承担了负载均衡的角色。

高可用性集群(HA Cluster):高可用性是指系统设计的一种目标,即确保在正常运行期间尽可能减少服务中断时间,并在发生故障时快速恢复服务的能力。通过冗余硬件、软件和网络配置以及故障转移策略(如主备切换),可以消除SPOF(Single Point Of Failure,单点故障),提高系统的整体可用性。在LVS集群中,使用Heartbeat或keepalived等工具可以实现Director节点之间的高可用切换。

高性能计算集群(HPC Cluster):高性能计算指的是利用并行计算技术和超级计算机系统,解决科学、工程、商业等领域中的大规模复杂问题。HPC系统通常包括大量处理器核心、高速互连网络、高效存储系统以及针对特定应用优化的软件栈。虽然LVS主要用于负载均衡和服务分发,但它也可以作为构建HPC环境的一部分,例如在某些情况下用于管理和调度分散在网络中的计算资源。然而,LVS本身并不直接提供高性能计算功能,而是为高性能计算环境提供了更好的基础设施支持。

(三)LB Cluster 负载均衡集群

1.按实现方式划分

硬件:F5 Big-IP(F5服务器负载均衡模块)

软件:

lvs:Linux Virtual Server

nginx:支持七层调度

haproxy:支持七层调度

ats:Apache Traffic Server

2.按协议层划分

传输层(通用):DNAT 和 DPORT

LVS:

nginx:stream

haproxy:mode tcp

应用层(专用):针对特定协议,常称为 proxy server

http:nginx, httpd, haproxy(mode http), ...

fastcgi:nginx, httpd, ...

mysql:mysql-proxy, mycat...

(四)HA 高可用集群实现

keepalived:vrrp协议

Ais:应用接口规范

heartbeat

cman+rgmanager(RHCS)

coresync_pacemaker

二、LVS简介

(一)什么是LVS

LVS群集(Linux Virtual Server Cluster)是一种基于Linux操作系统内核的高性能、高可用网络服务负载均衡解决方案。它利用Linux内核的IP虚拟服务器(IPVS)模块,将一组物理服务器构成一个逻辑上的、单一且透明的高性能虚拟服务器集群。

(二)LVS工作原理

Linux Virtual Server(LVS)工作原理基于网络层(四层,传输层)的负载均衡技术,它通过内核级别的IP虚拟服务器(IPVS)模块实现透明的流量分发

架构组成

Director(负载均衡器/调度器):作为集群的前端入口节点,接收所有来自客户端的请求,并根据预设的策略将请求转发至后端服务器。

Real Server(真实服务器):一组实际提供服务的服务器,负责处理从Director转发过来的请求,并将响应数据返回给客户端。

(三)LVS集群类型中的术语

VS
'虚拟(代理)服务器。在LVS(Linux Virtual Server)负载均衡技术中,虚拟(代理)服务器是指
通过集群系统对外提供服务的逻辑实体,其IP地址通常被称为VIP(Virtual IP)'RS
'真实服务器,是指参与LVS集群提供服务的一组物理或虚拟服务器。它们负责处理由Director转发
过来的客户端请求,并将响应数据返回给客户端'CIP
'客户端IP地址,指请求LVS服务的客户端设备的网络IP地址。在某些情况下,可能需要在调度策略
或会话保持中考虑客户端IP以实现特定的功能需求。'VIP
'虚拟IP地址,它是LVS集群对外提供的统一服务地址。客户端通过访问VIP来请求服务,而实际的请
求会被透明地分发到后端的Real Server上'DIP
'Director IP地址,即负载均衡器的IP地址。在LVS架构中,Director节点也被称为负载均衡器,
它接收并根据预设策略分发客户端请求至后端的Real Server。'RIP
'真实服务器IP地址,是指集群内各个Real Server各自的实际网络IP地址,这些服务器将直接处
理从Director节点转发过来的客户端请求。'

访问流程大体为

CIP访问VIP---->VIP进行调用转换发送给DIP----->DIP将请求交给真实服务器DIP----->DIP返还数据包交给DIP---->DIP将数据包交给客户端

根据不同的工作模式,访问的具体流程也不一样

三、LVS工作模式及相关命令

(一)工作模式

1.NAT 模式

在NAT(Network Address Translation) 模式下,客户端请求首先到达Director(负载均衡器,即LVS),Director将请求的目标IP地址修改为选定的Real Server的IP地址,并转发给Real Server。当Real Server处理完请求并返回响应时,响应包会发回给Director,Director再将其源IP地址更改为VIP(虚拟IP地址),然后将响应发送给客户端。这种方式下,Director节点承担了所有网络地址转换的工作,但其自身的网络性能可能会成为瓶颈。

NAT模式访问过程基本为

①客户端请求

客户端发起请求至服务集群的VIP(Virtual IP)

②Director处理

请求首先到达负载均衡器(Director),Director节点内核中的IPVS模块根据预设的调度算法选择一个后端Real Server。

③修改包信息转发

Director将客户端请求的目标IP地址从VIP更改为所选Real Server的实际IP地址,并且源IP地址也由客户端IP变为Director自己的IP地址(DNAT)。

④Real Server响应

请求被转发给选定的Real Server进行处理,Real Server处理完成后直接将响应发回给Director。

⑤再次修改包信息返回客户端

当Director接收到Real Server的响应时,它会重新更改响应报文的源IP地址为VIP,目标IP地址恢复为客户端IP地址(SNAT),然后将响应发送给客户端。

2.DR直接路由模式

在DR (Direct Routing) 模式中,Director并不修改数据包的内容,而是更改数据包的MAC地址信息,使得请求能够直接被送到指定的Real Server。这样,Real Server可以直接响应客户端,而无需经过Director再次转发。这种模式下,Director和Real Server必须在同一物理网络中,并且Director需要通过ARP代理来管理VIP在局域网中的MAC地址映射关系。

①客户端请求

客户端发起请求至服务集群的VIP(Virtual IP)

②Director节点处理

请求首先到达前端的Director节点,Director节点上的内核模块IPVS根据预设的调度算法选择一个合适的后端真实服务器(Real Server)。

③MAC地址修改转发

在DR模式下,Director不改变数据包的目标IP地址(仍为VIP),而是修改其MAC地址,将数据包的MAC地址更改为所选Real Server的MAC地址。这样,当数据包在网络中传播时,会直接被送到指定的Real Server,而不是再次经过Director。

④Real Server响应

Real Server收到请求后进行正常的业务处理,并将响应直接返回给客户端,响应报文中的源IP仍然是VIP,目标IP是客户端的IP地址。

⑤网络层透明传输

因为在整个过程中,客户端始终认为它是在与VIP通信,所以对于客户端而言,整个过程是完全透明的,从而实现了负载均衡的效果。

在DR模式下,Director和Real Server需要位于同一物理网络中,通常还需要启用ARP代理或者IP伪装功能来确保网络设备正确地将VIP的MAC地址映射到Director节点上,以便能将请求定向到正确的Real Server。

其特点为:

Director和各RS都配置有VIP

确保前端路由器将目标IP为VIP的请求报文发往Director

RS和Director要在同一个物理网络

请求报文要经由Director,但响应报文不经由Director,而由RS直接发往Client

不支持端口映射(端口不能修改)

客户端获取Director(LVS)的MAC地址

由于Director与真实服务器都设置了相同的VIP地址,为防止IP冲突,需要关闭服务端的ARP响应

路由器发起ARP广播,只有Director回复,从而获取Director的MAC地址

优点

负载均衡器只负责将请求包分发给后端节点服务器,而RS将应答包直接发给用户。所以,减少了负载均衡器的大量数据流动,负载均衡器不再是系统的瓶颈,也能处理很巨大的请求量。

缺点

需要负载均衡器与真实服务器RS都有一块网卡连接到同一物理网段上,必须在同一个局域网环境。

3.TUN隧道模式

原理:首先负载均衡器接收到客户的请求数据包时,根据调度算法决定将请求发送给哪个后端的真实服务器(RS)。然后负载均衡器就把客户端发送的请求报文封装一层IP隧道(T-IP)转发到真实服务器(RS)。真实服务器响应完请求后,查看默认路由,把响应后的数据包直接发送给客户端,不需要经过负载均衡器。

优点:负载均衡器只负责将请求包分发给后端节点服务器,而RS将应答包直接发给用户。所以,减少了负载均衡器的大量数据流动,负载均衡器不再是系统的瓶颈,也能处理很巨大的请求量。

缺点:隧道模式的RS节点需要合法IP,这种方式需要所有的服务器支持“IP Tunneling"。

NFSTUNDR
优点端口转换WAN性能最好
缺点性能瓶颈服务器支持隧道模式不支持跨网段
真实服务器要求anyTunnelingNon-arp device
支持网络private(私网)LAN/WAN(私网/公网)LAN(私网)
真实服务器数量low (10~20)High (100)High (100)
真实服务器网关lvs内网地址Own router(网工定义)Own router(网工定义)

(二)调试算法

ipvs scheduler:根据其调度时是否考虑各RS当前的负载状态

分为两种:静态方法和动态方法

仅根据算法本身进行调度

静态

RR:roundrobin,轮询,较常用

WRR:Weighted RR,加权轮询,较常用

SH:Source Hashing,实现session sticky,源IP地址hash;将来自于同一个IP地址的请求始终发往第一次挑中的RS,从而实现会话绑定

DH:Destination Hashing;目标地址哈希,第一次轮询调度至RS,后续将发往同一个目标地址的请求始终转发至第一次挑中的RS,典型使用场景是正向代理缓存场景中的负载均衡,如: Web缓存

动态

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

LC:least connections 适用于长连接应用

算法为:Overhead=activeconns*256+inactiveconns

WLC:Weighted LC,默认调度方法,较常用

算法为:Overhead=(activeconns*256+inactiveconns)/weight

SED:Shortest Expection Delay,初始连接高权重优先,只检查活动连接,而不考虑非活动连接

算法为:Overhead=(activeconns+1)*256/weight

NQ:Never Queue,第一轮均匀分配,后续SED

LBLC:Locality-Based LC,动态的DH算法,使用场景:根据负载状态实现正向代理,实现Web Cache等

LBLCR:LBLC with Replication,带复制功能的LBLC,解决LBLC负载不均衡问题,从负载重的复制到负载轻的RS,,实现Web Cache等

(三)ipvsadm 工具

ipvsadm工具 是Linux中用于管理IPVS(IP Virtual Server)负载均衡服务的核心工具。IPVS是Linux内核中的一种虚拟服务器实现,它允许将一组物理服务器集群作为单一的、逻辑上的高性能和高可用虚拟服务器对外提供服务。

ipvsadm工具的主要功能包括:

1.添加和删除服务

-A 参数用于在内核中添加新的虚拟服务器。
-D 参数用于删除已存在的虚拟服务器配置。

2.设置调度算法

使用 -s 参数可以指定虚拟服务器使用的负载均衡调度算法,如轮询(rr)、加权轮询(wrr)、最少连接(lc)、加权最少连接(wlc)等。

-w: 设置权重(权重为0时表示暂停节点)

3.添加和删除后端真实服务器

-a 参数用于向现有虚拟服务器添加真实服务器。
-d 参数用于从虚拟服务器中删除指定的真实服务器。

4.查看当前配置

-L 或 --list 参数用于显示当前所有的IPVS规则和服务定义。

5.持久化保存和恢复规则

-S  用于保存当前所有IPVS规则到标准输出或文件。
-R  则可以从之前保存的规则文件中恢复IPVS规则。

6.LVS伪装类型

-m  表示使用NAT群集模式
-g   表示使用DR模式
-i    表示使用TUN模式

7.指定端口

-t: 指定VIP地址及TCP端口
-r: 指定RIP地址及TCP端口

通过ipvsadm工具,管理员可以方便地创建、修改和监控基于LVS的负载均衡系统,并根据业务需求调整流量分发策略,从而确保整个集群系统的稳定性和高效运行。

四、NAT模式 LVS负载均衡部署

           外网客户端                12.0.0.1
           web服务器1                192.168.83.20
           web服务器2                192.168.83.30
           网关服务器

                192.168.83.40

                12.0.0.10

           NFS服务器                192.168.83.50

(一)配置NFS服务器

1.建立共享文件

首先在NFS服务器上建议共享文件与目录

如果没有安装nfs、rpcbind。执行下面这条命令进行安装

yum install nfs-utils rpcbind -y

安装完毕之后,构建挂载目录与访问数据

2.共享目录

编辑/etc/exports文件,语法格式为:共享目录路径   可以访问的IP地址(权限)

例如指定一个地址对共享目录有读写权限,文件内容可编辑为:/nfs   192.168.83.30(rw)

编写完文件后开启服务

systemctl start  nfs
systemctl start  rpcbind

如果服务已经开启,执行:exportfs -r  刷新文件

(二)配置网关服务器

1.下载ipvsadm服务

首先安装ipvsadm服务:yum install ipvsadm.x86_64 -y

安装完之后直接启动服务会报错,因为找不到/etc/sysconfig/ipvsadm文件。

这是一个配置信息文件,需要手动生成,使用ipvsadm-save命令

2.添加网卡

网关服务器准备两块网卡,分别设置一个公网IP地址与私网IP地址,并将网关设置为自己

重启网卡后,使用route -n命令查看网关是否生效

3.开启路由转发

在/etc/sysctl.conf文件中添加net.ipv4.ip_forward = 1

4.设置ipvsadm策略

首先清空ipvsadm策略:ipvsadm -C,使用ipvsadm -ln查看策略

添加策略

ipvsadm -A -t 12.0.0.10:80 -s rr'这条命令用于添加一个新的虚拟服务器(VIP),即在LVS中创建一个服务入口点。
-A 参数表示添加新的虚拟服务器,
-t 12.0.0.10:80 表示VIP地址和端口是12.0.0.10上的TCP 80端口。
-s rr 表示使用轮询(Round Robin)调度算法进行负载均衡,即请求会按顺序依次分发到后端服务器。'ipvsadm -a -t 12.0.0.10:80 -r 192.168.83.20:80 -m'这条命令用于将一个真实服务器添加到已有的虚拟服务器上。
-a 参数表示向已有虚拟服务器添加真实服务器记录,
-t 12.0.0.10:80 是指向已经创建好的VIP地址和端口,
-r 192.168.83.20:80 表示要添加的真实服务器地址和端口也是TCP 80端口。 
-m 参数表示采用NAT模式进行转发,这意味着来自客户端的请求将会被改写目标地址为真实的服务器地址'ipvsadm -a -t 12.0.0.10:80 -r 192.168.83.30:80 -m'同上一个'

(三)配置服务器

1.服务器1

首先使用showmount  -e命令查看NFS服务器共享情况

使用mount命令将共享目录挂载到web服务的站点目录下

将本机的网关设置为网关服务器的私网地址,并重启网卡生效

2.服务器2

查看NFS服务器共享目录

开启web服务并进行挂载

将本机的网关设置为网关服务器的私网地址,并重启网卡生效

(四)配置公网客户端

配置好模拟公网的IP地址及网关

在实际环境中基本上是无法设置公网的网关的,只能通过路由一次次转发到达

访问网关服务器

#LVS的负载调度算法有四种最常用的:轮询算法(rr)、加权轮询(wrr)、最少轮询(lc)、
#加权最少轮询(wlc)#创建虚拟服务器(注意:NAT模式要两块网卡,调度器的地址是外网口地址)
#群集的VIP地址为12.0.0.10,针对TCP 80端口提供负载分流服务,使用的轮询调度算法。
#对于负载均衡调度器来说,VIP必须是本机实际已启用的IP地址
ipvsadm -A -t 12.0.0.10:80 -s rr#选项 
'"-A"表示添加虚拟服务器,"-t"用来指定VIP地址及TCP端口,"-s"用来指定负载调度算法——rr、wrr、lc、wlc'#添加服务器节点
ipvsadm -a -t 12.0.0.10:80 -r 192.168.83.20:80 -m
ipvsadm -a -t 12.0.0.10:80 -r 192.168.83.20:80 -m'选项 
"-a"表示添加真实服务器
"-t"用来指定VIP地址及TCP端口
"-r"用来指定RIP地址及TCP端口
"-m"表示使用NAT群集模式("-g"是DR模式,"-i"是TUN模式)
{ -m参数后面还可以跟-w的参数,这里没有做的"-w"用来设置权重(权重为0时表示暂停节点)}'#删除服务器节点
ipvsadm -d -r 192.168.83.20:80 -t 12.0.0.10:80'需要从服务器池中删除某一个节点时,使用选项"-d"。
执行删除操作必须指定目标对象,包括节点地址、虚拟IP地址。
如上所示的操作将会删除LVS群集12.0.0.10:80中的节点192.168.83.20:80若需要删除整个虚拟服务器时,使用选项-D并指定虚拟IP地址即可,无需要指定节点。
例如:“ipvsadm -D -t 12.0.0.10:80",则删除此虚拟服务器。'ipvsadm -l	#查看节点状态,加个"-n"将以数字形式显示地址、端口信息
ipvsadm-save  > /etc/sysconfig/ipvsadm	#保存策略#使用导出/导入工具ipvsadm-save/ipvsadm-restore可以保存、恢复LVS策略,
#方法类似于iptables的规则的导出、导入

五、DR模式部署

环境部署

C/SIP地址安装软件
DR服务器192.168.83.40;VIP:192.168.83.200ipvsadm
web服务器1192.168.83.60;VIP:192.168.83.200httpd
web服务器2192.168.83.100;VIP:192.168.83.200httpd
客户端192.168.83.30

(一)原理讲解

1.客户端发起请求,直接访问虚拟IP(VIP)

2.路由器发起ARP广播,获取调度服务器的MAC地址

3.LVS的调度器接受请求之后,根据算法选择一台后端的真实服务器,请求转发到后端真实服务器,把请求报文的目的MAC地址,修改成后端真实服务器的MAC地址,然后转发

4.后端真实F服务器接受请求,处理完成之后。由后端服务器直接把响应结果转发给客户端,响应报文中的目的MAC地址修改成客户端的MAC地址,直接把响应报文转发到客户端

VIP的作用:(设置相同的VIP地址)

1、标识后端的真实服务器

2、保证调度器和后端服务器之间的通信,保证请求可以正确的转发到后端服务器

3、实现高可用和故障转移

解决IP地址冲突问题

在真实服务器上修改内核参数,使真实服务器只对自己服务器上的真实IP地址响应ARP解析。

(二)配置DR服务器

下载ipvsdam工具:yum install ipvsadm.x86_64 -y

1.配置虚拟VIP

想要永久保存VIP,可以添加网卡,或写一个ens33:0的配置文件保存

添加虚拟网卡,注意子网掩码为32,表示该地址为一个固定地址

2.调整/proc响应参数

net.ipv4.ip_forward = 0
'这个参数用于控制IP转发功能。当其值为0时,表示关闭IP层的路由转发功能。这意味着系统不
会接受来自其他子网的流量并将其转发到另一个子网,通常在主机仅作为终端节点而不是路由器
或网关时设置。'net.ipv4.conf.all.send_redirects = 0
'这个参数控制是否发送ICMP重定向消息。当其值为0时,禁止所有接口(包括以后可能新增的)
发送ICMP重定向消息。ICMP重定向消息通常用于通知主机其发送数据包的目标路由可以直接到达
,无需通过当前网关。禁用此功能可以防止潜在的安全攻击,并且在某些网络架构中避免不必要的
重定向'net.ipv4.conf.default.send_redirects = 0
'类似于上一个参数,但作用于未来新建的接口。它将默认设置新创建的网络接口不发送ICMP重定向消息'net.ipv4.conf.ens33.send_redirects = 0
'此参数针对具体的网络接口“ens33”,确保该接口也不发送ICMP重定向消息'

3.配置ipvsadm规则

ipvsadm-save >/etc/sysconfig/ipvsadm  #生成配置信息文件
systemctl start ipvsadm.service              #启动服务

 

ipvsadm -A -t 192.168.83.200:80 -s rr
'这条命令创建了一个新的虚拟服务器(VIP),IP地址为192.168.83.200,监听端口为80并设置调度算
法为 rr(轮询),这意味着所有到这个VIP和端口的请求将按照轮询的方式被分发到后端的real Server'ipvsadm -a -t 192.168.83.200:80 -r 192.168.83.60:80 -g
'这条命令向刚才创建的虚拟服务器添加了一个真实服务器(real Server),其IP地址为192.168.83.60,监听的端口也是 80。参数 -g 表示使用 DR 模式,即直接路由模式,意味着请求
通过Director节点时不改变目标IP地址,仅修改MAC地址指向实际处理请求的真实服务器'ipvsadm -a -t 192.168.83.200:80 -r 192.168.83.100:80 -g
'类似地,这条命令添加了另一个真实服务器,IP地址为 192.168.83.100,同样以 DR 模式运行在端
口 80 上。这样,在此配置下,来自客户端对 VIP (192.168.83.200:80) 的请求将会被轮流分配给两
个真实服务器进行处理。'

(三)配置web服务

配置web服务器1

1.启用web服务

首先安装web服务:yum  install  httpd -y

启动服务并建立数据文件

2.添加虚拟IP

添加虚拟网卡,为回环口,与LVS调度服务器建立连接

3.调整内核参数

net.ipv4.conf.all.arp_ignore 和 net.ipv4.conf.default.arp_ignore
'设置为1表示节点将更严格地处理ARP请求。在某些情况下,系统不会响应非本地IP地址的ARP请求
这有助于防止IP地址冲突,并且可以用于LVS DR模式下的Director节点,以避免对外直接响应ARP请求'net.ipv4.conf.all.arp_announce 和 net.ipv4.conf.default.arp_announce
'设置为2表示节点在发送ARP应答时总是使用其主接口上的最具体的地址(即,优先级最高的源IP地址)
这同样对LVS DR模式很有用,确保Director节点在回应ARP请求时只使用VIP,而不是实际的物理接
口地址。'

4.web服务器2配置与web服务器1相同

使用客户端访问虚拟IP(VIP)

路由阶段有专门的网路工程师进行配置,从而实现从外网进行访问

隧道模式原理与DR模式大体相同,需要建立专门的VPN隧道

相关文章:

构建高性能Linux Virtual Server(LVS)集群

目录 引言 一、集群的基本理论 (一)什么是集群 (二)集群的分类 (三)LB Cluster 负载均衡集群 1.按实现方式划分 2.按协议层划分 (四)HA 高可用集群实现 二、LVS简介 &…...

Linux:线程的概念

个人主页 : 个人主页 个人专栏 : 《数据结构》 《C语言》《C》《Linux》 文章目录 前言一、线程的概念线程代码的简单示例 总结 前言 本文是对于线程概念的知识总结 一、线程的概念 在课本上,线程是比进程更轻量级的一种指向流 或 线程是在…...

如何在jupyter notebook 中下载第三方库

在anconda 中找到: Anaconda Prompt 进入页面后的样式: 在黑色框中输入: 下载第三方库的命令 第三方库: 三种输入方式 标准保证正确 pip instsall 包名 -i 镜像源地址 pip install pip 是 Python 包管理工具,…...

Linux下du命令和df命令的使用

du命令作用是估计文件系统的磁盘已使用量,常用于查看文件或目录所占磁盘容量。df命令是统计磁盘使用情况,可以用来查看磁盘已被使用多少空间和还剩余多少空间。du命令语法du [选项] [文件或目录名称]参数:-a:--all, 列…...

AIGC笔记--条件自回归Transformer的搭建

1--概述 1. 自回归 TransFormer 规定Token只能看到自身及前面的Token,因此需生成一个符合规定的Attention Mask;(代码提供了两种方式自回归Attention Mask的定义方式); 2. 使用Cross Attention实现条件模态和输入模态之…...

数据结构->链表分类与oj(题),带你提升代码好感

✅作者简介:大家好,我是橘橙黄又青,一个想要与大家共同进步的男人😉😉 🍎个人主页:橘橙黄又青-CSDN博客 1.🍎链表的分类 前面我们学过顺序表,顺序表问题: …...

unity-unity2d基础操作笔记(三)0.5.000

目标是:牢记以下137条操作,越级上升到中级阶段 unity-unity2d基础操作笔记(三) 一百零一、如何操作一个游戏物体由多个部分组成的动画一百零二、如何使用rigidbody 2d进行物体移动一百零三、获取游戏物体身上的组件方法一百零四、代码控制物体朝向一百零五、不使用插件,纯…...

【精华】AIGC启元2024

文章目录 AIGC 前沿(1) Gemini 1.5 Pro(2) Sora(3) EMO(4) Playground v2.5(5) VSP-LLM(6) Ideogram.ai(7) LTX studio AIGC 前沿 (1) Gemini 1.5 Pro 2024.02.16 谷歌新一代多模态大模型Gemini 1.5 Pro,在性能上超越OpenAI的GPT-4 Turbo,堪称业界最强…...

js对象解构语法

对象解构语法是一种 JavaScript 的语法特性,用于从对象中提取属性,并将这些属性值赋值给变量。 基本语法 const { property1, property2 } object;object 是要解构的对象。property1 和 property2 是对象中的属性名,用花括号 {} 包裹起来表…...

flowable使用taskService.addComment新增评论需要full_msg字段进行读取

背景 在构建创业项目JeecgFlow过程中,在调用taskService.addComment接口出现了异常。就是数据存储的Message信息出现了截取,也就是存储不完整。 效果如下. flowable版本6.7.2 问题排查 接口详解及问题代码 //新增评论的接口说明 Comment addComment(…...

java常用技术栈,java面试带答案

前言 我们从一个问题引入今天的主题。 在日常业务开发中,我们可能经常听到 DBA 对我们说“不要”(注意:不是禁止)使用 join,那么为什么 DBA 对 join 这么抵触呢?是 join 本身有问题,还是我们使…...

刷题第11天

代码随想录刷题第11天 | 二叉树前中后序遍历 前序遍历 /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), right(nullptr) {}* TreeNode(int x) : val(x…...

QML中动态增加表格数据

1.QML中的表格实现 import QtQuick 2.15 import QtQuick.Window 2.15import QtQuick.Controls 2.0 import Qt.labs.qmlmodels 1.0 import QtQuick.Layouts 1.15Window {width: 640height: 480visible: truetitle: qsTr("Hello World")TableModel{id:table_modelTabl…...

OBS插件开发(二)推流实时曲线

不发视频了,截个图算了,嫌麻烦 1,自定义QWidget图表绘制 ,动态更新 2,OBS直播帧率,码率监控 3,主要用于前端推流状况可视化,异常报警,及时性,无人值守直播...

Linux编程3.3 进程-进程的终止

1、正常终止 从main函数返回调用exit(标准C库函数)调用_exti或_Exit(系统调用)最后一个线程从其启动例程返回最后一个线程调用 pthread exit 2、异常终止 调用abort接受到一个信号并终止最后一个线程对取消请求做处理响应 3、进程返回 通常程序运行…...

排序(3)——直接选择排序

目录 直接选择排序 基本思想 整体思路(升序) 单趟 多趟 代码实现 特性总结 直接选择排序 基本思想 每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的…...

[LeetBook]【学习日记】数组内重组

题目:训练计划 I 训练计划 I 教练使用整数数组 actions 记录一系列核心肌群训练项目编号。为增强训练趣味性,需要将所有奇数编号训练项目调整至偶数编号训练项目之前。请将调整后的训练项目编号以数组形式返回。 示例 1: 输入:act…...

【Linux】磁盘情况、挂载,df -h无法看到的卷

文章目录 解决挂载、解决挂载完重启就消失1、查看linux下的硬盘挂载的空间、使用空间2、查看没有挂载的硬盘是否检测在系统中3、挂载 (挂载完,要在/etc/fstab 下面配置挂载信息 要不然重启挂载就消失了) 解决挂载、解决挂载完重启就消失 linu…...

AIOps实践中常见的挑战:故障根因与可观测性数据的割裂

运维的挑战与责任 在数字化时代,运维团队面临的挑战前所未有。他们不仅要确保系统的高可用性和高性能,还要快速响应并解决故障,以减少对业务的影响。在这种背景下,运维团队急需工具和技术,能够帮助他们提高效率&#…...

python 远程代码第一次推送

conda windows 环境 conda 安装后 配置环境变量 运行 conda init; conda active base 创建虚拟环境 conda create -n my_venv python3.9.5 虚拟环境应用 file-->New project --> Existing interpreter ... -->Virtualenv environment-->interpreter ...--&g…...

浅谈 React Hooks

React Hooks 是 React 16.8 引入的一组 API,用于在函数组件中使用 state 和其他 React 特性(例如生命周期方法、context 等)。Hooks 通过简洁的函数接口,解决了状态与 UI 的高度解耦,通过函数式编程范式实现更灵活 Rea…...

中南大学无人机智能体的全面评估!BEDI:用于评估无人机上具身智能体的综合性基准测试

作者:Mingning Guo, Mengwei Wu, Jiarun He, Shaoxian Li, Haifeng Li, Chao Tao单位:中南大学地球科学与信息物理学院论文标题:BEDI: A Comprehensive Benchmark for Evaluating Embodied Agents on UAVs论文链接:https://arxiv.…...

MySQL 知识小结(一)

一、my.cnf配置详解 我们知道安装MySQL有两种方式来安装咱们的MySQL数据库,分别是二进制安装编译数据库或者使用三方yum来进行安装,第三方yum的安装相对于二进制压缩包的安装更快捷,但是文件存放起来数据比较冗余,用二进制能够更好管理咱们M…...

uniapp 字符包含的相关方法

在uniapp中,如果你想检查一个字符串是否包含另一个子字符串,你可以使用JavaScript中的includes()方法或者indexOf()方法。这两种方法都可以达到目的,但它们在处理方式和返回值上有所不同。 使用includes()方法 includes()方法用于判断一个字…...

向量几何的二元性:叉乘模长与内积投影的深层联系

在数学与物理的空间世界中,向量运算构成了理解几何结构的基石。叉乘(外积)与点积(内积)作为向量代数的两大支柱,表面上呈现出截然不同的几何意义与代数形式,却在深层次上揭示了向量间相互作用的…...

React父子组件通信:Props怎么用?如何从父组件向子组件传递数据?

系列回顾: 在上一篇《React核心概念:State是什么?》中,我们学习了如何使用useState让一个组件拥有自己的内部数据(State),并通过一个计数器案例,实现了组件的自我更新。这很棒&#…...

【大厂机试题解法笔记】矩阵匹配

题目 从一个 N * M(N ≤ M)的矩阵中选出 N 个数,任意两个数字不能在同一行或同一列,求选出来的 N 个数中第 K 大的数字的最小值是多少。 输入描述 输入矩阵要求:1 ≤ K ≤ N ≤ M ≤ 150 输入格式 N M K N*M矩阵 输…...

从0开始学习R语言--Day17--Cox回归

Cox回归 在用医疗数据作分析时,最常见的是去预测某类病的患者的死亡率或预测他们的结局。但是我们得到的病人数据,往往会有很多的协变量,即使我们通过计算来减少指标对结果的影响,我们的数据中依然会有很多的协变量,且…...

Neo4j 完全指南:从入门到精通

第1章:Neo4j简介与图数据库基础 1.1 图数据库概述 传统关系型数据库与图数据库的对比图数据库的核心优势图数据库的应用场景 1.2 Neo4j的发展历史 Neo4j的起源与演进Neo4j的版本迭代Neo4j在图数据库领域的地位 1.3 图数据库的基本概念 节点(Node)与关系(Relat…...

VUE3 ref 和 useTemplateRef

使用ref来绑定和获取 页面 <headerNav ref"headerNavRef"></headerNav><div click"showRef" ref"buttonRef">refbutton</div>使用ref方法const后面的命名需要跟页面的ref值一样 const buttonRef ref(buttonRef) cons…...