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

Ceph RBD使用

CephRBD使用

  • 一、RBD架构说明
  • 二、RBD相关操作
      • 1、创建存储池
      • 2、创建img镜像
          • 2.1 创建镜像
          • 2.1.2 查看镜像详细信息
          • 2.1.3 镜像其他特性
          • 2.1.4 镜像特性的启用和禁用
      • 3、配置客户端使用RBD
          • 3.1 客户端配置yum源
          • 3.2 客户端使用admin用户挂载并使用RBD
            • 3.2.1 同步admin账号认证文件
            • 3.2.2 客户端映射
          • 3.3 客户端使用普通用户挂载并使用RBD
            • 3.3.1 创建普通用户并授权
            • 3.3.2 安装ceph客户端
            • 3.3.3 同步普通用户认证文件
            • 3.3.4 验证权限
            • 3.3.5 映射rbd
            • 3.3.6 客户端验证
            • 3.3.7 删除数据
          • 3.4 rbd进行空间拉伸
          • 3.5 卸载和删除rbd镜像
          • 3.6 rbd镜像回收站机制
      • 4、镜像快照
          • 4.1 客户端当前数据
          • 4.2 创建并验证快照
          • 4.3 删除数据并还原数据
          • 4.4 客户端验证数据
          • 4.5 删除快照
          • 4.6 快照数量限制

一、RBD架构说明

Ceph可以同时提供RADOSGW(对象存储网关)、RBD(块存储)、CephFS(文件存储),RBD就是RADOS Block Device的简称,RBD块存储是常用的存储类型之一,RBD块设备类似磁盘可以被挂载,RBD块设备具有快照、多副本、克隆和一致性等特性,数据以条带化的方式存储在Ceph集群的多个OSD中。

条带化技术就是一种自动的将 I/O 的负载均衡到多个物理磁盘上的技术,条带化技术就是将一块连续的数据分成很多小部分并把他们分别存储到不同磁盘上去。这就能使多个进程同时访问数据的多个不同部分而不会造成磁盘冲突,而且在需要对这种数据进行顺序访问的时候可以获得最大程度上的 I/O 并行能力,从而获得非常好的性能。

在这里插入图片描述

RBD存储流程:

写操作:

  1. 客户端请求:客户端通过RBD接口向Ceph集群发出写操作请求。
  2. 数据分布计算:客户端通过CRUSH算法计算数据需要写入的OSD
  3. 写入数据:客户端将数据写入到计算出的OSD上,并且根据配置将数据复制到其他OSD,实现数据高可用。
  4. 确认写入:所有OSD数据写入完成,客户端收到成功响应。

读操作

  1. 客户端请求: 客户端通过 RBD 接口向 Ceph 集群发出读操作请求。
  2. 数据位置计算: 客户端通过 CRUSH 算法计算数据所在的 OSD。
  3. 读取数据: 客户端从计算出的 OSD 上读取数据。
  4. 返回数据: OSD 将数据返回给客户端。

二、RBD相关操作

1、创建存储池

#创建存储池:
cephadmin@ceph-deploy:~/ceph-cluster$ ceph osd pool create rbd-k8s1 128 128 
pool 'rbd-k8s1' created# 验证存储池
cephadmin@ceph-deploy:~/ceph-cluster$ ceph osd pool ls 
.mgr
myrbd1
.rgw.root
default.rgw.log
default.rgw.control
default.rgw.meta
cephfs-metadata
cephfs-data
mypool
rbd-k8s1#在存储池启用rbd:
cephadmin@ceph-deploy:~/ceph-cluster$ ceph osd pool application enable rbd-k8s1 rbd 
enabled application 'rbd' on pool 'rbd-k8s1'# 初始化rbd:
cephadmin@ceph-deploy:~/ceph-cluster$ rbd pool init -p rbd-k8s1 

命令详解:
1、ceph osd pool create rbd-k8s1 128 128
这是 ceph 命令行工具用于管理对象存储设备(OSD)池的子命令。pool 是一个逻辑存储分区,可以包含大量的对象,用于组织和管理存储数据。
rbd-data1:新创建的存储池名称。
32 32:

  • 前面的数字代表pg:表示创建池时将其划分为多少个放置组(PG)。每一个pg是一个逻辑分区,用于组织对象数据,并且数据在集群中的OSD上分布和复制都是以PG为单位进行。
  • 后面的数字用于放置对象数据的PG数量。通常在池创建时,PG和PGP是相同的

2、ceph osd pool application enable rbd-k8s1 rbd
这个命令用于在 Ceph 集群中启用特定应用程序(如 RBD)对某个存储池的访问权限。

2、创建img镜像

rbd 存储池并不能直接用于块设备,而是需要事先在其中按需创建映像(image),并把映像文件作为块设备使用。rbd 命令可用于创建、查看及删除块设备相在的映像(image),以及克隆映像、创建快照、将映像回滚到快照和查看快照等管理操作。例如,下面的命令能够在指定的 RBD 即 rbd-k8s1 创建一个名为 k8s-image1 的映像:

2.1 创建镜像
# 创建两镜像
cephadmin@ceph-deploy:~/ceph-cluster$ rbd create data-image-k8s1 --size 20G --pool rbd-k8s1 --image-format 2 --image-feature layering 
cephadmin@ceph-deploy:~/ceph-cluster$ 
cephadmin@ceph-deploy:~/ceph-cluster$ rbd create data-image-k8s2 --size 20G --pool rbd-k8s1 --image-format 2 --image-feature layering 
# 验证镜像
cephadmin@ceph-deploy:~/ceph-cluster$ rbd ls --pool rbd-k8s1
data-image-k8s1
data-image-k8s2
cephadmin@ceph-deploy:~/ceph-cluster$ rbd ls --pool rbd-k8s1 -l
NAME             SIZE    PARENT  FMT  PROT  LOCK
data-image-k8s1  20 GiB            2            
data-image-k8s2  20 GiB            2        
2.1.2 查看镜像详细信息
cephadmin@ceph-deploy:~/ceph-cluster$ rbd --image data-image-k8s1 --pool rbd-k8s1 info
rbd image 'data-image-k8s1':size 20 GiB in 5120 objectsorder 22 (4 MiB objects)snapshot_count: 0id: b1eb383b76b7block_name_prefix: rbd_data.b1eb383b76b7format: 2features: layeringop_features: flags: create_timestamp: Mon Sep  2 16:49:42 2024access_timestamp: Mon Sep  2 16:49:42 2024modify_timestamp: Mon Sep  2 16:49:42 2024
cephadmin@ceph-deploy:~/ceph-cluster$ 
cephadmin@ceph-deploy:~/ceph-cluster$ rbd --image data-image-k8s2 --pool rbd-k8s1 info
rbd image 'data-image-k8s2':size 20 GiB in 5120 objectsorder 22 (4 MiB objects)snapshot_count: 0id: b1f1b39acb7fblock_name_prefix: rbd_data.b1f1b39acb7fformat: 2features: layeringop_features: flags: create_timestamp: Mon Sep  2 16:49:55 2024access_timestamp: Mon Sep  2 16:49:55 2024modify_timestamp: Mon Sep  2 16:49:55 2024

以json格式显示镜像信息

cephadmin@ceph-deploy:~/ceph-cluster$ rbd ls --pool rbd-k8s1 -l --format json --pretty-format
[{"image": "data-image-k8s1","id": "b1eb383b76b7","size": 21474836480,"format": 2},{"image": "data-image-k8s2","id": "b1f1b39acb7f","size": 21474836480,"format": 2}
]
2.1.3 镜像其他特性

#特性简介

  • layering: 支持镜像分层快照特性,用于快照及写时复制,可以对 image 创建快照并保护,然后从快照克隆出新的 image
    出来,父子 image 之间采用 COW 技术,共享对象数据。
  • striping: 支持条带化 v2,类似 raid 0,只不过在 ceph 环境中的数据被分散到不同的对象中,可改善顺序读写场景较多情况下的性能。
  • exclusive-lock: 支持独占锁,限制一个镜像只能被一个客户端使用。
  • object-map: 支持对象映射(依赖 exclusive-lock),加速数据导入导出及已用空间统计等,此特性开启的时候,会记录 image 所有对象的一个位图,用以标记对象是否真的存在,在一些场景下可以加速 io。
  • fast-diff: 快速计算镜像与快照数据差异对比(依赖 object-map)。
  • deep-flatten: 支持快照扁平化操作,用于快照管理时解决快照依赖关系等。
  • journaling: 修改数据是否记录日志,该特性可以通过记录日志并通过日志恢复数据(依赖独占锁),开启此特性会增加系统磁盘 IO 使用。

jewel 默认开启的特性包括: layering/exlcusive lock/object map/fast diff/deep flatten

2.1.4 镜像特性的启用和禁用

启用:

#启用指定存储池中的指定镜像的特性:
$ rbd feature enable exclusive-lock --pool rbd-data1 --image data-img1
$ rbd feature enable object-map --pool rbd-data1 --image data-img1
$ rbd feature enable fast-diff --pool rbd-data1 --image data-img1
#验证镜像特性:
cephadmin@ceph-deploy:~/ceph-cluster$ rbd --image data-image-k8s1 --pool rbd-k8s1 info 
rbd image 'data-image-k8s1':size 20 GiB in 5120 objectsorder 22 (4 MiB objects)snapshot_count: 0id: b1eb383b76b7block_name_prefix: rbd_data.b1eb383b76b7format: 2features: layering, exclusive-lock, object-map, fast-diffop_features: flags: object map invalid, fast diff invalidcreate_timestamp: Mon Sep  2 16:49:42 2024access_timestamp: Mon Sep  2 16:49:42 2024modify_timestamp: Mon Sep  2 16:49:42 2024

禁用:

#禁用指定存储池中指定镜像的特性:
$ rbd feature disable fast-diff --pool rbd-data1 --image data-img1
#验证镜像特性:
cephadmin@ceph-deploy:~/ceph-cluster$ rbd --image data-image-k8s1 --pool rbd-k8s1 info 
rbd image 'data-image-k8s1':size 20 GiB in 5120 objectsorder 22 (4 MiB objects)snapshot_count: 0id: b1eb383b76b7block_name_prefix: rbd_data.b1eb383b76b7format: 2features: layering, exclusive-lockop_features: flags: create_timestamp: Mon Sep  2 16:49:42 2024access_timestamp: Mon Sep  2 16:49:42 2024modify_timestamp: Mon Sep  2 16:49:42 2024

3、配置客户端使用RBD

在ubuntu2204客户端挂载RBD,并分别使用admin及普通用户挂载RBD并验证使用

3.1 客户端配置yum源

客户端想使用ceph RBD,需要安装Ceph客户端组件ceph-common

root@ceph-node3:~# apt install ceph-common
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
ceph-common is already the newest version (18.2.4-1jammy).
ceph-common set to manually installed.
0 upgraded, 0 newly installed, 0 to remove and 6 not upgraded.
3.2 客户端使用admin用户挂载并使用RBD
3.2.1 同步admin账号认证文件
#从部署服务器同步认证文件:
[cephadmin@ceph-deploy ceph-cluster]$ scp ceph.conf ceph.client.admin.keyring root@192.168.31.58:/etc/ceph/
3.2.2 客户端映射
root@ceph-node3:~# rbd -p rbd-k8s1 map data-image-k8s1 
/dev/rbd0
root@ceph-node3:~# rbd -p rbd-k8s1 map data-image-k8s2 
/dev/rbd1

客户端验证镜像

root@ceph-node3:~# 
root@ceph-node3:~# lsblk
NAME                                                                                    MAJ:MIN RM   SIZE RO TYPE MOUNTPOINTS
fd0                                                                                       2:0    1     4K  0 disk 
loop0                                                                                     7:0    0     4K  1 loop /snap/bare/5
loop1                                                                                     7:1    0  74.3M  1 loop /snap/core22/1564
loop2                                                                                     7:2    0  74.3M  1 loop /snap/core22/1586
loop3                                                                                     7:3    0 266.6M  1 loop /snap/firefox/3836
loop4                                                                                     7:4    0 269.8M  1 loop /snap/firefox/4793
loop5                                                                                     7:5    0   497M  1 loop /snap/gnome-42-2204/141
loop6                                                                                     7:6    0 505.1M  1 loop /snap/gnome-42-2204/176
loop7                                                                                     7:7    0  91.7M  1 loop /snap/gtk-common-themes/1535
loop8                                                                                     7:8    0  12.3M  1 loop /snap/snap-store/959
loop9                                                                                     7:9    0  40.4M  1 loop /snap/snapd/20671
loop10                                                                                    7:10   0  38.8M  1 loop /snap/snapd/21759
loop11                                                                                    7:11   0   500K  1 loop /snap/snapd-desktop-integration/178
loop12                                                                                    7:12   0   452K  1 loop /snap/snapd-desktop-integration/83
loop13                                                                                    7:13   0  12.9M  1 loop /snap/snap-store/1113
sda                                                                                       8:0    0   200G  0 disk 
├─sda1                                                                                    8:1    0     1M  0 part 
├─sda2                                                                                    8:2    0   513M  0 part /boot/efi
└─sda3                                                                                    8:3    0 199.5G  0 part /var/snap/firefox/common/host-hunspell/
sr0                                                                                      11:0    1  1024M  0 rom  
sr1                                                                                      11:1    1   4.7G  0 rom  
rbd0                                                                                    251:0    0    20G  0 disk 
rbd1                                                                                    251:16   0    20G  0 disk 

格式化磁盘并挂载使用

root@ceph-node3:~# mkfs.xfs  /dev/rbd0 
meta-data=/dev/rbd0              isize=512    agcount=16, agsize=327680 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=5242880, 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@ceph-node3:~# mkfs.xfs  /dev/rbd1 
meta-data=/dev/rbd1              isize=512    agcount=16, agsize=327680 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=5242880, 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@ceph-node3:~# mkdir /data /data1 -p
root@ceph-node3:~# mount /dev/rbd0 /data 
root@ceph-node3:~# 
root@ceph-node3:~# mount /dev/rbd1 /data1 
root@ceph-node3:~# 
root@ceph-node3:~# df -h 
Filesystem      Size  Used Avail Use% Mounted on
tmpfs           1.6G  1.9M  1.6G   1% /run
/dev/sda3       196G   13G  173G   7% /
tmpfs           7.8G     0  7.8G   0% /dev/shm
tmpfs           5.0M  4.0K  5.0M   1% /run/lock
/dev/sda2       512M  6.1M  506M   2% /boot/efi
tmpfs           7.8G   28K  7.8G   1% /var/lib/ceph/osd/ceph-11
tmpfs           7.8G   28K  7.8G   1% /var/lib/ceph/osd/ceph-10
tmpfs           7.8G   28K  7.8G   1% /var/lib/ceph/osd/ceph-9
tmpfs           7.8G   28K  7.8G   1% /var/lib/ceph/osd/ceph-8
tmpfs           1.6G   44K  1.6G   1% /run/user/1000
/dev/rbd0        20G  176M   20G   1% /data
/dev/rbd1        20G  176M   20G   1% /data1

客户端验证写入数据

root@ceph-node3:/usr/local/pigz-2.8# apt install docker.io
root@ceph-node3:/usr/local/pigz-2.8# docker run -it -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -v /data:/var/lib/mysql mysql:5.6.46 
# 验证数据
root@ceph-node3:/usr/local/pigz-2.8# ll /data
total 110608
drwxr-xr-x  4  999 root      114  9月  3 08:33 ./
drwxr-xr-x 22 root root     4096  9月  3 08:07 ../
-rw-rw----  1  999  999       56  9月  3 08:33 auto.cnf
-rw-rw----  1  999  999 12582912  9月  3 08:33 ibdata1
-rw-rw----  1  999  999 50331648  9月  3 08:33 ib_logfile0
-rw-rw----  1  999  999 50331648  9月  3 08:32 ib_logfile1
drwx------  2  999  999     4096  9月  3 08:33 mysql/
drwx------  2  999  999     4096  9月  3 08:33 performance_schema/

验证mysql访问。测试数据库访问及创建数据库

root@ceph-node3:/usr/local/pigz-2.8# mysql -uroot -p -h 192.168.31.58 
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.6.46 MySQL Community Server (GPL)Copyright (c) 2000, 2024, Oracle and/or its affiliates.Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.mysql> 
mysql> show databases ;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
+--------------------+
3 rows in set (0.00 sec)mysql> create database test;
Query OK, 1 row affected (0.01 sec)mysql> show databases ;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| test               |
+--------------------+
4 rows in set (0.00 sec)mysql> exit 
Bye
root@ceph-node3:/usr/local/pigz-2.8# ll /data
total 110608
drwxr-xr-x  5  999 root      126  9月  3 08:36 ./
drwxr-xr-x 22 root root     4096  9月  3 08:07 ../
-rw-rw----  1  999  999       56  9月  3 08:33 auto.cnf
-rw-rw----  1  999  999 12582912  9月  3 08:33 ibdata1
-rw-rw----  1  999  999 50331648  9月  3 08:33 ib_logfile0
-rw-rw----  1  999  999 50331648  9月  3 08:32 ib_logfile1
drwx------  2  999  999     4096  9月  3 08:33 mysql/
drwx------  2  999  999     4096  9月  3 08:33 performance_schema/
drwx------  2  999  999       20  9月  3 08:36 test/

在这里插入图片描述
可以看到rbd数据已更新到/data
查看存储池空间
在这里插入图片描述
在这里插入图片描述
excl 表示已经被客户端映射,所以施加了锁文件
可以验证ceph内核模块

root@ceph-node3:/usr/local/pigz-2.8# lsmod|grep ceph 
libceph               544768  1 rbd
libcrc32c              12288  5 nf_conntrack,nf_nat,nf_tables,xfs,libceph
3.3 客户端使用普通用户挂载并使用RBD
3.3.1 创建普通用户并授权
# 创建普通用户
cephadmin@ceph-deploy:~/ceph-cluster$ ceph auth add client.ymm mon 'allow r' osd 'allow rwx pool=rbd-k8s1'
added key for client.ymm
# 验证用户信息
cephadmin@ceph-deploy:~/ceph-cluster$ ceph auth get client.ymm
[client.ymm]key = AQDXWtZmUuRBLxAARePv0/WIeQd+/Oi3VCuExg==caps mon = "allow r"caps osd = "allow rwx pool=rbd-k8s1"
# 创建keyring文件
cephadmin@ceph-deploy:~/ceph-cluster$ ceph-authtool  --create-keyring ceph.client.ymm.keyring
creating ceph.client.ymm.keyring
cephadmin@ceph-deploy:~/ceph-cluster$ 
cephadmin@ceph-deploy:~/ceph-cluster$ ll
total 4780
drwxrwxr-x  2 cephadmin cephadmin    4096  9月  3 08:40 ./
drwxr-x--- 16 cephadmin cephadmin    4096  9月  2 14:14 ../
-rw-------  1 cephadmin cephadmin     113  8月 27 14:27 ceph.bootstrap-mds.keyring
-rw-------  1 cephadmin cephadmin     113  8月 27 14:27 ceph.bootstrap-mgr.keyring
-rw-------  1 cephadmin cephadmin     113  8月 27 14:27 ceph.bootstrap-osd.keyring
-rw-------  1 cephadmin cephadmin     113  8月 27 14:27 ceph.bootstrap-rgw.keyring
-rw-------  1 cephadmin cephadmin     151  8月 27 14:27 ceph.client.admin.keyring
-rw-------  1 cephadmin cephadmin       0  9月  2 16:16 ceph.client.wangwu.keyring
-rw-------  1 cephadmin cephadmin       0  9月  3 08:40 ceph.client.ymm.keyring
-rw-------  1 cephadmin cephadmin     151  9月  2 16:16 ceph.client.zhangsan.keyring
-rw-rw-r--  1 cephadmin cephadmin     315  8月 30 14:51 ceph.conf
-rw-rw-r--  1 cephadmin cephadmin 4847052  8月 30 14:51 ceph-deploy-ceph.log
-rw-------  1 cephadmin cephadmin      73  8月 27 11:07 ceph.mon.keyring
cephadmin@ceph-deploy:~/ceph-cluster$ # 导出用户keyring
cephadmin@ceph-deploy:~/ceph-cluster$ ceph auth get client.ymm -o ceph.client.ymm.keyring  
cephadmin@ceph-deploy:~/ceph-cluster$ 
cephadmin@ceph-deploy:~/ceph-cluster$ cat ceph.client.ymm.keyring 
[client.ymm]key = AQDXWtZmUuRBLxAARePv0/WIeQd+/Oi3VCuExg==caps mon = "allow r"caps osd = "allow rwx pool=rbd-k8s1"
3.3.2 安装ceph客户端
~# wget -q -O- 'https://mirrors.tuna.tsinghua.edu.cn/ceph/keys/release.asc' | sudo apt-key add - 
~# vim /etc/apt/sources.list 
~# apt install ceph-common
3.3.3 同步普通用户认证文件

将该用户的keyring文件拷贝到客户端

cephadmin@ceph-node4:/etc/ceph$ ll
total 32
drwxr-xr-x   2 root root  4096  9月  3 08:46 ./
drwxr-xr-x 135 root root 12288  9月  3 08:43 ../
-rw-------   1 root root   151  8月 30 14:51 ceph.client.admin.keyring
-rw-------   1 root root   121  9月  3 08:46 ceph.client.ymm.keyring
-rw-r--r--   1 root root   315  8月 30 14:51 ceph.conf
-rw-r--r--   1 root root    92  7月 12 23:42 rbdmap
-rw-------   1 root root     0  8月 27 16:03 tmprpbEIX
-rw-------   1 root root     0  8月 30 14:33 tmpVnBm4f
3.3.4 验证权限

认证文件的属主和属组为了安全考虑,默认设置为root用户和root组,如果需要ceph用户也能执行ceph命令,就需要对ceph用户进行授权

cephadmin@ceph-node4:/etc/ceph$ sudo apt install acl
cephadmin@ceph-node4:/etc/ceph$ sudo setfacl -m u:cephadmin:rw /etc/ceph/ceph.client.ymm.keyring 
cephadmin@ceph-node4:/etc/ceph$ 
cephadmin@ceph-node4:/etc/ceph$ 
cephadmin@ceph-node4:/etc/ceph$ ll
total 32
drwxr-xr-x    2 root root  4096  9月  3 08:46 ./
drwxr-xr-x  135 root root 12288  9月  3 08:43 ../
-rw-------    1 root root   151  8月 30 14:51 ceph.client.admin.keyring
-rw-rw----+   1 root root   121  9月  3 08:46 ceph.client.ymm.keyring
-rw-r--r--    1 root root   315  8月 30 14:51 ceph.conf
-rw-r--r--    1 root root    92  7月 12 23:42 rbdmap
-rw-------    1 root root     0  8月 27 16:03 tmprpbEIX
-rw-------    1 root root     0  8月 30 14:33 tmpVnBm4f
cephadmin@ceph-node4:/etc/ceph$ 
cephadmin@ceph-node4:/etc/ceph$ ceph --user ymm -s cluster:id:     74d6f368-8875-4340-857f-0daa3e96b5dchealth: HEALTH_WARN1 pool(s) do not have an application enabledservices:mon: 3 daemons, quorum ceph-mon1,ceph-mon2,ceph-mon3 (age 3d)mgr: ceph-mgr1(active, since 6d), standbys: ceph-mgr2mds: 1/1 daemons uposd: 16 osds: 16 up (since 3d), 16 in (since 4d)rgw: 1 daemon active (1 hosts, 1 zones)data:volumes: 1/1 healthypools:   10 pools, 353 pgsobjects: 416 objects, 153 MiBusage:   1.6 GiB used, 3.1 TiB / 3.1 TiB availpgs:     353 active+clean
3.3.5 映射rbd

使用普通用户权限映射rbd

# 如果报以下的错误说明内核模块没有加载
cephadmin@ceph-node4:/etc/ceph$ rbd --id ymm -p rbd-k8s1 map data-image-k8s1 
modprobe: ERROR: could not insert 'rbd': Operation not permitted
rbd: failed to load rbd kernel module (1)
rbd: failed to set udev buffer size: (1) Operation not permitted
rbd: sysfs write failed
In some cases useful info is found in syslog - try "dmesg | tail".
rbd: map failed: (2) No such file or directory# 查看rbd内核模块
cephadmin@ceph-node4:/etc/ceph$ lsmod  |grep rbd 
# 手动加载
cephadmin@ceph-node4:/etc/ceph$ sudo modprobe rbd
cephadmin@ceph-node4:/etc/ceph$ 
cephadmin@ceph-node4:/etc/ceph$ 
cephadmin@ceph-node4:/etc/ceph$ lsmod |grep rbd 
rbd                   126976  0
libceph               544768  1 rbdcephadmin@ceph-node4:/etc/ceph$ sudo -i
root@ceph-node4:~# 
root@ceph-node4:~# 
root@ceph-node4:~# rbd --id ymm -p rbd-k8s1 map data-image-k8s2
/dev/rbd1root@ceph-node4:~# fdisk -l /dev/rbd1
Disk /dev/rbd1: 20 GiB, 21474836480 bytes, 41943040 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 65536 bytes / 65536 bytesroot@ceph-node4:~# mkfs.xfs -f /dev/rbd1
meta-data=/dev/rbd1              isize=512    agcount=16, agsize=327680 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=5242880, 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@ceph-node4:~# mount /dev/rbd1 /data 
root@ceph-node4:~# 
root@ceph-node4:~# ll /data/
total 4
drwxr-xr-x  2 root root    6  9月  3 09:04 ./
drwxr-xr-x 21 root root 4096  9月  3 09:01 ../
3.3.6 客户端验证
root@ceph-node4:~# dd if=/dev/zero of=/data/ceph-test-file bs=1MB count=300
300+0 records in
300+0 records out
300000000 bytes (300 MB, 286 MiB) copied, 0.20067 s, 1.5 GB/s
root@ceph-node4:~# 
root@ceph-node4:~# ll /data/
total 292976
drwxr-xr-x  2 root root        28  9月  3 09:05 ./
drwxr-xr-x 21 root root      4096  9月  3 09:01 ../
-rw-r--r--  1 root root 300000000  9月  3 09:05 ceph-test-file

在这里插入图片描述

3.3.7 删除数据
root@ceph-node4:/data# rm -fr ceph-test-file 
root@ceph-node4:/data# 
root@ceph-node4:/data# ll
total 4
drwxr-xr-x  2 root root    6  9月  3 09:06 ./
drwxr-xr-x 21 root root 4096  9月  3 09:01 ../

删除完成的数据只是标记为已经被删除,但是不会从块存储立即清空,因此在删除完成后使用 ceph df 查看并没有回收空间:
在这里插入图片描述
但是后期可以使用此空间,如果需要立即在系统层回收空间,需要执行以下命令:

方式一:
root@ceph-node4:/data# fstrim -v /data 
/data: 20 GiB (21463613440 bytes) trimmed #/data 为挂载点,fstrim 命令来自于英文词组“filesystem trim”的缩写,其功能是回收文件系统中未使用的块资源。
方式二:
或者配置挂载选项
~]# rbd -p myrbd1 map myimg2
~]# mount -t xfs -o discard /dev/rbd0 /data/ #主要用于 SSD,立即触发闲置的块回收

在这里插入图片描述

3.4 rbd进行空间拉伸

可以扩展空间,不建议缩小空间

# 当前rbd镜像空间大小
root@ceph-node3:/usr/local/pigz-2.8# rbd ls -p rbd-k8s1 -l 
NAME             SIZE    PARENT  FMT  PROT  LOCK
data-image-k8s1  20 GiB            2        excl
data-image-k8s2  20 GiB            2     # 拉伸rbd镜像空间
root@ceph-node3:/usr/local/pigz-2.8# rbd resize --pool rbd-k8s1 --image data-image-k8s1 --size 50G 
Resizing image: 100% complete...done.
root@ceph-node3:/usr/local/pigz-2.8# rbd ls -p rbd-k8s1 -l 
NAME             SIZE    PARENT  FMT  PROT  LOCK
data-image-k8s1  50 GiB            2            
data-image-k8s2  20 GiB            2     root@ceph-node3:/usr/local/pigz-2.8# fdisk -l /dev/rbd0
Disk /dev/rbd0: 50 GiB, 53687091200 bytes, 104857600 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 65536 bytes / 65536 bytes
root@ceph-node3:/usr/local/pigz-2.8# 
root@ceph-node3:/usr/local/pigz-2.8# 
root@ceph-node3:/usr/local/pigz-2.8# 
root@ceph-node3:/usr/local/pigz-2.8# # resize2fs  /dev/rbd0  # 在node节点对ext4 磁盘符重新识别
root@ceph-node3:/usr/local/pigz-2.8# 
root@ceph-node3:/usr/local/pigz-2.8# xfs_growfs /data  # 在node节点对xfs磁盘挂载点重新识别
meta-data=/dev/rbd0              isize=512    agcount=16, agsize=327680 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=5242880, 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
data blocks changed from 5242880 to 13107200
root@ceph-node3:/usr/local/pigz-2.8# 
root@ceph-node3:/usr/local/pigz-2.8# df -h # 可以看到已经更新到50G了
Filesystem      Size  Used Avail Use% Mounted on
tmpfs           1.6G  2.0M  1.6G   1% /run
/dev/sda3       196G   14G  173G   8% /
tmpfs           7.8G     0  7.8G   0% /dev/shm
tmpfs           5.0M  4.0K  5.0M   1% /run/lock
/dev/sda2       512M  6.1M  506M   2% /boot/efi
tmpfs           7.8G   28K  7.8G   1% /var/lib/ceph/osd/ceph-11
tmpfs           7.8G   28K  7.8G   1% /var/lib/ceph/osd/ceph-10
tmpfs           7.8G   28K  7.8G   1% /var/lib/ceph/osd/ceph-9
tmpfs           7.8G   28K  7.8G   1% /var/lib/ceph/osd/ceph-8
tmpfs           1.6G   44K  1.6G   1% /run/user/1000
/dev/rbd0        50G  508M   50G   1% /data
/dev/rbd1        20G  176M   20G   1% /data1
overlay         196G   14G  173G   8% /var/lib/docker/overlay2/17635b5a82ee2644b11acc9e058b34790958a920e58d2bdd01b64a7246545bfe/merged

可以设置开机自动挂载

root@ceph-node3:/usr/local/pigz-2.8# cat /etc/rc.local
rbd --user ymm -p rbd-k8s1 map data-image-k8s1
mount /dev/rbd0 /data
# 查看rbd映射
root@ceph-node3:/usr/local/pigz-2.8# rbd showmapped 
id  pool      namespace  image            snap  device   
0   rbd-k8s1             data-image-k8s1  -     /dev/rbd0
1   rbd-k8s1             data-image-k8s2  -     /dev/rbd1
3.5 卸载和删除rbd镜像

镜像删除后数据也会被删除且无法恢复,因此在执行删除操作要慎重!!!!

# 卸载rbd镜像
root@ceph-node3:/usr/local/pigz-2.8# umount /data1
root@ceph-node3:/usr/local/pigz-2.8# 
root@ceph-node3:/usr/local/pigz-2.8# rbd --user ymm -p rbd-k8s1 unmap data-image-k8s2 
rbd: --user is deprecated, use --id#删除rbd镜像
root@ceph-node3:/usr/local/pigz-2.8# rbd rm --pool rbd-k8s1 --image data-image-k8s2 
2024-09-03T09:25:27.608+0800 73b4b3e006c0 -1 librbd::image::PreRemoveRequest: 0x608add5e63f0 check_image_watchers: image has watchers - not removing
Removing image: 0% complete...failed.
rbd: error: image still has watchers
This means the image is still open or the client using it crashed. Try again after closing/unmapping it or waiting 30s for the crashed client to timeout.
# 如果出现上面的报错,说明还有客户端在使用
root@ceph-node3:/usr/local/pigz-2.8# rbd status rbd-k8s1/data-image-k8s2
Watchers:watcher=192.168.31.59:0/3278940725 client.55806 cookie=18446462598732840964#切换到192.168.31.59
root@ceph-node4:~# umount /data 
root@ceph-node4:~# 
root@ceph-node4:~# rbd --id ymm --pool rbd-k8s1 unmap data-image-k8s2 
# 然后就可以删除了
root@ceph-node3:/usr/local/pigz-2.8# rbd rm --pool rbd-k8s1 --image data-image-k8s2 
Removing image: 100% complete...done.
3.6 rbd镜像回收站机制

删除的镜像数据无法恢复,但是还有另外一种方法可以把镜像移动到回收站,后期确认删除的时候再从回收站删除即可

# 查看镜像状态
root@ceph-node3:/usr/local/pigz-2.8# rbd status --pool rbd-k8s1 --image data-image-k8s2
Watchers:watcher=192.168.31.58:0/1285141014 client.55944 cookie=18446462598732840961
# 将镜像移动到回收站
root@ceph-node3:/usr/local/pigz-2.8# rbd trash move --pool rbd-k8s1 --image data-image-k8s2 
root@ceph-node3:/usr/local/pigz-2.8# 
# 查看回收站的镜像
root@ceph-node3:/usr/local/pigz-2.8# rbd trash list --pool rbd-k8s1
456e95c00df6 data-image-k8s2
root@ceph-node3:/usr/local/pigz-2.8# rbd --id ymm --pool rbd-k8s1 unmap data-image-k8s2 
root@ceph-node3:/usr/local/pigz-2.8# 
#还原镜像
root@ceph-node3:/usr/local/pigz-2.8# rbd trash restore --pool rbd-data1 --image data-image-k8s2 --image-id 456e95c00df6
#验证镜像:
root@ceph-node3:/usr/local/pigz-2.8# rbd ls --pool rbd-data1 -l
NAME SIZE PARENT FMT PROT LOCK
data-image2 8 GiB 2#从回收站删除镜像
root@ceph-node3:/usr/local/pigz-2.8# rbd trash remove --pool rbd-k8s1 456e95c00df6 
Removing image: 100% complete...done.

4、镜像快照

[cephadmin@ceph-deploy ceph-cluster]$ rbd help snap
snap create (snap add) #创建快照
snap limit clear #清除镜像的快照数量限制
snap limit set #设置一个镜像的快照上限
snap list (snap ls) #列出快照
snap protect #保护快照被删除
snap purge #删除所有未保护的快照
snap remove (snap rm) #删除一个快照
snap rename #重命名快照
snap rollback (snap revert) #还原快照
snap unprotect #允许一个快照被删除(取消快照保护)
4.1 客户端当前数据
root@ceph-node3:/usr/local/pigz-2.8# df -h 
Filesystem      Size  Used Avail Use% Mounted on
tmpfs           1.6G  2.0M  1.6G   1% /run
/dev/sda3       196G   14G  173G   8% /
tmpfs           7.8G     0  7.8G   0% /dev/shm
tmpfs           5.0M  4.0K  5.0M   1% /run/lock
/dev/sda2       512M  6.1M  506M   2% /boot/efi
tmpfs           7.8G   28K  7.8G   1% /var/lib/ceph/osd/ceph-11
tmpfs           7.8G   28K  7.8G   1% /var/lib/ceph/osd/ceph-10
tmpfs           7.8G   28K  7.8G   1% /var/lib/ceph/osd/ceph-9
tmpfs           7.8G   28K  7.8G   1% /var/lib/ceph/osd/ceph-8
tmpfs           1.6G   44K  1.6G   1% /run/user/1000
/dev/rbd0        50G  508M   50G   1% /data
overlay         196G   14G  173G   8% /var/lib/docker/overlay2/17635b5a82ee2644b11acc9e058b34790958a920e58d2bdd01b64a7246545bfe/merged
root@ceph-node3:/usr/local/pigz-2.8# 
root@ceph-node3:/usr/local/pigz-2.8# ll /data
total 110608
drwxr-xr-x  5  999 root      126  9月  3 08:36 ./
drwxr-xr-x 22 root root     4096  9月  3 08:07 ../
-rw-rw----  1  999  999       56  9月  3 08:33 auto.cnf
-rw-rw----  1  999  999 12582912  9月  3 08:33 ibdata1
-rw-rw----  1  999  999 50331648  9月  3 08:33 ib_logfile0
-rw-rw----  1  999  999 50331648  9月  3 08:32 ib_logfile1
drwx------  2  999  999     4096  9月  3 08:33 mysql/
drwx------  2  999  999     4096  9月  3 08:33 performance_schema/
drwx------  2  999  999       20  9月  3 08:36 test/
4.2 创建并验证快照
# 创建快照
root@ceph-node3:/usr/local/pigz-2.8# rbd snap create --pool rbd-k8s1 --image data-image-k8s1 --snap mysql-data-202400903 
Creating snap: 100% complete...done.
root@ceph-node3:/usr/local/pigz-2.8# 
# 验证快照
root@ceph-node3:/usr/local/pigz-2.8# rbd snap list --pool rbd-k8s1 --image data-image-k8s1 
SNAPID  NAME                  SIZE    PROTECTED  TIMESTAMP               4  mysql-data-202400903  50 GiB             Tue Sep  3 09:44:38 2024
4.3 删除数据并还原数据

模拟删除mysql的test库

root@ceph-node3:/usr/local/pigz-2.8# ll /data
total 110608
drwxr-xr-x  5  999 root      126  9月  3 08:36 ./
drwxr-xr-x 22 root root     4096  9月  3 08:07 ../
-rw-rw----  1  999  999       56  9月  3 08:33 auto.cnf
-rw-rw----  1  999  999 12582912  9月  3 08:33 ibdata1
-rw-rw----  1  999  999 50331648  9月  3 08:33 ib_logfile0
-rw-rw----  1  999  999 50331648  9月  3 08:32 ib_logfile1
drwx------  2  999  999     4096  9月  3 08:33 mysql/
drwx------  2  999  999     4096  9月  3 08:33 performance_schema/
drwx------  2  999  999       20  9月  3 08:36 test/
root@ceph-node3:/usr/local/pigz-2.8# rm -fr /data/test/
root@ceph-node3:/usr/local/pigz-2.8# 
root@ceph-node3:/usr/local/pigz-2.8# ll /data
total 110608
drwxr-xr-x  4  999 root      114  9月  3 09:45 ./
drwxr-xr-x 22 root root     4096  9月  3 08:07 ../
-rw-rw----  1  999  999       56  9月  3 08:33 auto.cnf
-rw-rw----  1  999  999 12582912  9月  3 08:33 ibdata1
-rw-rw----  1  999  999 50331648  9月  3 08:33 ib_logfile0
-rw-rw----  1  999  999 50331648  9月  3 08:32 ib_logfile1
drwx------  2  999  999     4096  9月  3 08:33 mysql/
drwx------  2  999  999     4096  9月  3 08:33 performance_schema/#卸载rbd
root@ceph-node3:/usr/local/pigz-2.8# rbd --id ymm --pool rbd-k8s1 unmap data-image-k8s1
rbd: sysfs write failed
rbd: unmap failed: (16) Device or resource busy
# 如果上面显示错误,先lsof查看下是否有对应设备在使用sudo rbd unmap -o force /dev/rbd0# 卸载完镜像后回滚快照
root@ceph-node3:/usr/local/pigz-2.8# rbd snap rollback --pool rbd-k8s1 --image data-image-k8s1 --snap mysql-data-202400903
Rolling back to snapshot: 100% complete...done.
4.4 客户端验证数据

客户端需要重新映射并挂载rbd

root@ceph-node4:~# rbd --id ymm -p rbd-k8s1 map data-image-k8s1 
/dev/rbd0
root@ceph-node4:~# 
root@ceph-node4:~# 
root@ceph-node4:~# mount /dev/rbd0 /data 
root@ceph-node4:~# 
root@ceph-node4:~# ll /data/
total 110608
drwxr-xr-x  5  999 root      126  9月  3 08:36 ./
drwxr-xr-x 21 root root     4096  9月  3 09:01 ../
-rw-rw----  1  999  999       56  9月  3 08:33 auto.cnf
-rw-rw----  1  999  999 12582912  9月  3 08:33 ibdata1
-rw-rw----  1  999  999 50331648  9月  3 08:33 ib_logfile0
-rw-rw----  1  999  999 50331648  9月  3 08:32 ib_logfile1
drwx------  2  999  999     4096  9月  3 08:33 mysql/
drwx------  2  999  999     4096  9月  3 08:33 performance_schema/
drwx------  2  999  999       20  9月  3 08:36 test/
4.5 删除快照
root@ceph-node4:~# rbd snap list --pool rbd-k8s1 --image data-image-k8s1 
SNAPID  NAME                  SIZE    PROTECTED  TIMESTAMP               6  mysql-data-202400903  50 GiB             Tue Sep  3 11:22:05 2024root@ceph-node4:~# rbd snap rollback --pool rbd-k8s1 --image data-image-k8s1 --snap mysql-data-202400903
Rolling back to snapshot: 100% complete...done.root@ceph-node4:~# rbd snap remove -p rbd-k8s1 --image data-image-k8s1 --snap mysql-data-202400903 
Removing snap: 100% complete...done.
root@ceph-node4:~# 
root@ceph-node4:~# rbd snap list -p rbd-k8s1 --image data-image-k8s1 
4.6 快照数量限制
#设置与修改快照数量限制
[cephadmin@ceph-deploy ceph-cluster]$ rbd snap limit set --pool rbd-k8s1 --image
data-image1 --limit 30
[cephadmin@ceph-deploy ceph-cluster]$ rbd snap limit set --pool rbd-k8s1 --image
data-image1 --limit 20
[cephadmin@ceph-deploy ceph-cluster]$ rbd snap limit set --pool rbd-k8s1 --image
data-image1 --limit 15
#清除快照数量限制
[cephadmin@ceph-deploy ceph-cluster]$ rbd snap limit clear --pool rbd-k8s1 --image
data-image1

相关文章:

Ceph RBD使用

CephRBD使用 一、RBD架构说明二、RBD相关操作1、创建存储池2、创建img镜像2.1 创建镜像2.1.2 查看镜像详细信息2.1.3 镜像其他特性2.1.4 镜像特性的启用和禁用 3、配置客户端使用RBD3.1 客户端配置yum源3.2 客户端使用admin用户挂载并使用RBD3.2.1 同步admin账号认证文件3.2.2 …...

Spark MLlib模型训练—回归算法 Random forest regression

Spark MLlib模型训练—回归算法 Random forest regression 随机森林回归 (Random Forest Regression) 是一种集成学习方法,通过结合多个决策树的预测结果来提升模型的准确性和稳健性。相较于单一的决策树模型,随机森林通过随机采样和多棵树的集成,减少了模型的方差,从而在…...

华为OD机试真题-数大雁-2024年OD统一考试(E卷)

题目描述: 一群大雁往南飞,给定一个字符串记录地面上的游客听到的大雁叫声,请给出叫声最少由几只大雁发出。具体的 大雁发出的完整叫声为”quack“,因为有多只大雁同一时间嘎嘎作响,所以字符串中可能会混合多个”quack”大雁会依次完整发出”quack”,即字符串中q,u,a,c,k这5个…...

Oracle数据迁移:导出与导入的详细指南

在数据库管理中,数据的导出与导入是一项常见的任务,无论是为了数据迁移、备份还是其他目的。Oracle数据库提供了多种工具和方法来实现数据的导出和导入。本文将详细介绍如何在Oracle中实现数据的导出和导入,包括使用Oracle SQL Developer、Or…...

SpringBoot实现前后端传输加密设计

在Web应用中,确保前后端之间的数据传输安全是非常重要的。这通常涉及到使用HTTPS协议、数据加密、令牌验证等安全措施。本文通过将前后端之间的传输数据进行加密,用于在Spring Boot应用中实现前后端传输加密设计。 一、数据加密方案 即使使用了HTTPS&…...

X 射线测厚仪-高效精准,厚度测量的卓越之选

在现代工业的舞台上,对精准度和效率的追求从未停歇。而 X 射线测厚仪,宛如一颗璀璨的明星,以其高效精准的特质,成为厚度测量的卓越之选。 X 射线测厚仪,是科技与智慧的完美结晶。它凭借先进的 X 射线技术,…...

10款好用的文件加密软件排行榜|文件加密管理软件推荐(合集篇)

某企业在疫情期间实行远程办公政策,所有员工通过公司提供的VPN访问内部系统。为了保障数据安全,然而,某位员工为了加快工作进度,将文件下载到个人电脑上进行编辑。 在一次在线会议中,员工不慎将这份未加密的文件通过非…...

服务器蓝屏该怎么办

服务器蓝屏是一种常见但严重的问题,可能会导致系统无法正常工作和数据损失。遇到服务器蓝屏时,及时采取正确的措施至关重要。以下是处理服务器蓝屏的步骤: 1. 记录蓝屏错误信息 首先,记录下蓝屏错误代码和相关信息。这些信息通常显…...

Elasticsearch:使用 inference API 进行语义搜索

本教程中的说明向您展示了如何将 inference API 工作流与各种服务结合使用来对你的数据执行语义搜索。为了说明问题的方便,我将使用 Cohere 服务来进行详细说明。更多其它服务,请详细参阅链接。 重要:有关在 Elastic Stack 中执行语义搜索的最…...

PVE开启核显直通

启用内核 IOMMU 支持 修改/etc/default/grub配置文件以启用 IOMMU 支持,将GRUB_CMDLINE_LINUX_DEFAULT修改为: GRUB_CMDLINE_LINUX_DEFAULT"quiet intel_iommuon iommupt"iommupt的参数建议添加,以提高未直通设备 PCIe 的性能&am…...

使用 Bert 做文本分类,利用 Trainer 框架实现 二分类,事半功倍

简介 使用 AutoModelForSequenceClassification 导入Bert 模型。 很多教程都会自定义 损失函数,然后手动实现参数更新。 但本文不想手动微调,故使用 transformers 的 Trainer 自动微调。 人生苦短,我用框架,不仅可保证微调出的模…...

Obsidian git sync error / Obsidian git 同步失敗

Issue: commit due to empty commit message Solution 添加commit資訊,確保不留空白 我的設置:auto-backup: {{hostname}}/{{date}}/...

谷歌英文SEO外链如何做?

做英文SEO外链涉及多种策略和技巧,目标是提升目标网站的排名和流量,Google的搜索算法在不断演变,但外链一直是搜索引擎优化中重要的一环。有效的外链建设能够显著提升网站的SEO数据效果。关键在于创建一个多元化且自然的外链结构。不能仅仅依…...

vue使用Export2Excel导出表格

安装插件 npm install xlsx xlsx-style file-saver npm install node-polyfill-webpack-plugin (如果不安装的话后面使用会报错) 添加相关配置 在vue.config.js文件 const NodePolyfillPlugin require("node-polyfill-webpack-plugin") module.exports defineCon…...

Linux环境变量 本地变量 命令行参数

并行和并发 并行 多个进程在多个 CPU 下分别,同时进行运行。 并发 多个进程在一个 CPU 采用进程切换的方式,在一段时间内,让多个进程都得以推进,称之为并发。 CPU 中的寄存器扮演什么角色? 寄存器:cpu 内的寄存器里面保存的是进程…...

向量数据库Faiss的搭建与使用

1. 什么是Faiss? Faiss是由Facebook AI Research团队开发的一个库,旨在高效地进行大规模向量相似性搜索。它不仅支持CPU,还能利用GPU进行加速,非常适合处理大量高维数据。Faiss提供了多种索引类型,以适应不同的需求&a…...

微信小程序接入客服功能

前言 用户可使用小程序客服消息功能,与小程序的客服人员进行沟通。客服功能主要用于在小程序内 用户与客服直接沟通用,本篇介绍客服功能的基础开发以及进阶功能的使用,另外介绍多种客服的对接方式。 更多介绍请查看客服消息使用指南 客服视…...

mysql开启远程访问

个人建议mysql可以用宝塔自动下载安装。 远程访问, 1.关闭防火墙,确保ip能ping通 2.ping端口确定数据库能ping通 3.本地先连上去命令行修改远程访问权限。 mysql -u root -p use mysql; select user,host from user; select host from user where u…...

【NLP自然语言处理】文本处理的基本方法

目录 🍔什么是分词 🍔中文分词工具jieba 2.1 jieba的基本特点 2.2 jieba的功能 2.3 jieba的安装及使用 🍔什么是命名实体识别 🍔什么是词性标注 🍔小结 学习目标 🍀 了解什么是分词, 词性标注, 命名…...

uniapp使用defineExpose暴露和onMounted访问

defineExpose作用 暴露方法和数据 允许从模板或其他组件访问当前组件内部的方法和数据。明确指定哪些方法和数据可以被外部访问,从而避免不必要的暴露。 增强安全性 通过显式声明哪些方法和数据可以被外部访问,防止意外修改内部状态。提高组件的安全性&a…...

Python爬虫实战:研究MechanicalSoup库相关技术

一、MechanicalSoup 库概述 1.1 库简介 MechanicalSoup 是一个 Python 库,专为自动化交互网站而设计。它结合了 requests 的 HTTP 请求能力和 BeautifulSoup 的 HTML 解析能力,提供了直观的 API,让我们可以像人类用户一样浏览网页、填写表单和提交请求。 1.2 主要功能特点…...

大话软工笔记—需求分析概述

需求分析,就是要对需求调研收集到的资料信息逐个地进行拆分、研究,从大量的不确定“需求”中确定出哪些需求最终要转换为确定的“功能需求”。 需求分析的作用非常重要,后续设计的依据主要来自于需求分析的成果,包括: 项目的目的…...

Spring Boot 实现流式响应(兼容 2.7.x)

在实际开发中,我们可能会遇到一些流式数据处理的场景,比如接收来自上游接口的 Server-Sent Events(SSE) 或 流式 JSON 内容,并将其原样中转给前端页面或客户端。这种情况下,传统的 RestTemplate 缓存机制会…...

以下是对华为 HarmonyOS NETX 5属性动画(ArkTS)文档的结构化整理,通过层级标题、表格和代码块提升可读性:

一、属性动画概述NETX 作用:实现组件通用属性的渐变过渡效果,提升用户体验。支持属性:width、height、backgroundColor、opacity、scale、rotate、translate等。注意事项: 布局类属性(如宽高)变化时&#…...

【SpringBoot】100、SpringBoot中使用自定义注解+AOP实现参数自动解密

在实际项目中,用户注册、登录、修改密码等操作,都涉及到参数传输安全问题。所以我们需要在前端对账户、密码等敏感信息加密传输,在后端接收到数据后能自动解密。 1、引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId...

《用户共鸣指数(E)驱动品牌大模型种草:如何抢占大模型搜索结果情感高地》

在注意力分散、内容高度同质化的时代&#xff0c;情感连接已成为品牌破圈的关键通道。我们在服务大量品牌客户的过程中发现&#xff0c;消费者对内容的“有感”程度&#xff0c;正日益成为影响品牌传播效率与转化率的核心变量。在生成式AI驱动的内容生成与推荐环境中&#xff0…...

【CSS position 属性】static、relative、fixed、absolute 、sticky详细介绍,多层嵌套定位示例

文章目录 ★ position 的五种类型及基本用法 ★ 一、position 属性概述 二、position 的五种类型详解(初学者版) 1. static(默认值) 2. relative(相对定位) 3. absolute(绝对定位) 4. fixed(固定定位) 5. sticky(粘性定位) 三、定位元素的层级关系(z-i…...

江苏艾立泰跨国资源接力:废料变黄金的绿色供应链革命

在华东塑料包装行业面临限塑令深度调整的背景下&#xff0c;江苏艾立泰以一场跨国资源接力的创新实践&#xff0c;重新定义了绿色供应链的边界。 跨国回收网络&#xff1a;废料变黄金的全球棋局 艾立泰在欧洲、东南亚建立再生塑料回收点&#xff0c;将海外废弃包装箱通过标准…...

前端开发面试题总结-JavaScript篇(一)

文章目录 JavaScript高频问答一、作用域与闭包1.什么是闭包&#xff08;Closure&#xff09;&#xff1f;闭包有什么应用场景和潜在问题&#xff1f;2.解释 JavaScript 的作用域链&#xff08;Scope Chain&#xff09; 二、原型与继承3.原型链是什么&#xff1f;如何实现继承&a…...

C++ Visual Studio 2017厂商给的源码没有.sln文件 易兆微芯片下载工具加开机动画下载。

1.先用Visual Studio 2017打开Yichip YC31xx loader.vcxproj&#xff0c;再用Visual Studio 2022打开。再保侟就有.sln文件了。 易兆微芯片下载工具加开机动画下载 ExtraDownloadFile1Info.\logo.bin|0|0|10D2000|0 MFC应用兼容CMD 在BOOL CYichipYC31xxloaderDlg::OnIni…...