Ceph实践之rbd

image

1.创建image

  • 数据存储池保护策略为副本
    命令格式:
    rbd create {replicated_pool_name}/{image_name} --size {image_size}

    rbd create {image_name} --size {image_size} --pool {replicated_pool_name}
    eg:
    rbd create data/image --size=1024M
    rbd create image4 --size 1M --pool data

  • 数据数据池保护策略为纠删码

ceph Luminous支持image的数据池为纠删码,rbd将imge数据存储在纠删码池中,但image头和元数据仍然需要进入副本存储池(所以需要2个存储池,副本存储池做元数据存储池)
命令格式:
rbd create {replicated_pool}/{image_name} --size {image_size} --data-pool {erasure_pool}

rbd create {image_name} --pool {replicated_pool} --size {image_size} --data-pool {image_name}
eg:(data为副本,ec为纠删码)
rbd create data/image_ec --size 1024 --data-pool ec

rbd create image_ec1 --pool data --size 1024 --data-pool ec

在后续的一次实践中发现使用上述命令遇到创建image失败,报错形如:librbd::image::CreateRequest: 0x564b123bcef0 handle_validate_overwrite: pool missing required overwrite support
rbd: create error: (22) Invalid argument
研究后发现,Luminous支持image的数据池为纠删码,必须设置纠删码存储池的allow_ec_overwrites属性为true

问题解决如下:

[root@node81 test]# 
[root@node81 test]# rbd create rbd_meta/image_ec --size 1024 --data-pool rbd_data
2018-12-12 02:00:50.926325 7f7033fff700 -1 librbd::image::CreateRequest: 0x564b123bcef0 handle_validate_overwrite: pool missing required overwrite support
rbd: create error: (22) Invalid argument
[root@node81 test]# 
[root@node81 test]# 
[root@node81 test]# ceph osd pool set rbd_data allow_ec_overwrites true
set pool 4 allow_ec_overwrites to true
[root@node81 test]# 
[root@node81 test]# 
[root@node81 test]# rbd create rbd_meta/image_ec --size 1024 --data-pool rbd_data
[root@node81 test]# 
[root@node81 test]# 
[root@node81 test]# rbd info rbd_meta/image_ec
rbd image 'image_ec':
    size 1GiB in 256 objects
    order 22 (4MiB objects)
    data_pool: rbd_data
    block_name_prefix: rbd_data.3.1edeb6b8b4567
    format: 2
    features: layering, exclusive-lock, object-map, fast-diff, deep-flatten, data-pool
    flags: 
    create_timestamp: Wed Dec 12 02:02:03 2018
[root@node81 test]# 


2.查看image信息

  • 查看某个存储池下所有image信息,可选参数-l会例举一些扩展信息(快照、克隆、大小等)
    命令格式:
    rbd ls [ -l ] {pool_name}
    eg:
    rbd ls -l data
    输出形如:
[root@node81 ~]# rbd ls -l data
NAME          SIZE PARENT FMT PROT LOCK 
clone1        1GiB          2           
image         1GiB          2           
image@snap    1GiB          2           
image2        1GiB          2           
image3     1022MiB          2      excl 
image3@1   1022MiB          2           
image4        1MiB          2           
image_ec      1GiB          2           
image_ec1     1GiB          2           
[root@node81 ~]# 

  • 查看某个image详情(大小)
    命令格式:
    rbd info {pool_name}/{image_name}
    eg:
    rbd info data/image2
    输出形如:
[root@node81 ~]# rbd info data/image2
rbd image 'image2':
    size 1GiB in 256 objects
    order 22 (4MiB objects)
    block_name_prefix: rbd_data.647b6b8b4567
    format: 2
    features: layering, exclusive-lock, object-map, fast-diff, deep-flatten
    flags: 
    create_timestamp: Wed Nov 14 02:54:50 2018
[root@node81 ~]# 
[root@node81 ~]# 

3.删除image
命令形式:
rbd rm {pool_name}/{image_name}
例如:
rbd rm data/image3
注意:
如果该image还有快照信息,删除image会失败,形如:


[root@node81 ~]# rbd rm data/image3
2018-11-15 02:08:27.845097 7f8dd2ffd700 -1 librbd::image::RemoveRequest: 0x55f34ff35090 check_image_snaps: image has snapshots - not removing
Removing image: 0% complete...failed.
rbd: image has snapshots - these must be deleted with 'rbd snap purge' before the image can be removed.
[root@node81 ~]# 


快照

快照(snapshot)是镜像(image)在某个时间点只读副本,可在以后用作恢复

1.创建快照

命令格式:
rbd snap create {pool_name}/{image_name}@{snapshot_name}
eg:
为data存储池下的image镜像创建一个名为snap的快照
rbd snap create data/image@snap


2.查看快照信息

可通过rbd info查看快照的包括大小、创建时间等信息
命令格式:
rbd info {pool_name}/{image_name}@{snapshot_name}
eg:
rbd info data/image@snap
输出形如:

[root@node81 ~]# rbd info data/image@snap
rbd image 'image':
    size 1GiB in 256 objects
    order 22 (4MiB objects)
    block_name_prefix: rbd_data.63b06b8b4567
    format: 2
    features: layering, exclusive-lock
    flags: 
    create_timestamp: Wed Nov 14 02:54:18 2018
    protected: False
[root@node81 ~]# 

3.删除快照

命令形式:
rbd snap rm {pool_name}/{image_name}@{snapshot_name}
例如:
rbd snap rm data/image3@1
输出形如:

[root@node81 ~]# rbd snap rm data/image3@1
Removing snap: 100% complete...done.
[root@node81 ~]# 

注意:如果一个快照存在子依赖关系,删除快照会失败,形如:

[root@node81 ~]# rbd children data/image@snap
data/image_clone
[root@node81 ~]# 
[root@node81 ~]# rbd snap rm data/image@snap
Removing snap: 0% complete...failed.
rbd: snapshot 'snap' is protected from removal.
2018-11-15 02:19:11.942321 7fd574251d40 -1 librbd::Operations: snapshot is protected
[root@node81 ~]# 
[root@node81 ~]# rbd children data/image@snap
data/image_clone
[root@node81 ~]# 
[root@node81 ~]# rbd snap rm data/image@snap
Removing snap: 0% complete...failed.
rbd: snapshot 'snap' is protected from removal.
2018-11-15 02:19:11.942321 7fd574251d40 -1 librbd::Operations: snapshot is protected
[root@node81 ~]# 
[root@node81 ~]# rbd snap unprotect data/image@snap
2018-11-15 02:21:57.264547 7fb0c7fff700 -1 librbd::SnapshotUnprotectRequest: cannot unprotect: at least 1 child(ren) [1da406b8b4567] in pool 'data'
2018-11-15 02:21:57.264869 7fb0c7fff700 -1 librbd::SnapshotUnprotectRequest: encountered error: (16) Device or resource busy
2018-11-15 02:21:57.264899 7fb0c7fff700 -1 librbd::SnapshotUnprotectRequest: 0x55e25d19e7f0 should_complete_error: ret_val=-16
2018-11-15 02:21:57.293915 7fb0c7fff700 -1 librbd::SnapshotUnprotectRequest: 0x55e25d19e7f0 should_complete_error: ret_val=-16
rbd: unprotecting snap failed: (16) Device or resource busy
[root@node81 ~]# 
[root@node81 ~]# rbd flatten data/image_clone
Image flatten: 100% complete...done.
[root@node81 ~]# rbd snap rm data/image@snap
Removing snap: 0% complete...failed.
rbd: snapshot 'snap' is protected from removal.
2018-11-15 02:22:51.594912 7f5ae715cd40 -1 librbd::Operations: snapshot is protected
[root@node81 ~]# 
[root@node81 ~]# rbd snap unprotect data/image@snap
[root@node81 ~]# 
[root@node81 ~]# 
[root@node81 ~]# rbd snap rm data/image@snap
Removing snap: 100% complete...done.
[root@node81 ~]# 

4.回滚快照

命令形式:
rbd snap rollback {pool_name}/{image_name}@{snapshot_name}
例如:
rbd snap rollback data/image@snap
输出:

[root@node81 ~]# rbd snap rollback data/image@snap
Rolling back to snapshot: 100% complete...done.
[root@node81 ~]# 

  • 记实践过程中回滚快照不成功情况
    问题出现步骤:创建镜像->映射->格式化为xfs->挂载文件系统->写入数据->创建快照->回滚快照
    回滚快照时出现如下报错:
[root@node81 h]# rbd snap rollback data/image@snap_volume1
Rolling back to snapshot: 0% complete...failed.
rbd: rollback failed: (30) Read-only file system
[root@node81 h]# 

出现这种问题的原因是在映射镜像时exclusive-lock(独占锁)特性的问题导致的

克隆

1.创建克隆实践

在创建克隆之前,必须将快照保护起来(快照默认是没有保护的状态),否则会报错,如:

[root@node81 ~]# rbd clone data/image@snap data/image_clone
2018-11-14 22:52:40.996878 7f6505f35d40 -1 librbd::image::CloneRequest: parent snapshot must be protected
rbd: clone error: (22) Invalid argument
[root@node81 ~]# 

保护快照

命令:
rbd protect {pool_name}/{image_name}@{snap_name}
例如:
rbd snap protect data/image@snap
输出:

[root@node81 ~]# rbd snap protect data/image@snap
[root@node81 ~]# rbd info data/image@snap
rbd image 'image':
    size 1GiB in 256 objects
    order 22 (4MiB objects)
    block_name_prefix: rbd_data.63b06b8b4567
    format: 2
    features: layering, exclusive-lock
    flags: 
    create_timestamp: Wed Nov 14 02:54:18 2018
    protected: True     //默认为False
[root@node81 ~]# 
[root@node81 ~]# 

创建克隆

ceph Luminous支持image的数据池为纠删码,rbd将imge数据存储在纠删码池中,但image头和元数据仍然需要进入副本存储池(所以需要2个存储池,副本存储池做元数据存储池)
--克隆目标是副本存储池
命令:rbd clone {pool_name}/{image_name}@{snapshot_name} {replicated_pool}/{dest_image_name}
例如:
rbd clone data/image@snap data/image_clone
输出:

[root@node81 ~]# rbd clone data/image@snap data/image_clone
[root@node81 ~]# rbd ls -l data
NAME           SIZE PARENT          FMT PROT LOCK 
clone1         1GiB                   2           
image          1GiB                   2           
image@snap     1GiB                   2 yes       
image2         1GiB                   2           
image3      1022MiB                   2      excl 
image3@1    1022MiB                   2           
image4         1MiB                   2           
image_clone    1GiB data/image@snap   2           
image_ec       1GiB                   2           
image_ec1      1GiB                   2           
[root@node81 ~]# 

--克隆目标是纠删码存储池
命令格式:
rbd clone {replicate_pool}/{image_name}@{snapshot_name} {replicated_pool}/{dest_image} --data-pool {erasure_pool}
例如:
data为副本存储池,ec为纠删码存储池
rbd clone data/image@snap data/image_clone1 --data-pool ec
输出:

[root@node81 ~]# rbd clone data/image@snap data/image_clone1 --data-pool ec
[root@node81 ~]# rbd ls -l data
NAME            SIZE PARENT          FMT PROT LOCK 
clone1          1GiB                   2           
image           1GiB                   2           
image@snap      1GiB                   2 yes       
image2          1GiB                   2           
image3       1022MiB                   2      excl 
image3@1     1022MiB                   2           
image4          1MiB                   2           
image_clone     1GiB data/image@snap   2           
image_clone1    1GiB data/image@snap   2           
image_ec        1GiB                   2           
image_ec1       1GiB                   2           
[root@node81 ~]# 

依赖问题

从一个快照创建克隆后,生成的克隆卷会依赖快照的信息,查看一个快照的"孩子":
命令形式:
rbd children {pool_name}/{image_name}@{snapshot_name}
例如:
rbd children data/image@snap
输出形如:

[root@node81 ~]# rbd children data/image@snap
data/image_clone
data/image_clone1
[root@node81 ~]# 

要想一个克隆卷不再依赖于某个快照(解除这种依赖关系),需要将这个快照扁平化
命令形式:
rbd flatten {pool_name}/{clone_image}
例如:
rbd flatten data/image_clone
扁平化后再来查看,此依赖,如下:

[root@node81 ~]# rbd children data/image@snap
data/image_clone
data/image_clone1
[root@node81 ~]# 
[root@node81 ~]# 
[root@node81 ~]# rbd flatten data/image_clone
Image flatten: 100% complete...done.
[root@node81 ~]# 
[root@node81 ~]# rbd children data/image@snap
data/image_clone1
[root@node81 ~]# 

取消快照保护

对快照创建克隆后,建议取消快照的保护,防止下一次保护一个已保护的快照报错,注意克隆一个快照但未解除快照与克隆之间的依赖时去取消一个快照的保护(扁平化),此操作会失败。
保护一个已保护的快照,失败形如:

[root@node81 ~]# rbd snap protect data/image@snap
rbd: snap is already protected
[root@node81 ~]# 

取消快照保护,命令形式:
rbd snap unprotect {pool_name}/{image_name}@{snapshot_name}
例如:

[root@node81 ~]# rbd children data/image@snap 
data/clone
[root@node81 ~]# rbd snap unprotect data/image@snap 
2018-11-15 00:46:49.348735 7fbbfeffd700 -1 librbd::SnapshotUnprotectRequest: cannot unprotect: at least 1 child(ren) [192aa6b8b4567] in pool 'data'
2018-11-15 00:46:49.348976 7fbbfeffd700 -1 librbd::SnapshotUnprotectRequest: encountered error: (16) Device or resource busy
2018-11-15 00:46:49.349014 7fbbfeffd700 -1 librbd::SnapshotUnprotectRequest: 0x556bb1e5e850 should_complete_error: ret_val=-16
2018-11-15 00:46:49.369881 7fbbfeffd700 -1 librbd::SnapshotUnprotectRequest: 0x556bb1e5e850 should_complete_error: ret_val=-16
rbd: unprotecting snap failed: (16) Device or resource busy
[root@node81 ~]# 
[root@node81 ~]# rbd flatten data/clone
Image flatten: 100% complete...done.
[root@node81 ~]# 
[root@node81 ~]# rbd snap unprotect data/image@snap 
[root@node81 ~]# 

映射

  • 映射一个镜像
    命令形式:
    rbd map {pool_name}/{image_name}
    例如:
    rbd map data/image
    在实践的过程中如下错误,映射失败
[root@node81 ~]# 
[root@node81 ~]# rbd map data/image1
rbd: sysfs write failed
RBD image feature set mismatch. You can disable features unsupported by the kernel with "rbd feature disable data/image1 object-map fast-diff deep-flatten".
In some cases useful info is found in syslog - try "dmesg | tail".
rbd: map failed: (6) No such device or address
[root@node81 ~]# 

出现这种错误的原因是系统kernel不支持块设备镜像的一些特性,所以映射失败
禁用掉不支持的特性:
rbd feature disable {pool_name}/{image_name} {some_features}
例如:

[root@node81 ~]# rbd feature disable data/image1 object-map, fast-diff, deep-flatten
[root@node81 ~]# 
[root@node81 ~]# rbd info data/image1
rbd image 'image1':
    size 10MiB in 3 objects
    order 22 (4MiB objects)
    block_name_prefix: rbd_data.1d7456b8b4567
    format: 2
    features: layering, exclusive-lock
    flags: 
    create_timestamp: Thu Nov 15 04:47:08 2018
[root@node81 ~]# rbd map data/image1
/dev/rbd2
[root@node81 ~]# 

map失败讲解

  • 查看映射关系
    命令:
    rbd showmapped
    返回形如:
[root@node81 ~]# rbd showmapped
id pool image  snap device    
0  data image  -    /dev/rbd0 
1  data image1 -    /dev/rbd1
[root@node81 ~]# 

  • 取消映射关系
    rbd unmap {pool_name}/{image_name}
    返回形如:
[root@node81 ~]# rbd showmapped
id pool image  snap device    
0  data image  -    /dev/rbd0 
1  data image1 -    /dev/rbd1
[root@node81 ~]# 
[root@node81 ~]# rbd unmap data/image1
[root@node81 ~]# 
[root@node81 ~]# rbd showmapped
id pool image snap device    
0  data image -    /dev/rbd0
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,390评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,821评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,632评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,170评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,033评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,098评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,511评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,204评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,479评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,572评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,341评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,213评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,576评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,893评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,171评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,486评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,676评论 2 335

推荐阅读更多精彩内容