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

ceph的RBD管理

0 块设备介绍

Ceph 的块设备(Ceph Block Device, RBD)是其存储服务的一种实现形式,通过 librbd 库或 Linux 内核模块提供块设备支持,所以可以与主流云平台(如 OpenStack)、虚拟化平台(如 KVM)和容器平台(如 K8S)无缝集成

分布式存储架构特性:

  • 数据被切分为多个对象,并分布在多个 OSD(对象存储守护进程)上
  • 使用 CRUSH 算法动态管理数据分布,确保高性能和均衡性

高可靠性与弹性:

  • 提供多副本或 Erasure Coding(纠删码)以保障数据可靠性

  • 故障自愈:当某个 OSD 出现故障时,系统会自动修复并重新分布数据

动态扩展性:

  • 快照支持创建时间点一致的只读快照,可用于备份或恢复;快照还可以克隆

1 块设备的基本管理

1.创建存储池zhiyong-rbd

[root@ceph141~]# ceph osd pool create zhiyong-rbd 16 16
pool 'zhiyong-rbd' created[root@ceph141~]# ceph osd pool ls
.mgr
wzy
zhiyong-rbd

2.使用rbd工具初始化池以供RBD块设备使用

[root@ceph141~]# rbd pool init zhiyong-rbd

3.创建一个2G的rbd设备,这个块设备名是wordpress

[root@ceph141~]# rbd create -s 2048  zhiyong-rbd/wordpress

4.查看镜像的详细信息

-l表示长格式信息输出

-p指定镜像名称

[root@ceph141~]# rbd ls -p zhiyong-rbd -l
NAME       SIZE   PARENT  FMT  PROT  LOCK
wordpress  2 GiB            2[root@ceph141~]# rbd info zhiyong-rbd/wordpress
rbd image 'wordpress':size 2 GiB in 512 objectsorder 22 (4 MiB objects)snapshot_count: 0id: fd4d9658c0d2block_name_prefix: rbd_data.fd4d9658c0d2format: 2features: layering, exclusive-lock, object-map, fast-diff, deep-flattenop_features: flags: create_timestamp: Tue Nov  5 01:15:13 2024access_timestamp: Tue Nov  5 01:15:13 2024modify_timestamp: Tue Nov  5 01:15:13 2024

这个镜像为2G,512个对象,每个对象4MB,

5.修改rbd的名称

[root@ceph141~]# rbd -p zhiyong-rbd rename wordpress wp

6.修改rbd的大小

[root@ceph141~]# rbd -p zhiyong-rbd resize -s 5G wp
Resizing image: 100% complete...done.
[root@ceph141~]# rbd ls -p zhiyong-rbd -l
NAME  SIZE   PARENT  FMT  PROT  LOCK
wp    5 GiB            2

7.删除镜像

[root@ceph141~]# rbd rm zhiyong-rbd/wp
Removing image: 100% complete...done.

2 Ubuntu使用ceph块设备案例

01 ceph141节点挂载并使用

1.先准备存储池和初始化,(如果没有的情况下)

[root@ceph141~]# ceph osd pool create zhiyong18-rbd 128 128
pool 'zhiyong18-rbd' created
[root@ceph141~]# rbd pool init zhiyong18-rbd

创建一个块设备叫wordpress和mysqld

[root@ceph141~]# rbd create -s 2G zhiyong18-rbd/wordpress
[root@ceph141~]# rbd create -s 5G -p zhiyong18-rbd --image mysqld --image-feature layering,exclusive-lock

2.查看镜像的详细信息

[root@ceph141~]# rbd info -p zhiyong18-rbd wordpress
rbd image 'wordpress':size 2 GiB in 512 objectsorder 22 (4 MiB objects)snapshot_count: 0id: 149e2d0fa83eeblock_name_prefix: rbd_data.149e2d0fa83eeformat: 2features: layering, exclusive-lock, object-map, fast-diff, deep-flattenop_features: flags: create_timestamp: Tue Nov  5 18:15:24 2024access_timestamp: Tue Nov  5 18:15:24 2024modify_timestamp: Tue Nov  5 18:15:24 2024[root@ceph141~]# rbd info -p zhiyong18-rbd mysqld
rbd image 'mysqld':size 5 GiB in 1280 objectsorder 22 (4 MiB objects)snapshot_count: 0id: 149e89b3c43d6block_name_prefix: rbd_data.149e89b3c43d6format: 2features: layering, exclusive-lockop_features: flags: create_timestamp: Tue Nov  5 18:15:30 2024access_timestamp: Tue Nov  5 18:15:30 2024modify_timestamp: Tue Nov  5 18:15:30 2024

3.客户端映射镜像(块设备)

rbd -p zhiyong18-rbd map mysqld
rbd -p zhiyong18-rbd map wordpress

查看镜像块

[root@ceph141~]# tree /dev/rbd/
/dev/rbd/
└── zhiyong18-rbd├── mysqld -> ../../rbd0└── wordpress -> ../../rbd1

4.对块设备进行格式化

[root@ceph141~]# mkfs.xfs /dev/rbd0 
[root@ceph141~]# mkfs.ext4 /dev/rbd1

5.对设备进行挂载

[root@ceph141~]# mkdir -pv /wenzhiyong/data/{wordpress,mysql}[root@ceph141~]# mount /dev/rbd0 /wenzhiyong/data/mysql
[root@ceph141~]# mount /dev/rbd1 /wenzhiyong/data/wordpress[root@ceph141~]# df -h | grep wen
/dev/rbd0       5.0G   69M  5.0G   2% /wenzhiyong/data/mysql
/dev/rbd1       2.0G   24K  1.8G   1% /wenzhiyong/data/wordpress

6.测试可用性,可以写入文件

[root@ceph141~]# echo mysql_data >> /wenzhiyong/data/mysql/mysql.txt
[root@ceph141~]# echo wordpress_data >> /wenzhiyong/data/mysql/wordpress.txt

7.卸载设备

[root@ceph141~]# umount /wenzhiyong/data/mysql 
[root@ceph141~]# umount /wenzhiyong/data/wordpress

8.取消映射

[root@ceph141~]# rbd unmap zhiyong18-rbd/mysqld
[root@ceph141~]# rbd unmap zhiyong18-rbd/wordpress[root@ceph141~]# ll /dev/rbd*
ls: cannot access '/dev/rbd*': No such file or directory

02 ceph143节点使用

1.如果没有拷贝授权文件到ceph143节点,这一步是做不通的

[root@ceph143~]# rbd -p zhiyong18-rbd map mysqld
/dev/rbd0
[root@ceph143~]# rbd -p zhiyong18-rbd map wordpress
/dev/rbd1

2.挂载

[root@ceph143~]# mkdir -pv /wenzhiyong/data/{wordpress,mysql}[root@ceph143~]# mount /dev/rbd0 /wenzhiyong/data/mysql
[root@ceph143~]# mount /dev/rbd1 /wenzhiyong/data/wordpress
[root@ceph143~]# df -h | grep wenzhiyong
/dev/rbd0       5.0G   69M  5.0G   2% /wenzhiyong/data/mysql
/dev/rbd1       2.0G   24K  1.8G   1% /wenzhiyong/data/wordpress

3.查看数据

[root@ceph143~]# tree /wenzhiyong/data/
/wenzhiyong/data/
├── mysql
│   ├── mysql.txt
│   └── wordpress.txt
└── wordpress└── lost+found

03 多个节点一起写入块设备的结果

1.这时让ceph142节点也使用这2个rbd设备会发生什么情况呢

[root@ceph142~]# mkdir -pv /wenzhiyong/data/{wordpress,mysql}
[root@ceph142~]# rbd -p zhiyong18-rbd map mysqld
/dev/rbd0
[root@ceph142~]# rbd -p zhiyong18-rbd map wordpress
/dev/rbd1
[root@ceph142~]# mount /dev/rbd0 /wenzhiyong/data/mysql
[root@ceph142~]# mount /dev/rbd1 /wenzhiyong/data/wordpress
[root@ceph142~]# df -h | grep wenzhiyong
/dev/rbd0       5.0G   69M  5.0G   2% /wenzhiyong/data/mysql
/dev/rbd1       2.0G   24K  1.8G   1% /wenzhiyong/data/wordpress
[root@ceph142~]# tree /wenzhiyong/data/
/wenzhiyong/data/
├── mysql
│   ├── mysql.txt
│   └── wordpress.txt
└── wordpress└── lost+found

2.ceph142节点执行挂载后,ceph143节点的数据也是有的,也没有丢失。而且目前还算一致。

[root@ceph143~]# tree /wenzhiyong/data/
/wenzhiyong/data/
├── mysql
│   ├── mysql.txt
│   └── wordpress.txt
└── wordpress└── lost+found

3.在ceph142节点执行写入会发生什么呢,写入一个文件ceph142_write.txt试试

[root@ceph142~]# echo ceph_write_data-mysql > /wenzhiyong/data/mysql/ceph142_write.txt
[root@ceph142~]# tree /wenzhiyong/data/
/wenzhiyong/data/
├── mysql
│   ├── ceph142_write.txt
│   ├── mysql.txt
│   └── wordpress.txt
└── wordpress└── lost+found

4.立马去ceph143节点查看这个文件ceph142_write.txt,是看不到的

[root@ceph143~]# tree /wenzhiyong/data/
/wenzhiyong/data/
├── mysql
│   ├── mysql.txt
│   └── wordpress.txt
└── wordpress└── lost+found

3 块设备的快照管理

01 创建快照

1.ceph141创建测试的镜像

[root@ceph141 ~]# rbd create -s 2G zhiyong18-rbd/rbd-snap
[root@ceph141 ~]# rbd -p zhiyong18-rbd info rbd-snap | grep  "\sfeatures"features: layering, exclusive-lock, object-map, fast-diff, deep-flatten

2.ceph142客户端添加映射并挂载设备写入测试数据

[root@ceph142 ~]# rbd map zhiyong18-rbd/rbd-snap
/dev/rbd2 
[root@ceph142~]# mkfs.xfs /dev/rbd2 
meta-data=/dev/rbd2              isize=512    agcount=8, agsize=65536 blks=                       sectsz=512   attr=2, projid32bit=1=                       crc=1        finobt=1, sparse=1, rmapbt=0=                       reflink=1    bigtime=0 inobtcount=0
data     =                       bsize=4096   blocks=524288, imaxpct=25=                       sunit=16     swidth=16 blks
naming   =version 2              bsize=4096   ascii-ci=0, ftype=1
log      =internal log           bsize=4096   blocks=2560, version=2=                       sectsz=512   sunit=16 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
Discarding blocks...Done.
[root@ceph142~]# ll /mnt/
total 0

3.客户端往里面写入文件进行测试

[root@ceph142~]# ll /dev/rbd*
brw-rw---- 1 root disk 252,  0 Nov  5 19:06 /dev/rbd0
brw-rw---- 1 root disk 252, 16 Nov  5 19:06 /dev/rbd1
brw-rw---- 1 root disk 252, 32 Nov  5 20:21 /dev/rbd2[root@ceph142~]# df -h | grep mnt
/dev/rbd2       2.0G   47M  2.0G   3% /mnt[root@ceph142~]# cp /etc/os-release /etc/fstab /etc/hosts /mnt/[root@ceph142~]# ll /mnt/
-rw-r--r-- 1 root root 604 Nov  5 20:23 fstab
-rw-r--r-- 1 root root 279 Nov  5 20:23 hosts
-rw-r--r-- 1 root root 386 Nov  5 20:23 os-release

4.在ceph服务端创建快照,查看快照信息。

[root@ceph141~]# rbd snap create zhiyong18-rbd/rbd-snap --snap zhiyong-`date +%F_%T`-v1
Creating snap: 100% complete...done.
[root@ceph141~]# rbd info zhiyong18-rbd/rbd-snap | grep snapshot_countsnapshot_count: 1
[root@ceph141~]# rbd snap list zhiyong18-rbd/rbd-snap
SNAPID  NAME                            SIZE   PROTECTED  TIMESTAMP               4  zhiyong-2024-11-05_20:24:51-v1  2 GiB             Tue Nov  5 20:24:52 2024

5.ceph142接着删除2个文件做测试,看最后能否找回

[root@ceph142~]# rm -f /mnt/{fstab,os-release}
[root@ceph142~]# ll /mnt/
-rw-r--r-- 1 root root 279 Nov  5 20:23 hosts

02 客户端取消块设备的锁

1.客户端删除映射前在服务端查看块设备镜像是否被锁住,注意LOCK字段是否有"excl"属性;如果客户端不取消块设备映射就无法释放锁

[root@ceph141~]# rbd -p zhiyong18-rbd ls -l
NAME                                     SIZE   PARENT  FMT  PROT  LOCK
mysqld                                   5 GiB            2        excl
rbd-snap                                 2 GiB            2        excl
rbd-snap@zhiyong-2024-11-05_20:24:51-v1  2 GiB            2            
wordpress                                2 GiB            2        excl

在客户端ceph142节点取消挂载,最后取消映射

[root@ceph142~]# df -h | grep  mnt
/dev/rbd2       2.0G   47M  2.0G   3% /mnt
[root@ceph142~]# umount /mnt 
[root@ceph142~]# df -h | grep  mnt
[root@ceph142~]# ls /dev/rbd2
/dev/rbd2
[root@ceph142~]# rbd unmap zhiyong18-rbd/rbd-snap
[root@ceph142~]# ls /dev/rbd2
ls: cannot access '/dev/rbd2': No such file or directory

03 执行快照回滚

1.客户端删除映射后在服务端查看镜像是否被锁住,已经没有excl属性了,成功释放锁

[root@ceph141~]# rbd -p zhiyong18-rbd ls -l | grep -i rbd-snap
rbd-snap                                 2 GiB            2            
rbd-snap@zhiyong-2024-11-05_20:24:51-v1  2 GiB            2

2.基于之前的快照信息执行回滚操作以恢复数据;回滚前先查看确认快照名称

[root@ceph141~]# rbd snap list zhiyong18-rbd/rbd-snap
SNAPID  NAME                            SIZE   PROTECTED  TIMESTAMP               4  zhiyong-2024-11-05_20:24:51-v1  2 GiB             Tue Nov  5 20:24:52 2024
[root@ceph141~]# rbd snap rollback  zhiyong18-rbd/rbd-snap --snap zhiyong-2024-11-05_20:24:51-v1
Rolling back to snapshot: 100% complete...done.

04 验证找回的数据

随机找一个客户端重新挂载块设备文件,验证数据是否找回

1.由于在之前的Ubuntu使用ceph块设备案例中,ceph143使用了块设备并写入了文件;为排除干扰,然ceph143取消使用。(如果没有挂载的话,就不用取消了)

[root@ceph143~]# rm -rf /wenzhiyong/data/mysql/* /wenzhiyong/data/wordpress/*[root@ceph143~]# umount /wenzhiyong/data/mysql /wenzhiyong/data/wordpress [root@ceph143~]# df -h | grep wen[root@ceph143~]# rbd unmap zhiyong18-rbd/mysqld
[root@ceph143~]# rbd unmap zhiyong18-rbd/wordpress

2.挂载前确认设备编号,挂载后数据找回成功

[root@ceph143~]# ls /dev/rbd*
/dev/rbd0/dev/rbd:
zhiyong18-rbd
[root@ceph143~]# mount /dev/rbd0 /mnt/
[root@ceph143~]# ll /mnt/
-rw-r--r-- 1 root root 604 Nov  5 20:23 fstab
-rw-r--r-- 1 root root 279 Nov  5 20:23 hosts
-rw-r--r-- 1 root root 386 Nov  5 20:23 os-release

05 快照的删除

前面提到了快照的创建,还没说快照的删除。现在就演示一下。还是那句话,这些操作在web页面可以轻松执行,也不用记难记的命令

[root@ceph141~]# rbd snap list zhiyong18-rbd/rbd-snap
SNAPID  NAME                            SIZE   PROTECTED  TIMESTAMP               4  zhiyong-2024-11-05_20:24:51-v1  2 GiB             Tue Nov  5 20:24:52 2024
[root@ceph141~]# rbd snap rm zhiyong18-rbd/rbd-snap --snap zhiyong-2024-11-05_20:24:51-v1
Removing snap: 100% complete...done.

06 快照数量限制

1.创建rbd设备,再对快照数量限制为3。

[root@ceph141~]# rbd create -s 5G zhiyong18-rbd/zhiyong
[root@ceph141~]# rbd info zhiyong18-rbd/zhiyong | egrep "snapshot_count|snapshot_limit"snapshot_count: 0
[root@ceph141~]# rbd snap limit set zhiyong18-rbd/zhiyong --limit 3
[root@ceph141~]# rbd info zhiyong18-rbd/zhiyong | egrep "snapshot_count|snapshot_limit"snapshot_count: 0snapshot_limit: 3

2.连续创建3个快照,创建第4个时提示数量限制了

[root@ceph141~]# rbd snap create zhiyong18-rbd/zhiyong --snap v1
Creating snap: 100% complete...done.
[root@ceph141~]# rbd snap create zhiyong18-rbd/zhiyong --snap v2
Creating snap: 100% complete...done.
[root@ceph141~]# rbd snap create zhiyong18-rbd/zhiyong --snap v3
Creating snap: 100% complete...done.
[root@ceph141~]# rbd snap create zhiyong18-rbd/zhiyong --snap v4
Creating snap: 10% complete...failed.
rbd: failed to create snapshot: (122) Disk quota exceeded

3.清除创建快照的数量限制

[root@ceph141~]# rbd info zhiyong18-rbd/zhiyong | egrep "snapshot_count|snapshot_limit"snapshot_count: 3snapshot_limit: 3
[root@ceph141~]# rbd snap limit clear zhiyong18-rbd/zhiyong
[root@ceph141~]# rbd info zhiyong18-rbd/zhiyong | egrep "snapshot_count|snapshot_limit"snapshot_count: 3

4.限制快照数量限制解除成功,可以超过限制时的3了

[root@ceph141~]# rbd snap create zhiyong18-rbd/zhiyong --snap v4
Creating snap: 100% complete...done.
[root@ceph141~]# rbd snap create zhiyong18-rbd/zhiyong --snap v5
Creating snap: 100% complete...done.
[root@ceph141~]# rbd snap create zhiyong18-rbd/zhiyong --snap v6
Creating snap: 100% complete...done.
[root@ceph141~]# rbd snap list zhiyong18-rbd/zhiyong
SNAPID  NAME  SIZE   PROTECTED  TIMESTAMP               6  v1    5 GiB             Tue Nov  5 21:31:44 20247  v2    5 GiB             Tue Nov  5 21:31:47 20248  v3    5 GiB             Tue Nov  5 21:31:49 202411  v4    5 GiB             Tue Nov  5 21:34:21 202412  v5    5 GiB             Tue Nov  5 21:34:24 202413  v6    5 GiB             Tue Nov  5 21:34:27 2024

相关文章:

ceph的RBD管理

0 块设备介绍 Ceph 的块设备(Ceph Block Device, RBD)是其存储服务的一种实现形式,通过 librbd 库或 Linux 内核模块提供块设备支持,所以可以与主流云平台(如 OpenStack)、虚拟化平台(如 KVM&a…...

【数论】莫比乌斯函数及其反演

文章目录 一、介绍二、莫比乌斯函数的算法求解三、例题 在学习之前,先来了解一下常见定义吧(OVO): 常见数论函数分为两种: { 完全积性函数:对于任意 p , q ∈ N ,有 f ( p ⋅ q ) f ( p ) ⋅ …...

低音运行,约克VRF中央空调让居家生活静享安宁

不仅节能省电,约克VRF中央空调还特别注重运行的静音效果,低至17dB超低运行噪音,让你在享受舒适环境的同时,也能拥有宁静的居家氛围。无论是工作、学习还是休息,都不受噪音干扰。...

使用 Ansys LS-DYNA 进行玻璃瓶包装跌落分析

使用 Ansys LS-DYNA 进行玻璃瓶包装跌落分析 玻璃瓶包装跌落分析 使用两个玻璃瓶,其中一个为纸盒包装,用来演示包装效果。 Johnson–Holmquist 损伤模型用于玻璃 (MAT_JOHNSON_HOLMQUIST_CERAMICS)纸箱包装采用各向同性弹性材料模型。瓶子将从 300 毫米…...

Windows系统编程 - 进程遍历

文章目录 前言进程的遍历CreateToolhelp32SnapshotProcess32FirstProcess32Next进程遍历 总结 前言 各位师傅好,我是qmx_07,今天给大家讲解进程遍历的相关知识点 进程的遍历 快照:使用vmware虚拟机的时候,经常需要配置环境服务…...

【电路笔记 TMS320F28335DSP】时钟+看门狗+相关寄存器(功能模块使能、时钟频率配置、看门狗配置)

时钟源和主时钟(SYSCLKOUT) 外部晶振:通常使用外部晶振(如 20 MHz)作为主要时钟源。内部振荡器:还可以选择内部振荡器(INTOSC1 和 INTOSC2),适合无需高精度外部时钟的应…...

gt730是什么显卡?gt730显卡性能参数介绍

NVIDIA GeForce GT 730是一款入门级图形卡,于2014年推出,基于40纳米工艺和GF108图形处理器。尽管它支持DirectX 12,但功能级别仅为11_0,这可能会在新的DirectX 12标题中造成问题。GT 730具有96个着色单元,16个纹理映射…...

Swift内存访问冲突

内存的访问,发生在给变量赋值的时候,或者传递值(给函数)的时候,例如 var one 1//向one的内存区域发起一次写的操作 print("\(one)")//向one的内存区域发起一次读的操作 在 Swift 里,有很多修改…...

2024.6使用 UMLS 集成的基于 CNN 的文本索引增强医学图像检索

Enhancing Medical Image Retrieval with UMLS-Integrated CNN-Based Text Indexing 问题 医疗图像检索中,图像与相关文本的一致性问题,如患者有病症但影像可能无明显异常,影响图像检索系统准确性。传统的基于文本的医学图像检索&#xff0…...

力扣刷题--21.合并两个有序链表

I am the best !!! 题目描述 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例 1: 输入:l1 [1,2,4], l2 [1,3,4] 输出:[1,1,2,3,4,4] 示例 2…...

Diving into the STM32 HAL-----DAC笔记

根据所使用的系列和封装,STM32微控制器通常只提供一个具有一个或两个专用输出的DAC,除了STM32F3系列中的少数零件编号实现两个DAC,第一个具有两个输出,另一个只有一个输出。STM32G4 系列的一些较新的 MCU 甚至提供多达 5 个独立的…...

每日一题 LCR 078. 合并 K 个升序链表

LCR 078. 合并 K 个升序链表 使用二分法就可以解决 class Solution { public:ListNode* mergeKLists(vector<ListNode*>& lists) {int n lists.size();if(n 0){return nullptr;}ListNode* ans ;ans binMerge(lists,0,n-1);return ans;}ListNode* binMerge(vector…...

如何在分布式环境中实现高可靠性分布式锁

目录 一、简单了解分布式锁 &#xff08;一&#xff09;分布式锁&#xff1a;应对分布式环境的同步挑战 &#xff08;二&#xff09;分布式锁的实现方式 &#xff08;三&#xff09;分布式锁的使用场景 &#xff08;四&#xff09;分布式锁需满足的特点 二、Redis 实现分…...

如何利用java爬虫获得淘宝商品评论

在当今数字化时代&#xff0c;数据的价值日益凸显&#xff0c;尤其是对于电商平台而言&#xff0c;商品评论作为用户反馈的重要载体&#xff0c;蕴含着丰富的信息。本文将详细介绍如何利用Java爬虫技术获取淘宝商品评论&#xff0c;包括代码示例和关键步骤解析。 淘宝商品评论的…...

SQLAlchemy,ORM的Python标杆!

嗨&#xff0c;Python的小伙伴们&#xff01;今天咱们来了解 SQLAlchemy&#xff0c;这可是对象关系映射&#xff08;ORM&#xff09;里的超级标杆哦&#xff01;它就像一座神奇的桥梁&#xff0c;能让我们用 Python 代码轻松地和数据库打交道&#xff0c;不用写复杂的 SQL 语句…...

时序论文23|ICML24谷歌开源零样本时序大模型TimesFM

论文标题&#xff1a;A DECODER - ONLY FOUNDATION MODEL FOR TIME - SERIES FORECASTING 论文链接&#xff1a;https://arxiv.org/abs/2310.10688 论文链接&#xff1a;https://github.com/google-research/timesfm 前言 谷歌这篇时间序列大模型很早之前就在关注&#xff…...

java http body的格式 ‌application/x-www-form-urlencoded‌不支持文件上传

在Java中&#xff0c;HTTP请求的body部分可以包含多种格式的数据&#xff0c;主要包括以下几种‌&#xff1a; ‌application/x-www-form-urlencoded‌&#xff1a;这种格式将数据编码成键值对的形式&#xff0c;键和值都进行了URL编码&#xff0c;键值对之间用&符号连接。…...

【头歌实训:利用kmp算法求子串在主串中不重叠出现的次数】

头歌实训&#xff1a;利用kmp算法求子串在主串中不重叠出现的次数 文章目录 任务描述编程要求测试说明输入格式输出格式样例输入1样例输出1样例输入2样例输出2 源代码&#xff1a; 任务描述 本关任务&#xff1a;编写一个程序&#xff0c;利用kmp算法求子串在主串中不重叠出现…...

WPF动画

在 WPF&#xff08;Windows Presentation Foundation&#xff09;中&#xff0c;主要有两种类型的动画&#xff1a;属性动画&#xff08;Property Animation&#xff09;和关键帧动画&#xff08;Key - Frame Animation&#xff09;。属性动画用于简单地从一个起始值平滑地过渡…...

Kafka 分区分配及再平衡策略深度解析与消费者事务和数据积压的简单介绍

Kafka&#xff1a;分布式消息系统的核心原理与安装部署-CSDN博客 自定义 Kafka 脚本 kf-use.sh 的解析与功能与应用示例-CSDN博客 Kafka 生产者全面解析&#xff1a;从基础原理到高级实践-CSDN博客 Kafka 生产者优化与数据处理经验-CSDN博客 Kafka 工作流程解析&#xff1a…...

如何在 UniApp 中实现 iOS 版本更新检测

随着移动应用的不断发展&#xff0c;保持应用程序的更新是必不可少的&#xff0c;这样用户才能获得更好的体验。本文将帮助你在 UniApp 中实现 iOS 版的版本更新检测和提示&#xff0c;适合刚入行的小白。我们将分步骤进行说明&#xff0c;每一步所需的代码及其解释都会一一列出…...

Android 14.0 kenel中修改rom系统内部存储的大小

1. 前言 在14.0的系统rom产品开发定制中,在对一些产品开发中的配置需求方面,由于在产品后续订单中,有些产品是出口的,但是硬件方面已经定板,时间比较仓促,所以 就需要软件方面在rom内部存储的大小方面作假,修改rom真实的大小容量,所以就需要在kenel驱动部分来修改这部分…...

JavaScript 函数

JavaScript中也可以使用函数&#xff0c;但是使用的方法有些不同&#xff1b;需要使用function关键字定义一个函数&#xff08;或者使用匿名函数或者箭头函数&#xff09;。但是需要特别注意的是&#xff1a;在类中定义函数时&#xff0c;一定不可以使用箭头函数&#xff0c;因…...

js+new Date()+moment+时区

文章目录 概要一、Date对象基础知识1. 创建Date对象2. 获取日期和时间信息3. 设置日期和时间 二、Date对象的应用1. 日期格式化2. 时间差计算3. 倒计时功能 moment.jsmoment 常见场景应用时区差别亚洲欧洲美洲大洋洲 时区时间说明 概要 一、Date对象基础知识 1. 创建Date对象…...

OpenCV、YOLO、VOC、COCO之间的关系和区别

OpenCV、YOLO、COCO 和 VOC 是计算机视觉和深度学习领域常见的几个名词&#xff0c;它们分别代表不同的工具、算法和数据集&#xff0c;之间有一些联系和区别。下面分别说明它们的定义、用途以及相互关系。 1. OpenCV&#xff08;Open Source Computer Vision Library&#xf…...

迁移学习理论与应用

迁移学习&#xff08;Transfer Learning&#xff09;是一种机器学习技术&#xff0c;旨在将一个任务&#xff08;源任务&#xff09;上学到的知识迁移到另一个相关但不完全相同的任务&#xff08;目标任务&#xff09;上&#xff0c;从而提高目标任务的学习效果。这种方法的核心…...

Python-简单病毒程序合集(一)

前言&#xff1a;简单又有趣的Python恶搞代码&#xff0c;往往能给我们枯燥无味的生活带来一点乐趣&#xff0c;激发我们对编程的最原始的热爱。那么话不多说&#xff0c;我们直接开始今天的编程之路。 编程思路&#xff1a;本次我们将会用到os,paltform,threading,ctypes,sys,…...

AI安全:从现实关切到未来展望

近年来&#xff0c;人工智能技术飞速发展&#xff0c;从简单的图像识别到生成对话&#xff0c;从自动驾驶到医疗诊断&#xff0c;AI技术正深刻改变着我们的生活。然而&#xff0c;伴随着这些进步&#xff0c;AI的安全性和可控性问题也日益凸显。这不仅涉及技术层面的挑战&#…...

集成金蝶云星空数据至MySQL的完整案例解析

金蝶云星空数据集成到MySQL的技术案例分享 在企业信息化系统中&#xff0c;数据的高效流动和准确同步是确保业务连续性和决策支持的重要环节。本文将聚焦于一个具体的系统对接集成案例——金蝶云星空的数据集成到MySQL&#xff0c;方案名称为“2金蝶物料同步到商城中间表”。 …...

C++格式化输入输出【练习版】

一、引言 在 C 编程中&#xff0c;准确地进行输入输出操作是构建功能强大且用户友好程序的关键。格式化输入输出允许我们以特定的格式展示数据&#xff0c;确保数据的可读性和准确性。本文将深入探讨 C 的格式化输入输出&#xff0c;通过丰富的练习例题和详细的答案解析&#x…...

aws服务(二)机密数据存储

在AWS&#xff08;Amazon Web Services&#xff09;中存储机密数据时&#xff0c;安全性和合规性是最重要的考虑因素。AWS 提供了多个服务和工具&#xff0c;帮助用户确保数据的安全性、机密性以及合规性。以下是一些推荐的存储机密数据的AWS服务和最佳实践&#xff1a; 一、A…...

CIO40: 回头再看ERP之“4问”

1、在数字化时代的今天&#xff0c;ERP现在的定位是&#xff1f; ERP软件财务化&#xff0c;我觉得是一个趋势&#xff0c;但是短期内&#xff08;2-3年&#xff09;ERP依然是企业的核心系统。这要看企业外部系统的建设情况&#xff0c;ERP系统的使用深度&#xff08;特别是一些…...

数据库类型介绍

1. 关系型数据库&#xff08;Relational Database, RDBMS&#xff09;&#xff1a; • 定义&#xff1a;基于关系模型&#xff08;即表格&#xff09;存储数据&#xff0c;数据之间通过外键等关系相互关联。 • 特点&#xff1a;支持复杂的SQL查询&#xff0c;数据一致性和完整…...

深入理解 Spring Boot 的 CommandLineRunner 原理及使用

引言 在开发 Spring Boot 应用程序时&#xff0c;我们经常需要在应用程序启动后执行一些初始化任务&#xff0c;比如加载初始数据、连接外部服务、执行健康检查等。Spring Boot 提供了 CommandLineRunner 接口&#xff0c;使得这些任务的实现变得非常简单和直观。本文将深入探…...

人工智能深度学习-Torch框架-数学运算

数学的基本操作 1.floor&#xff1a;向下取整 2.celi&#xff1a;向上取整 3.round&#xff1a;四舍五入&#xff0c;这里的四舍五入还要看前面整数的奇偶性&#xff0c;基进偶不进 4.trunc&#xff1a;只保留整数 5.frac&#xff1a;只保留小数部分 6.fix&#xff1a;向…...

操作系统的理解

目录 一、冯伊诺曼体系结构 二、操作系统的概念 三、如何理解“管理”&#xff1f; 四、系统调用和库调用的概念 一、冯伊诺曼体系结构 冯伊诺曼体系结构描述的是计算机硬件结构&#xff0c;相当于计算机的骨架。它大体可以分为4部分&#xff1a; 输入设备&#xff1a;键盘…...

SpringDataNeo4j使用详解

SDN快速入门 Spring Data Neo4j简称SDN&#xff0c;是Spring对Neo4j数据库操作的封装&#xff0c;其底层基于neo4j-java-driver实现。 我们使用的版本为&#xff1a;6.2.3&#xff0c;官方文档&#xff1a; 下面我们将基于项目中的运输路线业务进行学习&#xff0c;例如&#…...

undefined symbol: __nvJitLinkComplete_12_4, version libnvJitLink.so.12 问题解决

​ 在部署运行opencompass项目时遇到了如下报错&#xff1a; ImportError: /data/conda/envs/opencompass/lib/python3.10/site-packages/torch/lib/../../nvidia/cusparse/lib/libcusparse.so.12: undefined symbol: __nvJitLinkComplete_12_4, version libnvJitLink.so.12​…...

记一次:软著申请

前言&#xff1a;公司每年都有申请软著或者发明&#xff0c;可惜没有我的名字&#xff0c;没关系&#xff0c;我可以按个人的名义去申请一个&#xff0c;于是乎就有了这篇文章。话不多说&#xff0c;展示 之前还犹豫要不要发表一下&#xff0c;经过朋友的劝说&#xff0c;自己的…...

IntelliJ+SpringBoot项目实战(四)--快速上手数据库开发

对于新手学习SpringBoot开发&#xff0c;可能最急迫的事情就是尽快掌握数据库的开发。目前数据库开发主要流行使用Mybatis和Mybatis Plus,不过这2个框架对于新手而言需要一定的时间掌握&#xff0c;如果快速上手数据库开发&#xff0c;可以先按照本文介绍的方式使用JdbcTemplat…...

筑起数字堡垒:解析AWS高防盾(Shield)的全面防护能力

引言 在数字化时代&#xff0c;网络攻击的频率和复杂性持续增加。分布式拒绝服务&#xff08;DDoS&#xff09;攻击成为威胁在线业务的主要手段之一。AWS推出的高防盾&#xff08;AWS Shield&#xff09;是一项专注于DDoS防护的服务&#xff0c;帮助用户保护其应用程序和数据免…...

python语言基础

1. 基础语法 Q: Python 中的变量与数据类型有哪些&#xff1f; A: Python 支持多种数据类型&#xff0c;包括数字&#xff08;整数 int、浮点数 float、复数 complex&#xff09;、字符串 str、列表 list、元组 tuple、字典 dict 和集合 set。每种数据类型都有其特定的用途和…...

vue2 src_Todolist编辑($nextTick)

main.js //引入Vue import Vue from "vue"; //引入App import App from ./App;//关闭Vue的生产提示 Vue.config.productionTip false;new Vue({el: #app,render: h > h(App),beforeCreate() {//事件总线Vue.prototype.$bus this;} });App.vue <template>…...

复习!!!

前言&#xff1a; 今天好像没有复习什么&#xff0c;对了&#xff0c;老师让我们写作业来着 那个乌云漏洞网站真的好啊&#xff0c;虽然很老&#xff0c;但是有思路啊 乌云(WooYun.org)历史漏洞查询---http://WY.ZONE.CI 复习&#xff1a; 今天主要复习了nuclei工具的用法…...

面试题---深入源码理解MQ长轮询优化机制

引言 在分布式系统中&#xff0c;消息队列&#xff08;MQ&#xff09;作为一种重要的中间件&#xff0c;广泛应用于解耦、异步处理、流量削峰等场景。其中&#xff0c;延时消息和定时消息作为MQ的高级功能&#xff0c;能够进一步满足复杂的业务需求。为了实现这些功能&#xf…...

使用 PyTorch TunableOp 加速 ROCm 上的模型

Accelerating models on ROCm using PyTorch TunableOp — ROCm Blogs (amd.com) 在这篇博客中&#xff0c;我们将展示如何利用 PyTorch TunableOp 在 AMD GPU 上使用 ROCm 加速模型。我们将讨论通用矩阵乘法&#xff08;GEMM&#xff09;的基础知识&#xff0c;展示调优单个 G…...

配置Springboot+vue项目在ubuntu20.04

一、jdk1.8环境配置 (1) 安装jdk8&#xff1a; sudo apt-get install openjdk-8-jdk (2) 检查jdk是否安装成功&#xff1a; java -version(3) 设置JAVA_HOME&#xff1a; echo export JAVA_HOME/usr/lib/jvm/java-17-openjdk-amd64 >> ~/.bashrc echo export PATH$J…...

基于SpringBoot的在线教育系统【附源码】

基于SpringBoot的在线教育系统 效果如下&#xff1a; 系统登录页面 系统管理员主页面 课程管理页面 课程分类管理页面 用户主页面 系统主页面 研究背景 随着互联网技术的飞速发展&#xff0c;线上教育已成为现代教育的重要组成部分。在线教育系统以其灵活的学习时间和地点&a…...

国土安全部发布关键基础设施安全人工智能框架

美国国土安全部 (DHS) 发布建议&#xff0c;概述如何在关键基础设施中安全开发和部署人工智能 (AI)。 https://www.dhs.gov/news/2024/11/14/groundbreaking-framework-safe-and-secure-deployment-ai-critical-infrastructure 关键基础设施中人工智能的角色和职责框架 https:/…...

散户持股增厚工具:智能T0算法交易

最近市场很多都说牛市&#xff0c;但是大多数朋友怎么来的又怎么吐出去了。这会儿我们用T0的智能算法交易又可以增厚我们的持仓收益。简单来说&#xff0c;就是基于用户原有的股票持仓&#xff0c;针对同一标的&#xff0c;配合智能T0算法&#xff0c;每天全自动操作&#xff0…...