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

ORACLE RAC的一些基本理论知识

一 . Oracle RAC 的发展历程

1. Oracle Parallel Server (OPS)
  • 早期阶段:Oracle 6 和 7

    • Oracle Parallel Server(OPS)是 Oracle RAC 的前身。

    • 通过多个实例并行访问同一个数据库来提高性能。

    • 共享磁盘架构,利用分布式锁管理(DLM)来管理并发访问。

    • OPS 存在复杂的锁定和同步问题,限制了其广泛应用。

2. Oracle 8i 和 9i
  • Oracle 8i

    • 引入了对集群数据库的基本支持,但 OPS 的并行处理和一致性问题仍然存在。

  • Oracle 9i (2001)

    • 正式引入 Oracle RAC,取代了 OPS。

    • 改进的全局缓存服务(GCS)和全局锁管理(GLM)解决了 OPS 的一致性问题。

    • 高可用性和故障转移功能得到显著增强。

    • 通过 Cache Fusion 技术实现节点之间的数据块传输,提高了性能和可扩展性。

3. Oracle 10g
  • Oracle 10g Release 1 (2003)

    • 引入 Automatic Storage Management(ASM)简化存储管理。

    • 改进的集群管理功能,包括 Oracle Clusterware。

    • 提供更好的负载均衡和故障检测机制。

  • Oracle 10g Release 2

    • 增强了 RAC 的稳定性和性能。

    • 引入更高级的负载均衡算法。

4. Oracle 11g
  • Oracle 11g Release 1 (2007)

    • 加强了自动化管理功能,包括自动内存管理和自动 SQL 调优。

    • 改进了高可用性功能,如 Data Guard 与 RAC 的集成。

  • Oracle 11g Release 2

    • 引入 Oracle Grid Infrastructure,整合了 Clusterware 和 ASM。

    • 改进的 Rolling Upgrade 功能,减少升级过程中的停机时间。

    • 增强了对虚拟化和云环境的支持。

5. Oracle 12c
  • Oracle 12c Release 1 (2013)

    • 引入多租户架构(Multitenant Architecture),支持容器数据库(CDB)和可插拔数据库(PDB)。

    • 改进了集群管理和自动化功能,简化了部署和管理。

    • 增强了对云计算和大数据环境的支持。

  • Oracle 12c Release 2 (2016)

    • 提供更好的性能和可扩展性。

    • 引入新的存储选项和改进的备份恢复功能。

6. Oracle 18c 和 19c
  • Oracle 18c (2018)

    • 强调自动化和智能化管理,进一步简化数据库管理任务。

    • 引入更多的云服务集成功能。

  • Oracle 19c (2019)

    • 提供长期支持(Long Term Support),强调稳定性和性能优化。

    • 增强的自动化诊断和修复功能。

7. Oracle 21c 和 23c
  • Oracle 21c (2021)

    • 支持容器数据库(CDB)架构。

    • 提供更多的自动化管理和 AI 驱动的功能。

    • 增强对混合云和多云环境的支持。

Oracle RAC 从9i正式引入至今已经发展了20多年,如果说是关系型数据库中最成功,最稳定的高可用架构应该没有异议,不过从11g之后Oracle RAC就没有太多革命性的创新,所以基本的理论概念基本没有变化,下面简单一下 Oracle Rac的一些基本概念知识(基于ORACLE 10G,不过基本没差别)

二.RAC相关理论知识

2.1 并发控制

在 集群环境中, 关键数据通常是共享存放的,比如放在共享磁盘上。而各个节点的对数据有相同的访问权限, 这时就必须有某种机制能够控制节点对数据的访 问。Oracle RAC是利用DLM(Distribute Lock Management) 机制来进行多个实例间的并发控制。

2.2 健忘症(Amnesia)

集群环境配置文件不是集中存放的,而是每个节点都有一个本地副本,在集群正常运行时,用户可以在任何节点更改集群的配置,并且这种更改会自动同步到其他节点。

有一种特殊情况:节点A 正常关闭, 在节点B上修改配置, 关闭节点B,启动节点A。这种情况下,修改的配置文件是丢失的, 就是所谓的健忘症。

2.3 脑裂(Split Brain)

在 集群中,节点间通过某种机制(心跳)了解彼此的健康状态,以确保各节点协调工作。假设只有"心跳"出现问题, 各个节点还在正常运行, 这时,每个节点 都认为其他的节点宕机了, 自己是整个集群环境中的"唯一建在者",自己应该获得整个集群的"控制权"。在集群环境中,存储设备都是共享的, 这就意味 着数据灾难, 这种情况就是"脑裂"

解决这个问题的通常办法是使用投票算法(Quorum Algorithm). 它的算法机理如下:

集 群中各个节点需要心跳机制来通报彼此的"健康状态",假设每收到一个节点的"通报"代表一票。对于三个节点的集群,正常运行时,每个节点都会有3票。当节点A心跳出现故障但节点A还在运行,这时整个集群就会分裂成2个小的partition。节点A是一个,剩下的2个是一个。这是必须剔除一个 partition才能保障集群的健康运行。

对于有3个节点的集群, A 心跳出现问题后, B 和 C 是一个partion,有2票, A只有1票。按照投票算法, B 和C 组成的集群获得控制权, A 被剔除。

如 果只有2个节点,投票算法就失效了。因为每个节点上都只有1票。这时就需要引入第三个设 备:Quorum Device. Quorum Device 通常采用是共享磁盘,这个磁盘也叫作Quorum disk。这个 Quorum Disk 也代表一票。当2个节点的心跳出现问题时, 2个节点同时去争取Quorum Disk 这一票, 最早到达的请求被最先满 足。故最先获得Quorum Disk的节点就获得2票。另一个节点就会被剔除。

2.4 IO 隔离(Fencing)

当集群系统出现"脑裂"问题的时候,我们可以通过"投票算法"来解决谁获得集群控制权的问题。但是这样是不够的,我们还必须保证被赶出去的节点不能操作共享数据。 这就是IO Fencing 要解决的问题。

IO Fencing实现有硬件和软件2种方式:

软 件方式:对于支持SCSI Reserve/Release 命令的存储设备, 可以用SG命令来实现。正常的节点使用SCSI Reserve命令" 锁住"存储设备, 故障节点发现存储设备被锁住后,就知道自己被赶出了集群,也就是说自己出现了异常情况, 就要自己进行重启,以恢复到正常状态。这个 机制也叫做 Sicide(自杀). Sun 和Veritas 使用的就是这种机制。

硬 件方式:STONITH(Shoot The Other Node in the Head), 这种方式直接操作电源开关,当一个节点发生故障时,另 一个节点如果能侦测到,就会通过串口发出命令,控制故障节点的电源开关,通过暂时断电,再上电的方式使故障节点被重启动, 这种方式需要硬件支持。

 RAC 集群

3.1 Clusterware

在单机环境下,Oracle是运行在OS Kernel 之上的。OS Kernel负责管理硬件设备,并提供硬件访问接口。Oracle 不会直接操作硬件,而是由OS Kernel代替它来完成对硬件的调用请求。

在 集群环境下, 存储设备是共享的。OS Kernel 的设计都是针对单机的,只能控制单机上多个进程间的访问。如果还依赖OS Kernel的服务, 就无法保证多个主机间的协调工作。这时就需要引入额外的控制机制,在RAC中,这个机制就是位于Oracle 和 OS Kernel 之间的 Clusterware,它会在OS Kernel之前截获请求,然后和其他结点上的Clusterware协商,最终完成上层的请求。

在 Oracle10G之前,RAC 所需要的集群件依赖于硬件厂商,比如SUN,HP,Veritas. 从Oracle 10.1版本 中,Oracle 推出了自己的集群产品. Cluster Ready Service(CRS),从此RAC 不再依赖于任何厂商的集群软件。在 Oracle 10.2版本中,这个产品改名为:Oracle Clusterware。

所以我们可以看出, 在整个RAC 集群中,实际上有2个集群环境的存在,一个是由Clusterware 软件组成的集群,另一个是由Database 组成的集群。

3.2 Clusterware 组成

Oracle Cluster 是一个单独的安装包,安装后,在每个节点上的Oracle Clusterware 会自动启动。 Oracle Clusterware的运行环境由2个磁盘文件(OCR,Voting Disk),若干进程和网络元素组成。

3.2.1 磁盘文件:

Clusterware 在 运行期间需要两个文件:OCR和Voting Disk. 这2个文件必须存放在共享存储上。 OCR 用于解决健忘问题,Voting Disk 用于 解决脑裂问题。 Oracle 建议使用裸设备来存放这2个文件,每个文件创建一个裸设备,每个裸设备分配100M左右的空间就够了。

3.2.1.1 OCR

健忘问题是由于每个节点都有配置信息的拷贝,修改节点的配置信息不同步引起的。 Oracle 采用的解决方法就是把这个配置文件放在共享的存储上, 这个文件就是OCR Disk。

OCR 中 保存整个集群的配置信息,配置信息以"Key-Value" 的形式保存其中。在Oracle10g以前, 这个文件叫作 Server Manageability Repository(SRVM). 在Oracle10g, 这部分内容被重新设计,并重名为OCR.在 Oracle Clusterware 安装的过程中, 安装程序会提示用户指定OCR位置。并且用户指定的这个位置会被记录在/etc/oracle /ocr.Loc(Linux System) 或者/var/opt/oracle/ocr.Loc(Solaris System)文件中。而在 Oracle 9i RAC中,对等的是srvConfig.Loc文件。 Oracle Clusterware在启动时会根据这里面的内容从指定位置 读入OCR 内容。

1). OCR key

整个OCR 的信息是树形结构,有3个大分支。分别是SYSTEM,DATABASE 和CRS。每个分支下面又有许多小分支。这些记录的信息只能由root用户修改。

2)OCR process

Oracle Clusterware 在OCR中存放集群配置信息,故OCR 的内容非常的重要,所有对OCR的操作必须确保OCR 内容完整性,所以在ORACLE Clusterware运行过程中,并不是所有结点都能操作OCR Disk.

在 每个节点的内存中都有一份OCR内容的拷贝,这份拷贝叫做OCR Cache。每个结点都有一个OCR Process 来读写OCR Cache,但 只有一个节点的OCR process能读写OCR Disk中的内容,这个节点叫作OCR Master结点。这个节点的OCR process 负 责更新本地和其他节点的OCR Cache内容。

所有需要OCR内容的其他进程,比如OCSSD,EVM等都叫作Client Process, 这些进程不会直接访问OCR Cache,而是OCR Process发送请求,借助OCR Process获得内容,如果想要修改OCR 内容,也要由该节点的OCR Process像 Master node 的OCR process提交申请,由Master OCR Process完成物理读写,并同步所有节点OCR Cache 中的内容。

3.2.1.2   Voting Disk

Voting Disk 这 个文件主要用于记录节点成员状态,在出现脑裂时,决定哪个Partion获得控制权,其他的Partion必须从集群中剔除。在安装 Clusterware时也会提示指定这个位置。安装完成后可以通过如下命令来查看Voting Disk位置。

$crsctl query css votedisk##  STATE    File Universal Id                File Name Disk group--  -----    -----------------                --------- --------- 1. ONLINE   ac0d65877b454fxxxxxxcx1c936ef316 (/dev/mapper/crs1) [CRS] 2. ONLINE   37e617cd5c254f5xxxxxxcff5b2c381b (/dev/mapper/crs2) [CRS] 3. ONLINE   5140d0509b764fxxxxxxc37ea369e6b7 (/dev/mapper/crs3) [CRS]Located 3 voting disk(s).

3.2.2 Clusterware 后台进程

Clusterware 由 若干进程组成,其中最重要的3个是:CRSD,CSSD,EVMD.在安装clusterware的最后阶段,会要求在每个节点执行root.sh 脚 本, 这个脚本会在/etc/inittab 文件的最后把这3个进程加入启动项,这样以后每次系统启动时,Clusterware 也会自动启动,其中 EVMD和CRSD 两个进程如果出现异常,则系统会自动重启这两个进程,如果是CSSD 进程异常,系统会立即重启。

1). OCSSD

OCSSD 这 个进程是Clusterware最关键的进程,如果这个进程出现异常,会导致系统重启,这个进程提供 CSS(Cluster Synchronization Service)服务。CSS 服务通过多种心跳机制实时监控集群状态,提供脑裂保护等基础 集群服务功能。

CSS 服务有2种心跳机制:一种是通过私有网络的Network Heartbeat,另一种是通过Voting Disk的Disk Heartbeat.

这 2种心跳都有最大延时,对于Disk Heartbeat, 这个延时叫作IOT (I/O Timeout);对于 Network Heartbeat, 这个延时叫MC(Misscount)。这2个参数都以秒为单位,缺省时IOT大于MC,在默认情况下,这2个 参数是Oracle 自动判定的,并且不建议调整。可以通过如下命令来查看参数值:

crsctl get css disktimeoutCRS-4678: Successful get disktimeout 200 for Cluster Synchronization Services.crsctl get css misscountCRS-4678: Successful get misscount 30 for Cluster Synchronization Services.

注:除了Clusterware 需要这个进程,在单节点环境中如果使用了ASM,也需要这个进程;这个进程用于支持ASM Instance 和 RDBMS Instance之间的通信。如果在使用了ASM的节点上安装RAC,会遇到一个问题:RAC节点要求只有一个OCSSD进程,并且应该是 运行$CRS_HOME目录下的,这时就需要先停止ASM,并通过$ORACLE_HOME/bin/localcfig.Sh delete 删除之前 的inittab 条目。之前安装ASM时,也使用这个脚本来启动OCSSD: $ORACLE_HOME/bin /localconfig.Sh add.

2). CRSD

CRSD是实现"高可用性(HA)"的主要进程,它提供的服务叫做CRS(Cluster Ready Service) 服务。

Oracle Clusterware是位于集群层的组件,它要为应用层资源(CRS Resource) 提供"高可用",所以,Oracle Clusterware 必须监控这些资源,并在这些资源运行异常时进行干预,包括关闭,重启进程或者转移服务。CRSD进程提供的就是这些服务。

所有需要 高可用性 的组件,都会在安装配置的时候,以CRS Resource的形式登记到OCR中,而CRSD进程就是根据OCR中的内容,决定监控哪些进程,如何监控,出现问题时又如何解决。也就是说,CRSD 进程负责监控CRS Resource 的运行状态,并要启动,停止,监控,Failover这些资源。默认情况下,CRS 会自动尝试重启资源5次,如果还是失败,则放弃尝试。

CRS Resource 包括GSD(Global Serveice Daemon),ONS(Oracle Notification Service),VIP, Database, Instance 和 Service. 这些资源被分成2类:

GSD,ONS,VIP 和 Listener 属于Noteapps类

Database,Instance 和Service 属于 Database-Related Resource 类。

我 们可以这样理解: Nodeapps 就是说每个节点只需要一个就够了,比如每个节点只有一个Listener,而Database- Related Resource 就是说这些资源和数据库有关,不受节点的限制,比如一个节点可以有多个实例,每个实例可以有多个Service。

GSD,ONS,VIP 这3个服务是在安装Clusterware的最后,执行VIPCA 时创建并登记到OCR中的。而Database, Listener, Instance 和Service 是在各自的配置过程中自动或者手动登记到OCR中的。

3). EVMD

EVMD 这 个进程负责发布CRS 产生的各种事件(Event). 这些Event可以通过2种方式发布给客户:ONS和 Callout Script. 用户 可以自定义回调脚本,放在特定的目录下,这样当有某些事件发生时,EVMD会自动扫描该目录,并调用用户的脚本,这种调用是通过racgevt进程来完成 的。

EVMD 进程除了复杂发布事件之外,它还是CRSD 和CSSD 两个进程之间的桥梁。 CRS 和CSS 两个服务之前的通信就是通过EVMD 进程完成的。

4). RACGIMON

RACGIMON 这个进程负责检查数据库健康状态,负责Service的启动,停止,故障转移(Failover)。这个进程会建立到数据库的持久连接,定期检查SGA中的特定信息,该信息由PMON 进程定时更新。

5). OPROCD

OPROCD 这 个进程也叫做 Process Monitor Daemon. 如果在非Linux 平台上,并且没有使用第三方的集群软件时,就会看到这个进程。这 个进程用来检查节点的Processor Hang(CPU 挂起), 如果调度时间超过1.5秒, 就会认为CPU 工作异常,会重启节点。也就是说 这个进程提供 "IO 隔离" 的功能。从其在Windows 平台上的服务名: OraFnceService 也可以看出它的功能。而在 Linux 平台上, 是利用Hangcheck-timer 模块来实现"IO 隔离"的。

3.3 VIP 原理和特点

Oracle 的TAF 就是建立在VIP 技术之上的。 IP 和VIP 区别在于: IP 是利用TCP层超时, VIP 利用的是应用层的立即响应。VIP 它是浮动的IP. 当一个节点出现问题时会自动转到另一个节点上。

假设有一个2个节点的RAC,正常运行时每个节点上都有一个VIP。 VIP1 和VIP2. 当节点2发生故障,比如异常关机。RAC 会做如下操作:

1). CRS 在检测到rac2节点异常后,会触发Clusterware 重构,最后把rac2节点剔除集群,由节点1组成新的集群。

2). RAC的Failover 机制会把节点2的VIP转移到节点1上,这时节点1的PUBLIC 网卡上就有3个IP 地址: VIP1,VIP2, PUBLIC IP1.

3). 用户对VIP2的连接请求会被IP层路由转到节点1

4). 因为在节点1上有VIP2的地址,所有数据包会顺利通过路由层,网络层,传输层。

5). 但是,节点1上只监听VIP1和public IP1的两个IP地址。并没有监听VIP2,故应用层没有对应的程序接收这个数据包,这个错误立即被捕获。

6). 客户段能够立即接收到这个错误,然后客户段会重新发起向VIP1的连接请求。

VIP 特点:

1). VIP 是通过VIPCA脚本创建的

2). VIP 作为Nodeapps类型的CRS Resource 注册到OCR中,并由CRS 维护状态。

3). VIP 会绑定到节点的public 网卡上,故public 网卡有2个地址。

4). 当某个节点发生故障时,CRS 会把故障节点的VIP 转移到其他节点上。

5). 每个节点的Listener 会同时监听public 网卡上的 public ip 和VIP

6). 客户端的tnsnames.Ora 一般会配置指向节点的VIP.

3.4 Clusterware 的日志体系

Oracle Clusterware的辅助诊断,只能从log 和trace 进行。而且它的日志体系比较复杂。

alert.log:

$ORA_CRS_HOME\log\hostname\alert.Log, 这是首选的查看文件。

Clusterware后台进程日志:

crsd.Log: $ORA_CRS_HOME\log\hostname\crsd\crsd.Log

ocssd.Log: $ORA_CRS_HOME\log\hostname\cssd\ocsd.Log

evmd.Log: $ORA_CRS_HOME\log\hostname\evmd\evmd.Log

Nodeapp日志位置:

$ORA_CRS_HOME\log\hostname\racg\

这里面放的是nodeapp的日志,包括ONS和VIP,比如:ora.Rac1.ons.Log

工具执行日志:

$ORA_CRS_HOME\log\hostname\client\

Clusterware 提供了许多命令行工具:

比如ocrcheck, ocrconfig,ocrdump,oifcfg和clscfg, 这些工具产生的日志就放在这个目录下

还有$ORACLE_HOME\log\hostname\client\ 和

$ORACLE_HOME\log\hostname\racg 也有相关的日志。

相关文章:

ORACLE RAC的一些基本理论知识

一 . Oracle RAC 的发展历程 1. Oracle Parallel Server (OPS) 早期阶段:Oracle 6 和 7 Oracle Parallel Server(OPS)是 Oracle RAC 的前身。 通过多个实例并行访问同一个数据库来提高性能。 共享磁盘架构,利用分布式锁管理&am…...

CMake的作用域:public/private/interface

在 CMake 中,public、private和 interface是用来指定目标属性的作用域的关键字,这三个有什么区别呢?这些关键字用于控制属性的可见性和传递性,影响了目标之间的依赖关系和属性传递。 public 如果在一个目标上使用 public关键字时…...

设计模式基础知识点(七大原则、UML类图)

Java设计模式(设计模式七大原则、UML类图) 设计模式的目的设计模式七大原则单一职能原则(SingleResponsibility)接口隔离原则(InterfaceSegreation)依赖倒转原则(DependenceInversion&#xff0…...

Android开机动画的结束过程BootAnimation(基于Android10.0.0-r41)

文章目录 Android 开机动画的结束过程BootAnimation(基于Android10.0.0-r41) Android 开机动画的结束过程BootAnimation(基于Android10.0.0-r41) 路径frameworks/base/cmds/bootanimation/bootanimation_main.cpp init进程把我们的BootAnimation的二进制文件拉起来了&#xf…...

微软远程连接工具:Microsoft Remote Desktop for Mac 中文版

Microsoft Remote Desktop 是一款由微软开发的远程桌面连接软件,它允许用户从远程地点连接到远程计算机或虚拟机,并在远程计算机上使用桌面应用程序和文件。 下载地址:https://www.macz.com/mac/5458.html?idOTI2NjQ5Jl8mMjcuMTg2LjEyNi4yMz…...

【安规介绍】

文章目录 一、基础知识安规上的六类危险的防护:安全电压漏电流接触电流能量问题:火灾问题:热问题结构问题阻燃等级绝缘等级:对接地系统的要求:结构要求:电气要求: 二、设计的关键电气绝缘距离电气爬电距离:…...

[sylar]后端学习:配置环境(一)

1.介绍 基于sylar大神的C高性能后端网络框架来进行环境配置和后续学习。网站链接:sylar的Linux环境配置 2.下载 按照视频进行下载,并进行下载,并最好还要下载一个vssh的软件。可以直接在网上搜索即可。 sylar_环境配置,vssh下…...

XDMA原理及其应用和发展

XDMA原理 XDMA的主要原理是通过直接访问主机内存,实现数据的快速传输。在传统的DMA(Direct Memory Access)技术中,数据传输需要经过CPU的干预,而XDMA可以绕过CPU,直接将数据从外设读取到主机内存或者从主机…...

携程梁建章:持续投资创新与AI,开启旅游行业未来增长

5月30至31日,携程集团在上海和张家界举办Envision 2024全球合作伙伴大会,邀请超50个国家和地区的1600余名外籍旅游业嘉宾与会,共同探讨中国跨境旅游市场发展机遇,讲好中国故事。 携程国际业务增速迅猛,创新与AI解锁未…...

【网络安全的神秘世界】在win11搭建pikachu靶场

🌝博客主页:泥菩萨 💖专栏:Linux探索之旅 | 网络安全的神秘世界 | 专接本 下载pikachu压缩包 https://github.com/zhuifengshaonianhanlu/pikachu 下载好的pikachu放在phpstudy_pro/www目录下 创建pikachu数据库 打开phpstudy软件…...

基于Java的零食管理系统的设计与实现(论文+源码)_kaic

摘 要 随着科技的进步,以及网络的普及,都为人们的生活提供了极大的方便。因此,在管理”三姆”宿舍在线零食商店时,与现代的网络联系起来是非常必要的,本次设计的系统在研发过程中应用到了Java技术,这在一定…...

【案例实操】银河麒麟桌面操作系统实例分享,V10SP1重启后网卡错乱解决方法

1.问题现象 8 个网口, 命名从 eth1 开始到 eth8。 目前在系统 grub 里面加了 net.ifnames0 biosdevname0 参数, 然后在 udev 规则中加了一条固定网卡和硬件 pci 设备号的规则文件。 最后在 rc.local 中加了两条重新安装网卡驱动的命令( rmmod…...

初级前端开发岗

定位: 日常任务的辅助执行者,前端基础建设的参与者。 素质要求: 是否遵循部门敏捷流程、规范、P0制度;具备良好的沟通和协作能力;负责日常迭代任务的落地执行;拥有较强的执行力,能够灵活解决问题; 职责&#xff1a…...

颠仆流离学二叉树2 (Java篇)

本篇会加入个人的所谓鱼式疯言 ❤️❤️❤️鱼式疯言:❤️❤️❤️此疯言非彼疯言 而是理解过并总结出来通俗易懂的大白话, 小编会尽可能的在每个概念后插入鱼式疯言,帮助大家理解的. 🤭🤭🤭可能说的不是那么严谨.但小编初心是能让更多人…...

柏林自由大学研究团队《Ecology Letters 》揭示AMF在植物对全球变化响应的作用

全球环境变化正在影响陆生植物生长。植物已经进化出各种策略来应对这些挑战,其中之一是与丛枝菌根真菌(AMF)形成共生关系(高达80%的陆生植物物种)。AMF为寄主植物提供各种益处,例如营养吸收、耐受性、食草动物防御和抗病能力,以换取糖和脂质(…...

libevent源码跨平台编译(windows/macos/linux)

1.windows编译: 克隆: git clone https://github.com/libevent/libevent.git 克隆成功 生成makefile 生成成功 默认不支持OpenSSL,MbedTLS,ZLIB这三个库 编译: cmake --build . --config release...

idea+tomcat+mysql 从零开始部署Javaweb项目(保姆级别)

文章目录 新建一个项目添加web支持配置tomcat优化tomcat的部署运行tomcatidea数据库连接java连接数据库 新建一个项目 new project;Java;选择jdk的版本;next;next;填写项目名字,选择保存的路径;…...

LeetCode 每日一题 2024/5/27-2024/6/2

记录了初步解题思路 以及本地实现代码;并不一定为最优 也希望大家能一起探讨 一起进步 目录 5/27 2028. 找出缺失的观测数据5/28 2951. 找出峰值5/29 2981. 找出出现至少三次的最长特殊子字符串 I5/30 2982. 找出出现至少三次的最长特殊子字符串 II5/31 2965. 找出缺…...

BOOST_SREATCH

BOOST Boost是一个由C社区开发的开源库,为C语言标准库提供扩展。这个库由C标准委员会库工作组成员发起,旨在提供大量功能和工具,帮助C开发者更高效地编写代码。Boost库强调跨平台性和对标准C的遵循,因此与编写平台无关&#xff0…...

MySQL学习——获取数据库和表格的信息

如果忘记了数据库或表的名称,或者不确定给定表的结构(例如,其列的名称),该怎么办呢?MySQL通过几个语句解决了这个问题,这些语句提供了有关它支持的数据库和表的信息。 你之前已经看过SHOW DATA…...

Go语言redis框架 — go-redis

https://zhuanlan.zhihu.com/p/645669818 一、简述 1. API友好,命令名称和参数与Redis原生命令一致,使用简单方便。 2. 支持完整的Redis命令集,覆盖了字符串、哈希、列表、集合、有序集合、HyperLogLog等数据结构。 3. 支持连接池&#x…...

C++ | Leetcode C++题解之第125题验证回文串

题目&#xff1a; 题解&#xff1a; class Solution { public:bool isPalindrome(string s) {int n s.size();int left 0, right n - 1;while (left < right) {while (left < right && !isalnum(s[left])) {left;}while (left < right && !isalnu…...

Spring创建对象的多种方式

一、对象分类 简单对象&#xff1a;使用new Obj()方式创建的对象 复杂对象&#xff1a;无法使用new Obj()方式创建的对象。例如&#xff1a; 1. AOP创建代理对象。ProxyFactoryBean; 2. Mybatis中的SqlSessionFactoryBean; 3. Hibernate中的SessionFactoryBean。二、创建对象方…...

宝塔部署前后端分离项目手册

文章目录 安装宝塔安装环境开始部署1. 前端Vue项目1.先本地启动前端项目&#xff08;记住端口号&#xff09;2.打包前端项目3.上传前端项目4.创建PHP站点5.安全里开放端口号6.测试前端 2. 后端boot项目1. 先在本地跑起来2.修改数据库的配置信息3. 项目打包4. nohup启动项目4.1 …...

Leetcode 第 397 场周赛题解

Leetcode 第 397 场周赛题解 Leetcode 第 397 场周赛题解题目1&#xff1a;3146. 两个字符串的排列差思路代码复杂度分析 题目2&#xff1a;思路代码复杂度分析 题目3&#xff1a;3148. 矩阵中的最大得分思路代码复杂度分析 题目4&#xff1a;3149. 找出分数最低的排列思路代码…...

Python+Selenium自动化测试项目实战

第 1 章 自动化测试 1.1、自动化测试介绍 自动化测试就是通过自动化测试工具帮我们打开浏览器&#xff0c;输入网址&#xff0c;输入账号密码登录&#xff0c;及登录后的操作&#xff0c;总的说来自动化测试就是通过自动化测试脚本来帮我们从繁琐重复的手工测试里面解脱出来&…...

WPS部分快捷操作汇总

记录一些个人常用的WPS快捷操作 一、去除文档中所有的超链接&#xff1a; 1、用WPS打开文档&#xff1b; 2、用Ctrla全选&#xff0c;或者点击上方的【选择】-【全选】&#xff0c;选中文档全部内容&#xff1b; 3、按CTRLSHIFTF9组合键&#xff0c;即可一次性将取文档中所有…...

Kubernetes (K8s) 普及指南

在当今的云计算和微服务时代&#xff0c;Kubernetes&#xff08;简称K8s&#xff09;已经成为容器编排的标准工具。它帮助开发者和运维人员管理和部署应用程序&#xff0c;实现高可用性、可伸缩性和自我修复。本文将详细介绍Kubernetes的基本概念、核心组件、工作原理及其优势。…...

Oracle RAC 集群配置共享目录ACFS

Oracle RAC 集群配置共享目录ACFS 应用场景&#xff1a;创建的ACFS文件系统用于部署OGG做数据同步使用。 1、创建共享磁盘组 create diskgroup OGG external redundancy disk /dev/mapper/ASM08, /dev/mapper/ASM09; 2、创建 acfs 文件系统 ACFS文件系统 在ASM磁盘组中通过A…...

Google Cloudbuild yaml file 中 entrypoint 和 args 的写法

编写cloudbuild.yaml 时有几个关键参数 entrypoint 和 args 的基本介绍 id: 显示在 cloud build logs 里的item 名字 name: docker 镜像名字 - 下面的命令会在这个镜像的1个容器instance 内执行 entrypoint: 执行的命令入口 &#xff0c; 只能有1个对象 args&#xff1a; 命名…...

鸿蒙开发接口图形图像:【@ohos.window (窗口)】

窗口 窗口提供管理窗口的一些基础能力&#xff0c;包括对当前窗口的创建、销毁、各属性设置&#xff0c;以及对各窗口间的管理调度。 该模块提供以下窗口相关的常用功能&#xff1a; [Window]&#xff1a;当前窗口实例&#xff0c;窗口管理器管理的基本单元。[WindowStage]&…...

LLM 基准测试的深入指南

随着越来越多的 LLM 可用,对于组织和用户来说,快速浏览不断增长的环境并确定哪些模型最适合他们的需求至关重要。实现这一目标的最可靠方法之一是了解基准分数。 考虑到这一点,本指南深入探讨了 LLM 基准的概念、最常见的基准是什么以及它们需要什么,以及仅依赖基准作为模…...

深入理解Redis事务、事务异常、乐观锁、管道

Redis事务与MySQL事务 不一样。原子性&#xff1a;MySQL有Undo Log机制&#xff0c;支持强原子性&#xff0c;和回滚。Redis只能保证事务内指令可以不被干扰的在同一批次执行&#xff0c;且没有机制保证全部成功则提交&#xff0c;部分失败则回滚。隔离性&#xff1a;MySQL的隔…...

17、Spring系列-SpringMVC-请求源码流程

前言 Spring官网的MVC模块介绍&#xff1a; Spring Web MVC是基于Servlet API构建的原始Web框架&#xff0c;从一开始就已包含在Spring框架中。正式名称“ Spring Web MVC”来自其源模块的名称&#xff08;spring-webmvc&#xff09;&#xff0c;但它通常被称为“ Spring MVC…...

对简单工厂模式、工厂方法模式、抽象工厂模式的简单理解

简单工厂模式 三部分组成 抽象类一些抽象类的具体实现类工厂类 把创建对象的任务交给一个工厂类来实现&#xff0c;对业务进行封装。 优点&#xff1a;实现了任务分离&#xff0c;客户端不用关心业务的具体实现&#xff0c;交由工厂来“生产”。 缺点&#xff1a;违背开闭原…...

PostgreSQL常用插件

PostgreSQL 拥有许多常用插件&#xff0c;这些插件可以大大增强其功能和性能。以下是一些常用的 PostgreSQL 插件&#xff1a; 性能监控和优化 pg_stat_statements 1.提供对所有 SQL 语句执行情况的统计信息。对调优和监控非常有用。 2.安装和使用&#xff1a; pg_stat_k…...

mysql表字段超过多少影响性能 mysql表多少效率会下降

一直有传言说&#xff0c;MySQL 表的数据只要超过 2000 万行&#xff0c;其性能就会下降。而本文作者用实验分析证明&#xff1a;至少在 2023 年&#xff0c;这已不再是 MySQL 表的有效软限制。 传言 互联网上有一则传言说&#xff0c;我们应该避免单个 MySQL 表中的数据超过 …...

Vue进阶之Vue无代码可视化项目(一)

Vue无代码可视化项目 项目搭建初始步骤拓展:工程项目从0-1项目规范化package.jsoncpell.jsoncustom-words.txtts-eslint规则.eslintrc.cjsgit钩子检查有没有问题type-checkspellchecklint:stylehusky操作安装pre-commitpnpm的commit规范package.json:commitlint.config.cjs安装…...

初识C++ · 模拟实现list

目录 前言 1 push_back pop_back 2 迭代器类 2.1 ! 2.2 -- 2.3 * 3 Print_List 4 有关自定义类型 5 有关const迭代器 6 拷贝构造 赋值 析构 Insert erase 前言 有了string&#xff0c;vector的基础&#xff0c;我们模拟实现list还是比较容易的&#xff0c;这里同…...

电商运营-2024年6月1日

作为一名电商运营&#xff0c;针对淘工厂平台&#xff0c;需要具备以下核心技能和素质&#xff1a; 核心技能 新店入驻与产品管理 熟练掌握淘工厂平台的新店入驻流程&#xff0c;包括资质准备、资料提交、审核跟进等。精通产品上架技巧&#xff0c;确保产品信息准确、图片清晰…...

Go跨平台编译

1.编译windows平台运行程序 # windows env GOOSwindows GOARCHamd64 go build main.go2.编译linux平台运行程序 # linux env GOOSlinux GOARCHamd64 go build main.go 3.编译macos平台运行程序 # macos env GOOSdarwin GOARCHamd64 go build main.go 编译结果:...

生产计划排产,制定每小时计划产量(“查表法”SQL计算)

根据日生产计划产量排产&#xff0c;制定每2小时理论计划生产产量。 每2小时计划产量 每2小时工作时间&#xff08;秒&#xff09;/生产计划节拍&#xff08;秒&#xff09;。 假设&#xff0c;生产计划节拍 &#xff1a; 25.0(秒)/台 工厂以每天8点00分钟作为当日工作日的…...

视频汇聚管理安防监控平台EasyCVR程序报错“create jwtSecret del server class:0xf98b6040”的原因排查与解决

国标GB28181协议EasyCVR安防视频监控平台可以提供实时远程视频监控、视频录像、录像回放与存储、告警、语音对讲、云台控制、平台级联、磁盘阵列存储、视频集中存储、云存储等丰富的视频能力&#xff0c;平台支持7*24小时实时高清视频监控&#xff0c;能同时播放多路监控视频流…...

头歌页面置换算法第2关:计算OPT算法缺页率

2 任务:OPT算法 2.1 任务描述 设计OPT页面置换算法模拟程序:从键盘输入访问串。计算OPT算法在不同内存页框数时的缺页数和缺页率。要求程序模拟驻留集变化过程,即能模拟页框装入与释放过程。 2.2任务要求 输入串长度作为总页框数目,补充程序完成OPT算法。 2.3算法思路 OPT算…...

vscode怎么拷贝插件到另一台电脑

说明 vscode插件默认存放在 C:\Users\用户名\.vscode 目录下的 extensions 文件夹中 方法 拷贝 C:\Users\用户名\.vscode 目录下的 extensions 文件夹到另一台电脑的C:\Users\用户名\.vscode 目录下 C:\Users\用户名\.vscode...

网络协议分析

网络协议分析 网络协议分析概述用IP实现异构网络互联网络协议的分层TCP/IP的分层模型协议分析协议分析应用协议分析任务 常见网络协议PPP协议报文选项IPCP认证协议PAP安全缺陷认证协议CHAPPPPoE协议流程 地址解析协议ARPARP的思想和步骤ARP报文格式及封装 移动IP移动IP的工作机…...

GAMIT目录配置

1打开home&#xff0c;显示隐藏文件&#xff0c;CTRH 2修改目录 #set gamitpath gamitpath/opt/gamit10.7 export PATH$PATH:${gamitpath}/com/:${gamitpath}/gamit/bin:${gamitpath}/kf/bin HELP_DIR${gamitpath}/help export HELP_DIR #set GMT path gmtpath/usr/lib/gmt P…...

基于JSP的九宫格日志网站

你好呀&#xff0c;我是学长猫哥&#xff01;如果有需求可以文末加我。 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;JSP技术 工具&#xff1a;浏览器/服务器&#xff08;B/S&#xff09;结构 系统展示 首页 管理员功能模块 用户功能模块 摘要 本…...

C#中结构struct能否继承于一个类class,类class能否继承于一个struct

C#中结构struct能否继承于一个类class&#xff0c;类class能否继承于一个struct 答案是&#xff1a;都不能。 第一种情行&#xff0c;尝试结构继承类 报错&#xff1a;接口列表中的类型"XX"不是接口interface。 一般来说&#xff0c;都是结构只能实现接口&#x…...

【Vulhub】Fastjson 1.2.24_rce复现

文章目录 一&#xff0c;Fastjson是什么&#xff1f;二&#xff0c;fastjson漏洞原理三&#xff0c;判断是否有fastjson反序列化四&#xff0c;复现Fastjson 1.2.24_rce(vulhub)环境配置1.判断是否存在Fastjson反序列化2.反弹shell3.启动RMI服务器4.构造恶意POST请求 一&#x…...