yesn 发表于 2019-2-2 08:51:55

CEPH集群RBD快照创建、恢复、删除、克隆

      Ceph支持一个非常好的特性,以COW(写时复制)的方式从RBD快照创建克隆,在Ceph中被称为快照分层。分层特性允许用户创建多个CEPH RBD克隆实例。这些特性应用于OpenStack等云平台中
  ,使用快照形式保护ceph RBD 镜像,快照是只读的,但COW克隆是完全可以写 ,可以多次来孵化实例,对云平台来说是非常有用的。
  

      Ceph RBD镜像有format-1和 format-2两种类型,RBD支持这两种类型,但是分层特性COW克隆特性只支持format-2镜像,默认RBD创建的镜像是format-1。
  

  ceph snap几个主要命令
  ceph snap create (snap add)      Create a snapshot.
      snap list (snap ls)         Dump list of image snapshots.
      snap protect                Prevent a snapshot from being deleted.
      snap purge                  Deletes all snapshots.
      snap remove (snap rm)       Deletes a snapshot.
      snap rename               Rename a snapshot.
      snap rollback (snap revert) Rollback image to snapshot.
      snap unprotect            Allow a snapshot to be deleted.
  

  一、创建RBD镜像实例:
  1、在pool1上创建一个RBD镜像,不使用-p 默认在rbd存储池上创建
  # rbd create rbd1 -p pool1 --size 5G --image-format 1
  rbd: image format 1 is deprecated
  

  查看创建结果,使用-p指定存储池
  # rbd list -p pool1
  rbd1
  # rbd info --image pool1/rbd1
  rbd image 'rbd1':
      size 5120 MB in 1280 objects
      order 22 (4096 kB objects)
      block_name_prefix: rb.0.15d23.238e1f29
      format: 1
  

  2、映射块设备
  # rbd map --image pool1/rbd1
  /dev/rbd3
  
   查看映射的块设备
  # rbd showmapped
  id poolimage         snap device   
  0rbd   block-device1 -    /dev/rbd0
  1rbd   block-device3 -    /dev/rbd1
  2rbd   block-device4 -    /dev/rbd2
  3pool1 rbd1          -    /dev/rbd3
  
  3、挂载文件系统使用
  # mkfs.xfs /dev/rbd3
  meta-data=/dev/rbd3            isize=256    agcount=9, agsize=162816 blks
           =                     sectsz=512   attr=2, projid32bit=1
           =                     crc=0      finobt=0
  data   =                     bsize=4096   blocks=1310720, imaxpct=25
           =                     sunit=1024   swidth=1024 blks
  naming   =version 2            bsize=4096   ascii-ci=0 ftype=0
  log      =internal log         bsize=4096   blocks=2560, version=2
           =                     sectsz=512   sunit=8 blks, lazy-count=1
  realtime =none                   extsz=4096   blocks=0, rtextents=0
  

  # mkdir /mnt/rbd3
  # mount /dev/rbd3 /mnt/rbd3
  # mount | grep rbd3
  /dev/rbd3 on /mnt/rbd3 type xfs (rw,relatime,attr2,inode64,sunit=8192,swidth=8192,noquota)
  # touch /mnt/rbd3/test
  # ls /mnt/rbd3/
  test
  

  4、创建快照
  # rbd snap create pool1/rbd1@snapshot1
  # rbd snap ls pool1/rbd1
  SNAPID NAME         SIZE
     4 snapshot1 5120 MB
  

  5、在rbd3目录下创建文件test1
  # touch /mnt/rbd3/test1
  # ls /mnt/rbd3/
  testtest1
  

  6、恢复rbd1的快照
  # rbd snap rollback pool1/rbd1@snapshot1
  Rolling back to snapshot: 100% complete...done.
  语法:rbd snap rollback /@
  

  7、重新挂载文件系统,发现已经恢复到之前的状态了
  # umount /mnt/rbd3
  # mount /dev/rbd3 /mnt/rbd3/
  # ls /mnt/rbd3/
  test
  #
  

  8、不再使用镜像时可以删除掉镜像
  # rbd snap rm pool1/rbd1@snapshot1
  # rbd snap ls pool1/rbd1
  语法:rbd snap rm /@
  

  9、删除多个快照
  # rbd snap purge pool1/rbd1
  语法:rbd snap purge /
  

  二、使用RBD克隆
  创建rbd2,类型为format2的RBD镜像
  # rbd create rbd2 --size 10240 --image-format 2
  # rbd info --image rbd2
  rbd image 'rbd2':
      size 10240 MB in 2560 objects
      order 22 (4096 kB objects)
      block_name_prefix: rbd_data.15821238e1f29
      format: 2
      features: layering, exclusive-lock, object-map, fast-diff, deep-flatten
      flags:
  

  创建RBD镜像快照
  # rbd snap create rbd/rbd2@snapshot1
  # rbd snap ls rbd/rbd2
  SNAPID NAME          SIZE
     7 snapshot1 10240 MB
  

  创建COW镜像前先要保护这个快照,这是非常重要的一步
  # rbd snap protect rbd/rbd2@snapshot1
  通过快照创建一个克隆的RBD镜像
  

  # rbd clone rbd/rbd2@snapshot1 rbd/clone_rbd2
  # rbd info --image rbd/clone_rbd2
  rbd image 'clone_rbd2':
      size 10240 MB in 2560 objects
      order 22 (4096 kB objects)
      block_name_prefix: rbd_data.15c1b3d1b58ba
      format: 2
      features: layering, exclusive-lock, object-map, fast-diff, deep-flatten
      flags:
  parent: rbd/rbd2@snapshot1
      overlap: 10240 MB
  

  创建克隆好了一个依赖于父镜像快照的RBD镜像后,为了让这个克隆的RBD镜像独立于父镜像,我们需要将父镜像的信息合并flattern到子镜像,一旦合并完成,RBD镜像和它的父镜像就不会存在任何关系了。
  使用flatten合并
  # rbd flatten rbd/clone_rbd2
  Image flatten: 100% complete...done.
  

  合并完成后,查看这个镜像信息,发现父镜像/快照名字不存大了
  # rbd info --image clone_rbd2
  rbd image 'clone_rbd2':
      size 10240 MB in 2560 objects
      order 22 (4096 kB objects)
      block_name_prefix: rbd_data.15c1b3d1b58ba
      format: 2
      features: layering, exclusive-lock, object-map, fast-diff, deep-flatten
      flags:
  #
  

  如果你不再使用父镜像,可以先移除它的保护状态,再删除它
  # rbd snap unprotect rbd/rbd2@snapshot1
  # rbd snap rm rbd/rbd2@snapshot1
  




页: [1]
查看完整版本: CEPH集群RBD快照创建、恢复、删除、克隆