Ceph RGW误删index对象恢复
版本
[root@control1 ~]# ceph -v
ceph version 14.2.22 (ca74598065096e6fcbd8433c8779a2be0c889351) nautilus (stable)
问题
RGW将对象的索引信息存储在 <zone>.rgw.buckets.index pool中,在不分片的情况下,一个对象就对应一个bucket,分片的情况下,多个对象对应同一个bucket,在该对象的omap中存储这bucket的索引信息,如果将这个对象误删除,那么就无法看到该bucket中都有哪些对象,但是对象的真实数据是存储在 <zone>.rgw.buckets.data pool中的,只要data中的数据没有被删除,那么仍然可以正常get到该对象,此时只要object rewrite或者重新向该bucket中上传这些对象就可以自动修复index。
示例
1. 准备测试数据
[root@control1 ~]# s3cmd mb s3://nice
Bucket 's3://nice/' created
[root@control1 ~]#
[root@control1 ~]#
[root@control1 ~]# s3cmd ls s3://nice
[root@control1 ~]#
[root@control1 ~]# s3cmd put pushgateway-1.4.2.linux-amd64.tar.gz s3://nice
[root@control1 ~]# s3cmd put node_exporter-1.1.2.linux-amd64.tar.gz s3://nice
[root@control1 ~]#
[root@control1 ~]#
[root@control1 ~]# s3cmd ls s3://nice
2023-02-13 06:12 9246179 s3://nice/node_exporter-1.1.2.linux-amd64.tar.gz
2023-02-13 06:09 9189846 s3://nice/pushgateway-1.4.2.linux-amd64.tar.gz
2. 查看底层数据结构
2.1 找到bucket对应的id
[root@control1 ~]# radosgw-admin bucket stats --bucket nice
{
"bucket": "nice",
"num_shards": 0,
"tenant": "",
"zonegroup": "cc0580a9-21d5-4377-b64b-fabf1f55fb4e",
"placement_rule": "default-placement",
"explicit_placement": {
"data_pool": "",
"data_extra_pool": "",
"index_pool": ""
},
"id": "8c065d13-f5f0-4923-9ea0-7518b7760495.45180186.2",
"marker": "8c065d13-f5f0-4923-9ea0-7518b7760495.45180186.2",
"index_type": "Normal",
"owner": "1034c29d7fec46e897aa531f832b6e5c",
"ver": "0#3",
"master_ver": "0#0",
"mtime": "2023-02-13 06:07:37.785853Z",
"max_marker": "0#",
"usage": {
"rgw.main": {
"size": 18436025,
"size_actual": 18440192,
"size_utilized": 18436025,
"size_kb": 18004,
"size_kb_actual": 18008,
"size_kb_utilized": 18004,
"num_objects": 2
}
},
"bucket_quota": {
"enabled": false,
"check_on_raw": false,
"max_size": -1,
"max_size_kb": 0,
"max_objects": -1
}
}
2.2 在index pool中查看该对象的信息
[root@control1 ~]# rados ls -p cn-1.rgw.buckets.index | grep 8c065d13-f5f0-4923-9ea0-7518b7760495.45180186.2
.dir.8c065d13-f5f0-4923-9ea0-7518b7760495.45180186.2 [root@control1 ~]# rados -p cn-1.rgw.buckets.index listomapkeys .dir.8c065d13-f5f0-4923-9ea0-7518b7760495.45180186.2
node_exporter-1.1.2.linux-amd64.tar.gz
pushgateway-1.4.2.linux-amd64.tar.gz
[root@control1 ~]#
[root@control1 ~]#
[root@control1 ~]# rados -p cn-1.rgw.buckets.index listomapvals .dir.8c065d13-f5f0-4923-9ea0-7518b7760495.45180186.2
node_exporter-1.1.2.linux-amd64.tar.gz
value (293 bytes) :
00000000 08 03 1f 01 00 00 26 00 00 00 6e 6f 64 65 5f 65 |......&...node_e|
00000010 78 70 6f 72 74 65 72 2d 31 2e 31 2e 32 2e 6c 69 |xporter-1.1.2.li|
00000020 6e 75 78 2d 61 6d 64 36 34 2e 74 61 72 2e 67 7a |nux-amd64.tar.gz|
00000030 03 00 00 00 00 00 00 00 01 07 03 91 00 00 00 01 |................|
00000040 e3 15 8d 00 00 00 00 00 ea d4 e9 63 7b eb 01 07 |...........c{...|
00000050 20 00 00 00 36 31 65 32 62 39 36 33 66 36 36 66 | ...61e2b963f66f|
00000060 31 65 30 30 36 34 39 63 38 65 34 64 31 66 34 37 |1e00649c8e4d1f47|
00000070 32 39 65 35 20 00 00 00 31 30 33 34 63 32 39 64 |29e5 ...1034c29d|
00000080 37 66 65 63 34 36 65 38 39 37 61 61 35 33 31 66 |7fec46e897aa531f|
00000090 38 33 32 62 36 65 35 63 05 00 00 00 61 64 6d 69 |832b6e5c....admi|
000000a0 6e 12 00 00 00 61 70 70 6c 69 63 61 74 69 6f 6e |n....application|
000000b0 2f 78 2d 67 7a 69 70 e3 15 8d 00 00 00 00 00 00 |/x-gzip.........|
000000c0 00 00 00 08 00 00 00 53 54 41 4e 44 41 52 44 00 |.......STANDARD.|
000000d0 00 00 00 00 00 00 00 00 01 01 02 00 00 00 0c 03 |................|
000000e0 02 32 00 00 00 38 63 30 36 35 64 31 33 2d 66 35 |.2...8c065d13-f5|
000000f0 66 30 2d 34 39 32 33 2d 39 65 61 30 2d 37 35 31 |f0-4923-9ea0-751|
00000100 38 62 37 37 36 30 34 39 35 2e 34 35 31 39 38 33 |8b7760495.451983|
00000110 37 37 2e 33 35 36 37 00 00 00 00 00 00 00 00 00 |77.3567.........|
00000120 00 00 00 00 00 |.....|
00000125 pushgateway-1.4.2.linux-amd64.tar.gz
value (291 bytes) :
00000000 08 03 1d 01 00 00 24 00 00 00 70 75 73 68 67 61 |......$...pushga|
00000010 74 65 77 61 79 2d 31 2e 34 2e 32 2e 6c 69 6e 75 |teway-1.4.2.linu|
00000020 78 2d 61 6d 64 36 34 2e 74 61 72 2e 67 7a 0b 00 |x-amd64.tar.gz..|
00000030 00 00 00 00 00 00 01 07 03 91 00 00 00 01 d6 39 |...............9|
00000040 8c 00 00 00 00 00 0a d4 e9 63 7f a9 85 1b 20 00 |.........c.... .|
00000050 00 00 38 35 63 33 62 39 61 30 30 36 36 37 66 34 |..85c3b9a00667f4|
00000060 38 36 32 64 37 62 38 36 31 36 35 66 63 64 30 34 |862d7b86165fcd04|
00000070 39 33 20 00 00 00 31 30 33 34 63 32 39 64 37 66 |93 ...1034c29d7f|
00000080 65 63 34 36 65 38 39 37 61 61 35 33 31 66 38 33 |ec46e897aa531f83|
00000090 32 62 36 65 35 63 05 00 00 00 61 64 6d 69 6e 12 |2b6e5c....admin.|
000000a0 00 00 00 61 70 70 6c 69 63 61 74 69 6f 6e 2f 78 |...application/x|
000000b0 2d 67 7a 69 70 d6 39 8c 00 00 00 00 00 00 00 00 |-gzip.9.........|
000000c0 00 08 00 00 00 53 54 41 4e 44 41 52 44 00 00 00 |.....STANDARD...|
000000d0 00 00 00 00 00 00 01 01 02 00 00 00 0c 0b 01 32 |...............2|
000000e0 00 00 00 38 63 30 36 35 64 31 33 2d 66 35 66 30 |...8c065d13-f5f0|
000000f0 2d 34 39 32 33 2d 39 65 61 30 2d 37 35 31 38 62 |-4923-9ea0-7518b|
00000100 37 37 36 30 34 39 35 2e 34 35 31 39 38 33 37 37 |7760495.45198377|
00000110 2e 33 35 35 33 00 00 00 00 00 00 00 00 00 00 00 |.3553...........|
00000120 00 00 00 |...|
00000123
可以看到index对象通过omap的方式存储了该bucket跟该bucket中对象的索引关系,以及对象的一些元数据信息,比如修改时间,文件类型等,可以通过下面命令来查看:
[root@control1 ~]# radosgw-admin bucket list --bucket nice
[
{
"name": "node_exporter-1.1.2.linux-amd64.tar.gz",
"instance": "",
"ver": {
"pool": 12,
"epoch": 3
},
"locator": "",
"exists": "true",
"meta": {
"category": 1,
"size": 9246179,
"mtime": "2023-02-13 06:12:58.117566Z",
"etag": "61e2b963f66f1e00649c8e4d1f4729e5",
"storage_class": "STANDARD",
"owner": "1034c29d7fec46e897aa531f832b6e5c",
"owner_display_name": "admin",
"content_type": "application/x-gzip",
"accounted_size": 9246179,
"user_data": "",
"appendable": "false"
},
"tag": "8c065d13-f5f0-4923-9ea0-7518b7760495.45198377.3567",
"flags": 0,
"pending_map": [],
"versioned_epoch": 0
},
{
"name": "pushgateway-1.4.2.linux-amd64.tar.gz",
"instance": "",
"ver": {
"pool": 12,
"epoch": 11
},
"locator": "",
"exists": "true",
"meta": {
"category": 1,
"size": 9189846,
"mtime": "2023-02-13 06:09:14.461744Z",
"etag": "85c3b9a00667f4862d7b86165fcd0493",
"storage_class": "STANDARD",
"owner": "1034c29d7fec46e897aa531f832b6e5c",
"owner_display_name": "admin",
"content_type": "application/x-gzip",
"accounted_size": 9189846,
"user_data": "",
"appendable": "false"
},
"tag": "8c065d13-f5f0-4923-9ea0-7518b7760495.45198377.3553",
"flags": 0,
"pending_map": [],
"versioned_epoch": 0
}
]
2.3 查看data pool中该bucket的数据对象
[root@control1 ~]# rados -p cn-1.rgw.buckets.data ls | grep 8c065d13-f5f0-4923-9ea0-7518b7760495.45180186.2
8c065d13-f5f0-4923-9ea0-7518b7760495.45180186.2_pushgateway-1.4.2.linux-amd64.tar.gz
8c065d13-f5f0-4923-9ea0-7518b7760495.45180186.2_node_exporter-1.1.2.linux-amd64.tar.gz
8c065d13-f5f0-4923-9ea0-7518b7760495.45180186.2__shadow_.QjFsBiV-vhyjfGzwpTcBBjO7G6rm5Ld_2
8c065d13-f5f0-4923-9ea0-7518b7760495.45180186.2__shadow_.QjFsBiV-vhyjfGzwpTcBBjO7G6rm5Ld_1
8c065d13-f5f0-4923-9ea0-7518b7760495.45180186.2__shadow_.QU-DyeqL4u3CQLe3KkKlMsDVqde1wK3_2
8c065d13-f5f0-4923-9ea0-7518b7760495.45180186.2__shadow_.QU-DyeqL4u3CQLe3KkKlMsDVqde1wK3_1
可以看到从data中对象的命名上,可以找到index和其中对象的关联关系,即8c065d13-f5f0-4923-9ea0-7518b7760495.45180186.2这个索引中有2个
tar
.gz对象,其他中间带 shadow 关键字的对象是上传的文件太大的情况下,做的数据分片。
3. 误删index对象
[root@control1 ~]# rados -p cn-1.rgw.buckets.index rm .dir.8c065d13-f5f0-4923-9ea0-7518b7760495.45180186.2
[root@control1 ~]#
[root@control1 ~]# s3cmd ls s3://nice
ERROR: S3 error: 404 (NoSuchKey)
[root@control1 ~]#
[root@control1 ~]# radosgw-admin bucket list --bucket nice
ERROR: store->list_objects(): (2) No such file or directory
[root@control1 ~]#
[root@control1 ~]# s3cmd get s3://nice/pushgateway-1.4.2.linux-amd64.tar.gz
download: 's3://nice/pushgateway-1.4.2.linux-amd64.tar.g
可以看到要列出该bucket中有哪些对象的操作,都是失败了的,但是如果知道文件名的话,仍然可以单独下载某个对象,即可以做get操作。
4. 恢复index对象
方法一:rewrite object
[root@control1 ~]# radosgw-admin object rewrite --bucket nice --object node_exporter-1.1.2.linux-amd64.tar.gz
[root@control1 ~]# s3cmd ls s3://nice
2023-02-13 06:12 9246179 s3://nice/node_exporter-1.1.2.linux-amd64.tar.gz
[root@control1 ~]#
[root@control1 ~]# rados -p cn-1.rgw.buckets.index ls | grep dir.8c065d13-f5f0-4923-9ea0-7518b7760495.45180186.2
.dir.8c065d13-f5f0-4923-9ea0-7518b7760495.45180186.2
方法二:重新上传
[root@control1 ~]# s3cmd put pushgateway-1.4.2.linux-amd64.tar.gz s3://nice
upload: 'pushgateway-1.4.2.linux-amd64.tar.gz' -> 's3://nice/pushgateway-1.4.2.linux-amd64.tar.gz' [1 of 1] [root@control1 ~]# rados -p cn-1.rgw.buckets.index ls | grep dir.8c065d13-f5f0-4923-9ea0-7518b7760495.45180186.2
.dir.8c065d13-f5f0-4923-9ea0-7518b7760495.45180186.2 [root@control1 ~]# rados -p cn-1.rgw.buckets.index listomapkeys .dir.8c065d13-f5f0-4923-9ea0-7518b7760495.45180186.2
pushgateway-1.4.2.linux-amd64.tar.gz [root@control1 ~]# s3cmd ls s3://nice
2023-02-13 06:42 9189846 s3://nice/pushgateway-1.4.2.linux-amd64.tar.gz
方法一比较简单,不需要将该文件下载下来再上传,只需要指定object的名字,重新rewrite一遍就可以了。
Ceph RGW误删index对象恢复的更多相关文章
- 010 Ceph RGW对象存储
一.对象存储 1.1 介绍 通过对象存储,将数据存储为对象,每个对象除了包含数据,还包含数据自身的元数据 对象通过Object ID来检索,无法通过普通文件系统操作来直接访问对象,只能通过API来访问 ...
- CEPH RGW 设置 user default_placement为ssd-placement,优化100KB-200KB小文件性能,使用户创建的bucket对象放置到 SSD设备的Pool上。
sudo radosgw-admin metadata get user:tuanzi > user.md.json vi user.md.json #to add ssd-placement ...
- ceph rgw multisite基本用法
Realm: Zonegroup: 理解为数据中心,由一个或多个Zone组成,每个Realm有且仅有 一个Master Zonegroup,用于处理系统变更,其他的称为Slave Zonegroup, ...
- 趣解 ceph rgw multisite data sync 机制
multisite是ceph rgw对象数据异地容灾备份的一个有效方案,笔者希望深入理解该技术,并应用于生产环境中,然而rgw的这部分代码晦涩难懂,笔者多次尝试阅读,仍云里雾里不解其意,最终流着泪咬着 ...
- Ceph RGW 创建默认的pool
使用Ceph-deploy完成RGW服务部署后(最好是在部署RGW服务前建立如下这些pool),使用sudo ceph osd lspools 命令,会发现RGW自动以默认参数创建了N个rgw相关的p ...
- Mysql误删表中数据与误删表的恢复方法
由于头两天面试时被问了这样一个问题,如果某同事误删了某个表,你该怎么恢复? 当时想了一下,因为博主没有遇到过这个问题,但是也多少了解一些,所以就回答通过mysql的binlog日志进行恢复. 面试官当 ...
- CEPH RGW多 ZONE的配置
相关的名称解释 Region :可以理解为区域,是基于地理位置的逻辑划分:如:华南,华北之类,包含多个region的Ceph集群必须指定一个master region,一个region可以包含一个或者 ...
- 在Linux下误删文件后恢复【转】
针对日常维护操作,难免会出现文件误删除的操作.大家熟知linux文件系统不同win有回收站,删除后的文件可以到垃圾箱寻回,要知道linux文件修复比较费劲,网络上面的文档也是五花八门.所以本次研究一种 ...
- ceph rgw java sdk 使用域名访问服务时需要设置s3client的配置项 PathStyleAccess 为true, 负责将报域名异常
Caused by: java.net.UnknownHostException: my-new-bucket.s3.yyclouds.com at java.net.InetAddress.getA ...
- pandas 学习 第8篇:Index 对象 - (创建、转换、排序)
Index对象负责管理轴标签.轴名称等元数据,是一个不可修改的.有序的.可以索引的ndarry对象.在构建Sereis或DataFrame时,所用到的任何数据或者array-like的标签,都会转换为 ...
随机推荐
- clickhouse在风控-风险洞察领域的探索与实践
一.风险洞察平台介绍 以Clickhouse+Flink实时计算+智能算法为核心架构搭建的风险洞察平台, 建立了全面的.多层次的.立体的风险业务监控体系,已支撑欺诈风险.信用风险.企业风险.小微风险. ...
- 阿里云 ACK 接入观测云
简介 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理.2021 年成为国内唯一连续三年入选 Gartner 公共云容器报告的 ...
- gdb不能使用mac
先说问题:1.gdb不能使用,重新用homebrew install 了gdb 2.brew装的gdb可以用了,但是等start调试的时候报这些错误: dyld: Library not ...
- 用最少的代码模拟gRPC四种消息交换模式
我们知道,建立在HTTP2/3之上的gRPC具有四种基本的通信模式或者消息交换模式(MEP: Message Exchange Pattern),即Unary.Server Stream.Client ...
- NavBarControl 通过代码添加
看到网上很多都是直接在控件上面添加的 而我的是保存在数据库读取后添加的. 后来自己摸索了一下. 通过代码添加 navBarControl1.Groups.Add(new NavBarGroup( st ...
- 记一次hook mac地址实现伪装硬件码
1. 前言 好久没写文章了,工作比较忙,不过我还是对技术比较热爱,即使它不能给我带来利益,保持初心. 工作期间遇到一个问题,连接vpn的软件是校验机器硬件码,不是公司电脑不让使用vpn软件,上下班已经 ...
- MySQL进阶实战1,数据类型与三范式
一.选择优化的数据类型 MySQL支持的数据类型非常多,选择正确的数据类型对于获得高性能至关重要. 1.更小的 一般情况下,应该尽量使用较小的数据类型,更小的数据类型通常更快,因为占用更少的磁盘.内存 ...
- 【FAQ】在华为鸿蒙车机上集成华为帐号的常见问题总结
随着新一代信息技术与汽车产业的深度融合,智能网联汽车正逐渐成为汽车产业发展的战略制高点,无论是传统车企还是新势力都瞄准了"智能座舱"这种新一代人机交互方式.面对竞争如此激烈的车机市 ...
- js属性对象的hasOwnProperty( )方法,检测一个属性是否是对象的自有属性
hasOwnProperty() 方法会返回一个布尔值,指示对象自身属性中是否具有指定的属性(也就是,是否有指定的键). 语法: obj.hasOwnProperty(prop) 参数: prop ...
- [seaborn] seaborn学习笔记9-绘图实例(1) Drawing example(1)
文章目录 9 绘图实例(1) Drawing example(1) 1. Anscombe's quartet(lmplot) 2. Color palette choices(barplot) 3. ...