1. RBD

rbd是Rados Block Device的简称,是ceph集群中常用的存储类型,rbd是通过linux内核模块或librbd库与osd之间完成交互,一般只有在为物理主机提供设备的时候才会使用内核rbd模块,虚拟机一般使用librbd库,当rbd使用基于内核模块驱动时,可以使用linux自带的页缓存来提高性能,当使用librbd库时,使用rbd缓存来提高性能。

1. RBD特性

  • 支持完整和增量快照
  • 自动精简置备
  • 写时复制
  • 动态调整大小
  • 内存内缓存

rbd工作流程:

  1. 创建一个pool,创建rbd设备并挂载
  2. 用户写入数据,ceph对数据切块,每个块的大小默认为4M,每个块的名字时object+序号
  3. 将每个object通过hash算法分配给对应的pg
  4. pg根据crush算法会寻找3个osd,把这个object保存在这3个osd上
  5. osd实际把硬盘格式化成xfs文件系统,object存储在这个文件系统就相当于存储了一个文件 rbd0.object1.file

2. 创建rbd池并使用

2.1 创建rbd

  1. [root@ceph01 ~]# ceph osd pool create rbd
  2. pool 'rbd' created
  3. [root@ceph01 ~]# ceph osd pool application enable rbd rbd
  4. enabled application 'rbd' on pool 'rbd'
  5. # 执行初始化rbd池
  6. [root@ceph01 ~]# rbd pool init rbd

2.2 创建用户

  1. [root@ceph01 ~]# ceph auth get-or-create client.rbd mon 'profile rbd' osd ' profile rbd'
  2. [client.rbd]
  3. key = AQBYmVJmdzLLEBAAAuxze+16sFzNAUsTontr8Q==
  4. [root@ceph01 ~]# ceph auth get client.rbd > ceph.client.rbd.keyring
  5. exported keyring for client.rbd

这里的权限就是给的profile rbd 意思就是这个用户只能对rbd进行操作,当然,是所有的rbd,如果想指定特定的rbd可以 ,allow rw pool=xxx这样就是操作特定池的rbd

2.3 下发用户key与ceph.conf

  1. [root@ceph01 ~]# scp ceph.client.rbd.keyring /etc/ceph/ceph.conf 10.104.45.244:/etc/ceph/

2.4 客户端查看pool

来到客户端

  1. [root@client ~]# ceph osd pool ls --name client.rbd --keyring /etc/ceph/ceph.client.rbd.keyring
  2. device_health_metrics
  3. test_pool
  4. test02
  5. rbd

权限正常

2.5 创建rbd块

这一步操作也可以在客户端上执行

  1. [root@ceph01 ~]# rbd create rbd/test --name client.rbd --size 5G --image-format 2 --image
  2. -feature layering

查看rbd块

  1. [root@ceph01 ~]# rados -p rbd ls --name client.rbd
  2. rbd_header.fd7dc75c9ce3
  3. rbd_id.test
  4. rbd_directory
  5. rbd_info

目前我们看到的rbd块里面有4个对象,后期往里面写入文件的时候这里面的对象会越来越多

2.6 映射rbd并挂载

在客户端操作

  1. # 1. 加载rbd模块
  2. [root@client ~]# modprobe rbd
  3. # 2. 让rbd模块开机自动加载
  4. [root@client ~]# echo "rbd" >> /etc/modules-load.d/rbd.conf

先看一下块设备

  1. [root@client ~]# fdisk -l
  2. Disk /dev/sda: 50 GiB, 53687091200 bytes, 104857600 sectors
  3. Disk model: Virtual disk
  4. Units: sectors of 1 * 512 = 512 bytes
  5. Sector size (logical/physical): 512 bytes / 512 bytes
  6. I/O size (minimum/optimal): 512 bytes / 512 bytes
  7. Disklabel type: gpt
  8. Disk identifier: A41913C9-11D3-4136-9C7A-4FF37D0A02D0
  9. Device Start End Sectors Size Type
  10. /dev/sda1 2048 1230847 1228800 600M EFI System
  11. /dev/sda2 1230848 3327999 2097152 1G Linux filesystem
  12. /dev/sda3 3328000 104855551 101527552 48.4G Linux LVM
  13. Disk /dev/mapper/openeuler-root: 44.48 GiB, 47760539648 bytes, 93282304 sectors
  14. Units: sectors of 1 * 512 = 512 bytes
  15. Sector size (logical/physical): 512 bytes / 512 bytes
  16. I/O size (minimum/optimal): 512 bytes / 512 bytes
  17. Disk /dev/mapper/openeuler-swap: 3.93 GiB, 4219469824 bytes, 8241152 sectors
  18. Units: sectors of 1 * 512 = 512 bytes
  19. Sector size (logical/physical): 512 bytes / 512 bytes
  20. I/O size (minimum/optimal): 512 bytes / 512 bytes

目前机器上只有一个sda,并且是50G的

  1. # 3. 映射rbd
  2. [root@client ~]# rbd map --name client.rbd rbd/test
  3. /dev/rbd0
  4. # 4. 查看rbd
  5. [root@client ~]# fdisk -l |grep /dev/rbd0
  6. Disk /dev/rbd0: 5 GiB, 5368709120 bytes, 10485760 sectors
  7. # 5. 格式化块设备
  8. [root@client ~]# mkfs.xfs /dev/rbd0
  9. meta-data=/dev/rbd0 isize=512 agcount=8, agsize=163840 blks
  10. = sectsz=512 attr=2, projid32bit=1
  11. = crc=1 finobt=1, sparse=1, rmapbt=0
  12. = reflink=1 bigtime=0 inobtcount=0
  13. data = bsize=4096 blocks=1310720, imaxpct=25
  14. = sunit=16 swidth=16 blks
  15. naming =version 2 bsize=4096 ascii-ci=0, ftype=1
  16. log =internal log bsize=4096 blocks=2560, version=2
  17. = sectsz=512 sunit=16 blks, lazy-count=1
  18. realtime =none extsz=4096 blocks=0, rtextents=0
  19. Discarding blocks...Done.
  20. # 6. 挂载使用
  21. [root@client ~]# mkdir /rbd
  22. [root@client ~]# mount /dev/rbd0 /rbd/
  23. [root@client ~]# echo 111 > /rbd/test

2.7 开机自动映射

这个地方是开机自动映射,并不是自动挂载,因为在挂载之前如果没有映射的话本地是没有这块磁盘的,所以也不存在能够挂载

  1. # 1. 编写配置文件
  2. [root@client ~]# vim /etc/ceph/rbdmap
  3. #poolname/imagename id=client,keyring=/etc/ceph/ceph.client.keyring
  4. rbd/test id=rbd
  5. # 2. 开机自启动服务
  6. [root@client ~]# systemctl enable --now rbdmap
  7. Created symlink /etc/systemd/system/multi-user.target.wants/rbdmap.service /usr/lib/systemd/system/rbdmap.service.
  8. # 3. 开机自动挂载
  9. [root@client ~]# tail -1 /etc/fstab
  10. /dev/rbd0 /rbd xfs defaults,_netdev 0 0

这里的id=rbd是用户名是rbd,并不是pool的名字

2.8 rbd create参数

  • --name:指定用哪个用户创建
  • --size:指定创建的块大小
  • --image-format:指定镜像文件格式,有1和2,1已经被废弃
  • --image-feature:指定镜像文件的特性,可以指定多个
  • --stripe-unit:指定rbd存储池中最小文件块的大小,不得小于4k,不得大于32M,默认4M
  • --stripe-count:如果指定了stripe-unit,则这个也需要指定,其表示一个数据可以并行写入到多少个数据块中,默认为1
Name 描述 ID
layering 支持分层快照特性,用于快照及写时复制,可以对image创建快照并保护,然后从快照克隆出新的image,父子image之间采用COW技术,共享对象数据 1
striping 支持条带化v2,类似于raid0,只不过ceph环境中的数据被分散到不同的对象中,可改善顺序读写场景较多情况的性能 2
exclusive-lock 支持独占锁,限制一个镜像只能被一个客户端使用 4
object-map 支持对象映射(依赖exclusive-lock),加速数据导入导出及已用空间统计等,此特性开启的时候,会记录image所有对象的一个位图,用于标记对象是否真的存在,在一些场景下可以加速IO 8
fast-diff 加速计算镜像与快照快照数据差异对比(依赖object-map) 16
deep-flatten 支持快照扁平化操作,用于快照管理时解决快照依赖关系等 32
journaling 修改数据是否记录日志,该特性可以通过记录日志回复数据(依赖独占锁),开启此特性会增加系统IO使用 64
data-pool EC data pool support 128

在创建时,指定多个rbd特性

  1. [root@ceph01 ~]# rbd create rbd/test --name client.rbd --size 5G --image-format 2 --image
  2. -feature layering,exclusive-lock,object-map

也可以直接指定默认的特性,可以直接使用id,如果我想要 layering+deep-flatten,那么id就是1+32=33

  1. [root@ceph01 ~]# ceph config set client rbd_default_features 33
  2. [root@ceph01 ~]# rbd create rbd/test01 --size 1G
  3. [root@ceph01 ~]# rbd info rbd/test01
  4. rbd image 'test01':
  5. size 1 GiB in 256 objects
  6. order 22 (4 MiB objects)
  7. snapshot_count: 0
  8. id: fdb9d96db2f9
  9. block_name_prefix: rbd_data.fdb9d96db2f9
  10. format: 2
  11. features: layering, deep-flatten
  12. op_features:
  13. flags:
  14. create_timestamp: Sun May 26 11:37:08 2024
  15. access_timestamp: Sun May 26 11:37:08 2024
  16. modify_timestamp: Sun May 26 11:37:08 2024

看,这样设置默认之后创建出来的rbd就都是layering, deep-flatten 这两个特性了

2.9 rbd映射基本操作

  1. # 查看已映射设备
  2. [root@client ~]# rbd showmapped
  3. id pool namespace image snap device
  4. 0 rbd test - /dev/rbd0
  5. # 取消映射,必须先取消挂载
  6. [root@client ~]# umount /rbd
  7. [root@client ~]# rbd unmap rbd/test

3. 块设备操作

3.1 调整rbd大小

  1. # 调大
  2. [root@ceph01 ~]# rbd resize rbd/test --size 10G
  3. Resizing image: 100% complete...done.
  4. # 调小,慎重操作
  5. [root@ceph01 ~]# rbd resize rbd/test --size 8G --allow-shrink
  6. Resizing image: 100% complete...done.
  7. [root@client ~]# fdisk -l |grep rbd
  8. Disk /dev/rbd0: 8 GiB, 8589934592 bytes, 16777216 sectors

3.2 复制块设备

  1. [root@ceph01 ~]# rbd ls rbd
  2. test
  3. test01
  4. [root@ceph01 ~]# rbd cp rbd/test01 rbd/copy01
  5. Image copy: 100% complete...done.

3.3 移动到其他pool

移动到其他的池也就是将rbd复制到其他的池里去

  1. # 创建一个池
  2. [root@ceph01 ~]# ceph osd pool ls
  3. device_health_metrics
  4. test_pool
  5. test02
  6. rbd
  7. [root@ceph01 ~]# ceph osd pool create mv_rbd
  8. pool 'mv_rbd' created
  9. [root@ceph01 ~]# ceph osd pool application enable mv_rbd rbd
  10. enabled application 'rbd' on pool 'mv_rbd'
  11. [root@ceph01 ~]# rbd pool init mv_rbd
  12. # 将copy01移动到 mv_rbd
  13. [root@ceph01 ~]# rbd cp rbd/copy01 mv_rbd/mv_copy
  14. Image copy: 100% complete...done.

当客户端挂载了一个rbd(已经格式化完成的),并且想挂载这个rbd复制过来的另一个rbd时,这时候系统是会报错的,原因是因为这两个rbd是完全一样的,系统识别是有点问题的,想要挂载的话必须取消之前的rbd映射,也就是说同一时间只能挂载一个,不管你是挂载的复制的还是被复制的,这俩只能有一个存在于系统上

4. rbd快照管理

4.1 创建快照

  1. [root@ceph01 ~]# rbd snap create rbd/test@snapshot01
  2. Creating snap: 100% complete...done.
  3. [root@ceph01 ~]# rbd snap ls rbd/test
  4. SNAPID NAME SIZE PROTECTED TIMESTAMP
  5. 4 snapshot01 8 GiB Sun May 26 12:34:03 2024

4.2 回滚快照

  1. # 到客户端删除rbd上的所有文件
  2. [root@client ~]# cd /rbd/
  3. [root@client rbd]# ls
  4. test
  5. [root@client rbd]# rm test -f
  6. # 卸载rbd
  7. [root@client ~]# umount /rbd
  8. # 回滚
  9. [root@client ~]# rbd snap rollback rbd/test@snapshot01 --name client.rbd
  10. Rolling back to snapshot: 100% complete...done
  11. # 重新挂载查看文件
  12. [root@client ~]# mount -a
  13. [root@client ~]# cd /rbd/
  14. [root@client rbd]# ls
  15. test

4.3 保护快照

开启了这个功能之后快照无法被删除

  1. [root@ceph01 ~]# rbd snap protect rbd/test@snapshot01
  2. [root@ceph01 ~]# rbd info rbd/test@snapshot01
  3. rbd image 'test':
  4. size 8 GiB in 2048 objects
  5. order 22 (4 MiB objects)
  6. snapshot_count: 1
  7. id: fd7dc75c9ce3
  8. block_name_prefix: rbd_data.fd7dc75c9ce3
  9. format: 2
  10. features: layering
  11. op_features:
  12. flags:
  13. create_timestamp: Sun May 26 10:22:11 2024
  14. access_timestamp: Sun May 26 10:22:11 2024
  15. modify_timestamp: Sun May 26 10:22:11 2024
  16. protected: True

4.4 删除快照

  1. [root@ceph01 ~]# rbd snap rm rbd/test@snapshot01
  2. Removing snap: 0% complete...failed.
  3. rbd: snapshot 'snapshot01' is protected from removal.
  4. 2024-05-26T12:44:29.788+0800 7fa5126fc1c0 -1 librbd::Operations: snapshot is protected

现在是删不掉的,因为被保护了,我们需要取消保护

  1. [root@ceph01 ~]# rbd snap unprotect rbd/test@snapshot01
  2. [root@ceph01 ~]# rbd snap rm rbd/test@snapshot01
  3. Removing snap: 100% complete...done.

4.5 克隆快照

克隆之前需要对被克隆的快照进行保护,原因是因为克隆出来的新快照是完全依赖于原先的快照的,如果原先的快照被删除,那么克隆出来的快照也将无法使用

  1. # 先创建一个快照
  2. [root@ceph01 ~]# rbd snap create rbd/test@snapshot01
  3. Creating snap: 100% complete...done.
  4. # 保护快照
  5. [root@ceph01 ~]# rbd snap protect rbd/test@snapshot01
  6. # 克隆新快照
  7. [root@ceph01 ~]# rbd clone rbd/test@snapshot01 rbd/clone_snap
  8. [root@ceph01 ~]# rbd ls rbd/
  9. clone_snap
  10. copy01
  11. test
  12. test01

查看信息

  1. [root@ceph01 ~]# rbd info rbd/clone_snap
  2. rbd image 'clone_snap':
  3. size 8 GiB in 2048 objects
  4. order 22 (4 MiB objects)
  5. snapshot_count: 0
  6. id: fe76c24b54cf
  7. block_name_prefix: rbd_data.fe76c24b54cf
  8. format: 2
  9. features: layering
  10. op_features:
  11. flags:
  12. create_timestamp: Sun May 26 12:51:40 2024
  13. access_timestamp: Sun May 26 12:51:40 2024
  14. modify_timestamp: Sun May 26 12:51:40 2024
  15. parent: rbd/test@snapshot01
  16. overlap: 8 GiB

注意对比这个克隆出来的与其他的差异,这个rbd他有一个

parent: rbd/test@snapshot01,也就是说他是基于这个的,如果这个快照被删除那么这个克隆出来的也将无法使用,前面提到了

如果说我我就要让他独立存在呢?不受其他快照的影响,可以做到吗?是可以的

  1. # 合并父镜像/快照拉平
  2. [root@ceph01 ~]# rbd flatten rbd/clone_snap
  3. Image flatten: 100% complete...done.
  4. [root@ceph01 ~]# rbd info rbd/clone_snap
  5. rbd image 'clone_snap':
  6. size 8 GiB in 2048 objects
  7. order 22 (4 MiB objects)
  8. snapshot_count: 0
  9. id: fe76c24b54cf
  10. block_name_prefix: rbd_data.fe76c24b54cf
  11. format: 2
  12. features: layering
  13. op_features:
  14. flags:
  15. create_timestamp: Sun May 26 12:51:40 2024
  16. access_timestamp: Sun May 26 12:51:40 2024
  17. modify_timestamp: Sun May 26 12:51:40 2024

这个时候再去看,他就没有parent这个条目了,也就是说他可以独立存在了

4.6 客户端配置rbd缓存

  1. [root@client rbd]# vim /etc/ceph/ceph.conf
  2. # 加入下列这些配置
  3. [clienti.rbd]
  4. rbd_cache = true
  5. rbd_cache_size = 33554432 # 32M
  6. rbd_cache_max_dirty = 25165824
  7. rbd_cache_target_dirty = 16777216
  8. rbd_cache_max_dirty_age = 1
  9. rbd_cache_writethrough_until_flush = true

rbd缓存:开启之后想往磁盘写数据会先内存,然后再从内存里写入到磁盘,加速写入速度,开启之后也会面临风险,因为数据是先到内存,万一断电那么就会丢失32M数据,因为缓存大小是32M

2. CephFS

cephfs提供就是一个文件系统,不像rbd一样需要自己格式化

文件系统(cephfs)与块存储(rbd)不同的是,块存储只需要一个存储池就可以,而文件系统需要2个存储池,一个用来存放元数据,存放元数据的存储池需要有一个mds来读取。一个用来存放数据

1. mds是什么

mds:matadata server

文件系统需要存放元数据和数据,但是存储池里面存储的是对象,并不是元数据,那么需要使用文件系统的话就必须具备将对象转换成元素据的能力,这个就是mds的活,也就是转换元素据的,他还能够充当元数据的缓存,他的内存是可以缓存一部分元数据的。

2. 创建文件系统

2.1 创建2个存储池

  1. # 1. 创建2个存储池 data_cephfs,metadata_cephfs
  2. # 存储池名字可以随便起
  3. [root@ceph01 ~]# ceph osd pool create cephfs_data
  4. pool 'cephfs_data' created
  5. [root@ceph01 ~]# ceph osd pool create cephfs_metadata
  6. pool 'cephfs_metadata' created
  7. # 2. 绑定文件系统类型
  8. [root@ceph01 ~]# ceph osd pool application enable cephfs_metadata cephfs
  9. enabled application 'cephfs' on pool 'cephfs_metadata'
  10. [root@ceph01 ~]# ceph osd pool application enable cephfs_data cephfs
  11. enabled application 'cephfs' on pool 'cephfs_data'

2.2 创建cephfs

  1. # 先指定元数据池,再指定数据池
  2. [root@ceph01 ~]# ceph fs new mycephfs cephfs_metadata cephfs_data
  3. new fs with metadata pool 13 and data pool 12

2.3 创建mds

如果不创建mds的话集群过一会的健康状态就会变成 HEALTH_ERR

  1. [root@ceph01 ~]# ceph orch apply mds mycephfs --placement="3"
  2. Scheduled mds.mycephfs update...

2.4 查看文件系统信息

  1. [root@ceph01 ~]# ceph fs dump
  2. e8
  3. enable_multiple, ever_enabled_multiple: 1,1
  4. default compat: compat={},rocompat={},incompat={1=base v0.20,2=client writeable ranges,3=default file layouts on dirs,4=dir inode in separate object,5=mds uses versioned encoding,6=dirfrag is stored in omap,8=no anchor table,9=file layout v2,10=snaprealm v2}
  5. legacy client fscid: 1
  6. Filesystem 'mycephfs' (1)
  7. fs_name mycephfs
  8. epoch 5
  9. flags 12
  10. created 2024-05-26T06:36:24.540439+0000
  11. modified 2024-05-26T06:38:54.292138+0000
  12. tableserver 0
  13. root 0
  14. session_timeout 60
  15. session_autoclose 300
  16. max_file_size 1099511627776
  17. required_client_features {}
  18. last_failure 0
  19. last_failure_osd_epoch 0
  20. compat compat={},rocompat={},incompat={1=base v0.20,2=client writeable ranges,3=default file layouts on dirs,4=dir inode in separate object,5=mds uses versioned encoding,6=dirfrag is stored in omap,7=mds uses inline data,8=no anchor table,9=file layout v2,10=snaprealm v2}
  21. max_mds 1
  22. in 0
  23. up {0=65215}
  24. failed
  25. damaged
  26. stopped
  27. data_pools [12]
  28. metadata_pool 13
  29. inline_data disabled
  30. balancer
  31. standby_count_wanted 1
  32. [mds.mycephfs.ceph03.hgvfpj{0:65215} state up:active seq 2 join_fscid=1 addr [v2:10.104.45.243:6824/75731152,v1:10.104.45.243:6825/75731152] compat {c=[1],r=[1],i=[7ff]}]
  33. Standby daemons:
  34. [mds.mycephfs.ceph02.dhucfo{-1:65221} state up:standby seq 1 join_fscid=1 addr [v2:10.104.45.241:6826/3559035759,v1:10.104.45.241:6827/3559035759] compat {c=[1],r=[1],i=[7ff]}]
  35. [mds.mycephfs.ceph01.fkwkdc{-1:65469} state up:standby seq 1 join_fscid=1 addr [v2:192.168.101.10:6824/2486210203,v1:192.168.101.10:6825/2486210203] compat {c=[1],r=[1],i=[7ff]}]
  36. dumped fsmap epoch 8

2.5 创建用户,并发放keyring

  1. [root@ceph01 ~]# ceph auth get-or-create client.cephfs mon 'allow r' mds 'allow *' osd 'allow rw pool=cephfs_metadata,allow rw pool=cephfs_data' -o ceph.client.cephfs.keyring
  2. [root@ceph01 ~]# scp ceph.client.cephfs.keyring 10.104.45.244:/etc/ceph/
  3. Authorized users only. All activities may be monitored and reported.
  4. root@10.104.45.244's password:
  5. ceph.client.cephfs.keyring 100% 64 120.7KB/s 00:00

2.6 客户端执行挂载

挂载有2种方式

    1. 基于ceph-fuse的方式
    1. 基于系统内核的方式(推荐这种)
  1. # 需要安装ceph客户端,如果不安装mount -t ceph 会报错没有这个类型
  2. # 1. 将用户密钥保存到一个文件。 只要密钥,其他任何东西都不用写
  3. [root@client ~]# cat /etc/ceph/ceph.client.cephfs.keyring
  4. [client.cephfs]
  5. key = AQAP2lJm1BGICRAAblGZADS8xWfDsWl2keqzQw==
  6. [root@client ~]# echo "AQAP2lJm1BGICRAAblGZADS8xWfDsWl2keqzQw==" > cephfs.key
  7. [root@client ~]# mkdir /cephfs
  8. [root@client ~]# mount -t ceph -o name=cephfs,secretfile=./cephfs.key 192.168.101.10,192.168.101.20,192.168.101.30:/ /cephfs

2.7 永久挂载

  1. [root@client ~]# vim /etc/fstab
  2. 192.168.101.10,192.168.101.20,192.168.101.30:/ /cephfs ceph defaults,_netdev,name=cephfs,secretfile=/etc/ceph/cephfs.key

2.8 权限补充

刚刚我们所给的权限是可以直接挂载cephfs的根目录的,如果我们只想给这个用户挂载根目录下的某个目录,那么就需要做进一步的权限控制了

  1. [root@ceph01 ~]# ceph fs authorize mycephfs client.user01 /nas rwps
  2. [client.user01]
  3. key = AQCz4FJmZc+JAxAAtPPefz1dXPnwfoHH4LUXPw==

这里的mycephfs就是这个用户可以操作的文件系统名, /nas 就是它能够挂载的目录 权限是rwps也就是全部权限 rw很好理解,p是管理权限,s就是文件系统(fs中的s)

2.9 查看文件系统状态

  1. [root@ceph01 ~]# ceph fs status
  2. mycephfs - 1 clients
  3. ========
  4. RANK STATE MDS ACTIVITY DNS INOS DIRS CAPS
  5. 0 active mycephfs.ceph03.hgvfpj Reqs: 0 /s 11 13 12 1
  6. POOL TYPE USED AVAIL
  7. cephfs_metadata metadata 300k 142G
  8. cephfs_data data 0 142G
  9. STANDBY MDS
  10. mycephfs.ceph02.dhucfo
  11. mycephfs.ceph01.fkwkdc
  12. MDS version: ceph version 16.2.13 (5378749ba6be3a0868b51803968ee9cde4833a3e) pacific (stable)

RBD与Cephfs的更多相关文章

  1. kubernetes挂载ceph rbd和cephfs的方法

    目录 k8s挂载Ceph RBD PV & PVC方式 创建secret 创建PV 创建PVC 创建deployment挂载PVC StorageClass方式 创建secret 创建Stor ...

  2. 7.4 k8s结合ceph rbd、cephfs实现数据的持久化和共享

    1.在ceph集群中创建rbd存储池.镜像及普通用户 1.1.存储池接镜像配置 创建存储池 root@u20-deploy:~# ceph osd pool create rbd-test-pool1 ...

  3. Ubuntu 18.04.5 LTS Ceph集群之 cephx 认证及使用普通用户挂载RBD和CephFS

    1.cephx认证和授权 1.1 CephX认证机制 Ceph使用cephx协议对客户端进行身份认证: 1.每个MON都可以对客户端进行身份验正并分发密钥, 不存在单点故障和性能瓶颈 2. MON会返 ...

  4. 理解 OpenStack + Ceph (3):Ceph RBD 接口和工具 [Ceph RBD API and Tools]

    本系列文章会深入研究 Ceph 以及 Ceph 和 OpenStack 的集成: (1)安装和部署 (2)Ceph RBD 接口和工具 (3)Ceph 物理和逻辑结构 (4)Ceph 的基础数据结构 ...

  5. CephFS分布式文件系统

    目录 组件 基本组件 块存储 文件存储 对象存储 特点: 1.高性能: 2.高可用性: 3.高可扩展性: 4.特性丰富: 详细配置 一.准备机器 1.修改主机名 2.修改hosts文件 二.Ceph节 ...

  6. 我所了解的各公司使用的 Ceph 存储集群 (携程、乐视、有云、宝德云、联通等)

    Ceph 作为软件定义存储的代表之一,最近几年其发展势头很猛,也出现了不少公司在测试和生产系统中使用 Ceph 的案例,尽管与此同时许多人对它的抱怨也一直存在.本文试着整理作者了解到的一些使用案例. ...

  7. Ceph 存储集群

    Ceph 存储集群 Ceph 作为软件定义存储的代表之一,最近几年其发展势头很猛,也出现了不少公司在测试和生产系统中使用 Ceph 的案例,尽管与此同时许多人对它的抱怨也一直存在.本文试着整理作者了解 ...

  8. Kubernetes volumes简介

    容器中的磁盘文件生命周期比较短暂,在一些比较复杂的容器应用中会产生一些问题.一.容器crash后,kubelet会重启该容器,但这些文件会丢失掉.二.pod中的多个容器经常需要共享文件.因此,Kube ...

  9. kubernetes 存储卷

    kubernetes 存储卷    数据卷用于实现容器持久化数据,Kubernetes对于数据卷重新定义,提供了丰富强大的功能.在Kubernetes系统中,当Pod重建的时候,数据卷会丢失,Kube ...

  10. kubernetes系列10—存储卷详解

    本文收录在容器技术学习系列文章总目录 1.认识存储卷 1.1 背景 默认情况下容器中的磁盘文件是非持久化的,容器中的磁盘的生命周期是短暂的,这就带来了一系列的问题:第一,当一个容器损坏之后,kubel ...

随机推荐

  1. k8s之hostPath存储卷

    一.简介 hostPath:用于将目录从工作节点的文件系统挂载到pod中. 数据的生命周期与节点相同.我们知道,虽然hostPath卷实现pod中数据存储到节点的文件系统中,但是pod的调度不是固定的 ...

  2. Python/Spring Cloud Alibaba开发--前端复习笔记(1)———— html5和css3.html基础

    Python/Spring Cloud Alibaba开发–前端复习笔记(1)---- html5和css3.html基础 1)概述和基本结构 超文本标记语言.超文本指超链接,标记指的是标签. 基本结 ...

  3. redis 简单整理——redis 的键管理[七]

    前言 简单整理一下redis的键管理. 正文 单个键管理 键重命名 rename key newkey 为了防止被强行rename,Redis提供了renamenx命令,确保只有newKey 不存在时 ...

  4. 第 8章 Python 爬虫框架 Scrapy(下)

    第 8章 Python 爬虫框架 Scrapy(下) 8.1 Scrapy 对接 Selenium 有一种反爬虫策略就是通过 JS 动态加载数据,应对这种策略的两种方法如下:  分析 Ajax 请求 ...

  5. 详解 Flink 容器化环境下的 OOM Killed

    简介: 本文将解析 JVM 和 Flink 的内存模型,并总结在工作中遇到和在社区交流中了解到的造成 Flink 内存使用超出容器限制的常见原因.由于 Flink 内存使用与用户代码.部署环境.各种依 ...

  6. 技术干货 | 使用 mPaaS 配置 SM2 国密加密指南

    ​简介:随着移动智能终端的广泛应用,敏感信息极易被监控或盗取,给国家.企事业及个人带来极大政治.经济损失.金融和重要领域的各个企业正在逐步落实并完成国产密码改造工作.为解决客户侧因更换加密算法造成的种 ...

  7. 无处不在的 Kubernetes,难用的问题解决了吗?

    ​简介: 从第三方的调研数据看,容器和 Kubernetes 已经成为云原生时代主流的选择,但实际落地的时候,却陷入了困境.我们尝试去总结了一些共通点,以及应对方案,也许能为正在落地容器技术的企业提供 ...

  8. Paillier半同态加密:原理、高效实现方法和应用

    ​简介: <数据安全法>已于9月1日起正式实施,两个月后<个人信息保护法>也将开始施行,意味着数据安全和隐私保护方面的监管将会在年内陆续到位.在合规收紧大背景下,"数 ...

  9. PHP vs Golang ? 想什么呢 ! What Are You Thinking !

    在使用 PHP 多年之后,我对 PHP 的优势和劣势已经非常清楚,与后起之秀 Golang 相比,两者已经不在一个重量级. PHP 更像是 70 kg 级别的选手,脚本语言,极速开发,部署方便,性能可 ...

  10. WPF 设置 IncludePackageReferencesDuringMarkupCompilation 属性导致分析器不工作

    本文记录在 WPF 项目里面设置 IncludePackageReferencesDuringMarkupCompilation 属性为 False 导致了项目所安装的分析器不能符合预期工作 设置 I ...