2016年11月21日 星期一

在 CentOS7/RHEL7 上,使用快照分層化(Snapshot layering)快速建立影像檔案!

設定提要:
  • Ceph Hammer 套件的架設,請參考這一篇
  • Ceph Block 的使用,請參考這一篇
  • 管理 RBD 快照的方式,請參考這一篇
快速設定流程:
  1. 在 ServerC 上建立一個 128MB 的 RDB 映像檔:(--image-format 2 是啟動分層功能的方式!)
    [root@serverc ~]#rbd create test-clone --image-format 2 --size 128
    
  2. 在 ServerB 上建立一個指標,指到上一步驟所建立的 RDB 映像檔:
    [root@serverb ~]# rbd --id rbd.serverb map test-clone
    [root@serverb ~]# rbd --id rbd.serverb showmapped
    id pool image      snap device    
    0  rbd  test-clone -    /dev/rbd0 
    
  3. 在 ServerB 上,針對 RDB 映像檔,建立檔案系統,並且掛載到 /mnt/clones 目錄下:
    [root@serverb ~]#mkfs.ext4 /dev/rbd0
    [root@serverb ~]#mkdir /mnt/clones
    [root@serverb ~]#mount /dev/rbd0 /mnt/clones
    
  4. 在 ServerB 上,新增一個 10MB 的檔案到 /mnt/clones 目錄下:
    [root@serverb ~]#dd if=/dev/zero of=/mnt/clones/file-1 bs=1M count=10
    
  5. 在 ServerC 上,新增一個新的 snapshot:
    [root@serverc ~]#rbd snap create --snap my-snapshot test-clone
    
  6. 在 ServerC 上,建立一個 my-snapshot 複本在 test-clone 內,名為 my-clone:
    [root@serverc ~]#rbd clone --image test-clone --snap my-snapshot --dest my-clone
    
  7. 在 ServerC 上,確認 my-clone 有完整被建立起來:
    [root@serverc ~]#rbd children --image test-clone --snap my-snapshot
    
  8. 在 ServerC 上,扁平化 my-clone 影像檔:
    [root@serverc ~]#rbd flatten --image my-clone
    
  9. 在 ServerB 上建立一個指標,指到新建立的 my-clone 映像檔:
    [root@serverb ~]#rbd --id rbd.serverb map my-clone
    [root@serverb ~]# rbd --id rbd.serverb showmapped
    
  10. 在 ServerB 上,缷載 /mnt/clones 目錄:
    [root@serverb ~]#umount /mnt/clones
    
  11. 在 ServerB 上,掛載新的 RBD 檔到 /mnt/clones 目錄:
    [root@serverb ~]#mount /dev/rbd1 /mnt/clones
    
  12. 在 ServerB 上,查詢 /mnt/clones 目錄,是否有 file-1 檔案:
    [root@serverb ~]#ls /mnt/clones
    

2016年11月17日 星期四

在 CentOS7/RHEL7 上,管理 RBD 快照檔案!

設定提要:
  • Ceph Hammer 套件的架設,請參考這一篇
  • Ceph Block 的使用,請參考這一篇
快速設定流程:
  1. 在 ServerC 上建立一個 128MB 的 RDB 映像檔:
    [root@serverc ~]# rbd create test-snapshot --size 128
    
  2. 在 ServerB 上建立一個指標,指到上一步驟所建立的 RDB 映像檔:
    [root@serverb ~]# rbd --id rbd.serverb map test-snapshot
    [root@serverb ~]# rbd --id rbd.serverb showmapped
    id pool image         snap device    
    0  rbd  test-snapshot -    /dev/rbd0 
    
    
  3. 在 ServerB 上,將 RDB 映像檔格式化成 ext4 檔案系統:
    [root@serverb ~]# mkfs.ext4 /dev/rbd0
    
  4. 在 ServerB 上,將 RDB 映像檔掛載起來:
    [root@serverb ~]# mkdir /mnt/snapshots
    [root@serverb ~]# mount /dev/rbd0 /mnt/snapshots
    
  5. 在 ServerB 上,利用 df 指令來查看檔案系統:
    [root@serverb ~]# df -h
    
  6. 利用 dd 指令,在 snapshots 目錄內,建一個 10MB 的檔案:
    [root@serverb ~]# dd if=/dev/zero of=/mnt/snapshots/file-1 bs=1M count=10
    
  7. 在 ServerC 上建立一個 RDB 快照檔案,指向 RDB 映像檔:
    [root@serverc ~]# rbd snap create --snap my-snapshot test-snapshot
    
  8. 在 ServerB 上,利用 dd 指令,在 snapshots 目錄內,建另一個 10MB 的檔案:
    [root@serverb ~]# dd if=/dev/zero of=/mnt/snapshots/file-2 bs=1M count=10
    [root@serverb ~]#ls /mnt/snapshots
    
  9. 在 ServerC 上建立另一個 RDB 快照檔案,指向 RDB 映像檔:
    [root@serverc ~]# rbd snap create --snap another-snap test-snapshot
    
  10. 在 ServerB 上,缷載 /mnt/snapshots 目錄:
    [root@serverb ~]#umount /mnt/snapshots
    
  11. 在 ServerC 上,列出所有建立的 RDB 快照檔案:
    [root@serverc ~]# rbd --id rbd.serverb snap ls test-snapshot
    
  12. 在 ServerC 上,返回到第一個 RDB 快照, my-snapshot:
    [root@serverc ~]# rbd snap rollback --snap my-snapshot test-snapshot
    
  13. 在 ServerB 上,將 RDB 映像檔掛載起來:
    [root@serverb ~]# mount /dev/rbd0 /mnt/snapshots
    [root@serverb ~]#ls /mnt/snapshots
    
  14. 在 ServerB 上,缷載 /mnt/snapshots 目錄:
    [root@serverb ~]#umount /mnt/snapshots
    
  15. 在 ServerC 上,返回到第二個 RDB 快照, another-snapshot:
    [root@serverc ~]# rbd snap rollback --snap another-snap test-snapshot
    
  16. 在 ServerB 上,將 RDB 映像檔掛載起來:
    [root@serverb ~]# mount /dev/rbd0 /mnt/snapshots
    [root@serverb ~]#ls /mnt/snapshots