1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
一、在线调整Ceph RBD的容量大小
1 、支持调整ceph RBD的容量大小的底层文件系统
     自由的增加或者减少RBD的容量,需要底层文件系统的支持,支持的文件系统有
     1 、XFS
     2 、EXT
     3 、Btrfs
     4 、ZFS
 
2 、将RBD镜像ceph - client1 - rbd1原始容量是 10G 扩容为 20G ,(在ceph集群中任意一台节点上)执行的命令如下:
     rbd resize rbd / ceph - client1 - rbd1  - - size  20480
     
     [root@ceph - node1 ~] # rbd info ceph-client1-rbd1
     rbd image  'ceph-client1-rbd1' :
     size  20480  MB  in  5120  objects  #已经扩容为20G
     order  22  ( 4096  kB objects)
     block_name_prefix: rbd_data. 857a238e1f29
     format 2
     features: layering
     flags: 
     
3 、在客户端上检查新的容量是否已经被内核所接受
     [root@ceph - client1 ceph - vol1] # xfs_growfs -d /mnt/ceph-vol1/
     meta - data = / dev / rbd0              isize = 512     agcount = 17 , agsize = 162816  blks
              =                        sectsz = 512    attr = 2 , projid32bit = 1
              =                        crc = 1         finobt = 0  spinodes = 0
     data      =                        bsize = 4096    blocks = 2621440 , imaxpct = 25
              =                        sunit = 1024    swidth = 1024  blks
     naming    = version  2               bsize = 4096    ascii - ci = 0  ftype = 1
     log       = internal               bsize = 4096    blocks = 2560 , version = 2
              =                        sectsz = 512    sunit = 8  blks, lazy - count = 1
     realtime  = none                   extsz = 4096    blocks = 0 , rtextents = 0
     data blocks changed  from  2621440  to  5242880
 
     [root@ceph - client1 ceph - vol1] # df -h
     Filesystem           Size  Used Avail Use %  Mounted on
     devtmpfs              471M      0   471M    0 %  / dev
     tmpfs                 483M      0   483M    0 %  / dev / shm
     tmpfs                 483M   6.6M   477M    2 %  / run
     tmpfs                 483M      0   483M    0 %  / sys / fs / cgroup
     / dev / mapper / cl - root   8.0G   1.5G   6.5G   19 %  /
     / dev / sda1            1014M   186M   829M   19 %  / boot
     tmpfs                  97M      0    97M    0 %  / run / user / 0
     / dev / rbd0              20G   134M    20G    1 %  / mnt / ceph - vol1  #已经是20G
 
二、创建Ceph RBD快照
     1 、在 / mnt / ceph - vol1目录下创建一个文件,用于演示
     [root@ceph - client1 ceph - vol1] # cd /mnt/ceph-vol1
     [root@ceph - client1 ceph - vol1] # vi file_1 
     #文件内容如下:
         hello world  1
         
     2 、创建快照
     [root@ceph - client1 ceph - vol1] # rbd snap create rbd/ceph-client1-rbd1@snap1   #快照名字:snap1
     
     3 、查看镜像的快照
     [root@ceph - client1 ceph - vol1] # rbd snap ls rbd/ceph-client1-rbd1
         SNAPID NAME      SIZE 
              4  snap1  20480  MB 
     
     4 、演示恢复快照的效果,删除原来的文件,并再次创建一个文件
     [root@ceph - client1 ceph - vol1] # rm -rf file_1 
     [root@ceph - client1 ceph - vol1] # ls -l
         total  8
         - rw - r - - r - -  1  root root  13  Jan   7  22 : 32  file_2
     这时候有一个文件file_2,记住刚才做快照的时候,是file_1文件,但是目前被删除了,并且误创建了一个file_2文件
     也就是说恢复快照之后会恢复回原来的file_1文件
     
     5 、恢复快照(在生产环境中,请谨慎操作,)
     [root@ceph - client1 ceph - vol1] # rbd snap rollback rbd/ceph-client1-rbd1@snap1
     Rolling back to snapshot:  100 %  complete...done.
     
     快照回滚操作完成后,重新挂载文件系统以刷新文件系统状态
     umount  / mnt / ceph - vol1
     mount  / dev / rbd0  / mnt / ceph - vol1
     
     6 、快照的删除,删除指定的快照
     rbd snap rm rbd / ceph - client1 - rbd1@snap1
     
     7 、一次性删除所有快照
     [root@ceph - client1 ~] # rbd snap purge rbd/ceph-client1-rbd1
     
     8 、如果需要删除RBD镜像,命令如下
      rbd rm ceph - client1 - rbd1  - p rbd
 
三、复制Ceph RBD
     cow副本:
         ceph存储集群可以从rbd的快照中创建写时复制副本(cow副本),这就是ceph的快照分层。
         RBD父快照是只读的,再从这个RBD父快照创建cow副本,那么cow副本是可读可写的
     
     注意:
         rbd镜像分为两种类型,分别是 format - 1 ,还有 format - 2 ,这两种类型都支持快照的特性
         但是,只有 format - 2 类型支持分层的特性(cow赋值特性),如果在创建rbd镜像时,没有明确指定属于哪种类型
         那么默认是 format - 1 类型。因此,
     
     1 、创建属于 format - 2 类型的rbd镜像
     [root@ceph - node1 my - cluster] # rbd create ceph-client1-rbd2 --size 5024 --image-feature layering --image-format 2
 
     2 、创建快照
     [root@ceph - node1 my - cluster] # rbd snap create rbd/ceph-client1-rbd2@snapshot_for_clone
     
     3 、要创建cow副本之前,将快照设置为保护状态(预防被误删,导致cow分层快照无法使用)
     [root@ceph - node1 my - cluster] # rbd snap protect rbd/ceph-client1-rbd2@snapshot_for_clone
     
     4 、开始创建cow副本
     注意:
         赋值快照需要父存储池,RBD镜像以及快照的名称,对于子实例来说,它需要池以及RBD镜像的名称
     
     [root@ceph - node1 my - cluster] # rbd clone rbd/ceph-client1-rbd2@snapshot_for_clone rbd/ceph-client1-cow-rbd3
 
     
     5 、查看cown副本信息
     [root@ceph - node1 my - cluster] # rbd --pool rbd --image ceph-client1-cow-rbd3 info
     rbd image  'ceph-client1-cow-rbd3' :
     size  5024  MB  in  1256  objects
     order  22  ( 4096  kB objects)
     block_name_prefix: rbd_data. 197553d1b58ba
     format 2
     features: layering
     flags: 
     parent: rbd / ceph - client1 - rbd2@snapshot_for_clone    #父镜像是rbd/ceph-client1-rbd2@snapshot_for_clone
     overlap:  5024  MB
     
     到此,就已经克隆了一个RBD镜像
     
     6 、扁平化该镜像(可选操作)
     说明:
         如果想让克隆出来的快照不依赖它的父镜像,那么就需要扁平化。
         这样的话,克隆出来的RBD镜像就和它的父镜像快照没有任何依赖了
         
         6.1  启动扁平化
         [root@ceph - node1 my - cluster] # rbd flatten ceph-client1-cow-rbd3
         Image flatten:  100 %  complete...done.
         
         6.2  查看cow快照
         [root@ceph - node1 my - cluster] # rbd --pool rbd --image ceph-client1-cow-rbd3 info
         rbd image  'ceph-client1-cow-rbd3' :
         size  5024  MB  in  1256  objects
         order  22  ( 4096  kB objects)
         block_name_prefix: rbd_data. 197553d1b58ba
         format 2
         features: layering
         flags: 
         发现没有了parent:选项,已经变成了一个独立的镜像
         
     7 、删除父镜像快照
         7.1  删除之前首先解除保护状态
         [root@ceph - node1 my - cluster] # rbd snap unprotect rbd/ceph-client1-rbd2@snapshot_for_clone
         
         7.2  开始删除
         [root@ceph - node1 my - cluster] # rbd snap rm rbd/ceph-client1-rbd2@snapshot_for_clone