Ceph高级工具介绍之ceph-kvstore-tool的使用
2016-07-19 11:09
776 查看
0 简介
Ceph是一个复杂的分布式存储系统,有很多组件组成,不光学习成本比较高,而且运维难度也是相当的大。但近几年,它却很受大家的欢迎,越来越多的互联网企业开始采用ceph来构建自己的存储。这是为什么呢?我想源自于它优秀的设计、规范的项目管理以及活跃的社区。Ceph本身提供了很多工具(之所以称它们为高级工具,是因为要使用它们必须对Ceph有较为深入的理解),它们在处理Ceph故障时,非常有用,接下来的几篇文件主要介绍它们。
大家都知道Ceph的很多数据比如PG log、Monitor的数据都存在kvstore里(leveldb或者RocksDB中),Ceph也提供了查看kvstore里数据的工具,它就是ceph-kvstore-tool。
1 安装ceph-kvstore-tool工具
如果你是从官网释放的rpm包安装的Ceph,那么ceph-kvstore-tool默认是没有安装的,它包含在ceph-test这个rpm中,你可以通过以下方法安装。
2 ceph-kvstore-tool命令使用介绍
以下介绍基于Ceph 10.2.2版本,
学习一个命令最好的办法就是看它的manpage,不过很尴尬,这个工具没有提供manpage
我们知道leveldb是一个kvstore也就是kv的数据库,monitor的数据目录中实际上包含了多个表。list命令能够列出当前数据库中包含的所有的表项信息,而表项的名字都是以'auth' :'501'的格式存在。其中auth就是‘prefix',也就是kv数据库中的某张表,而':'后面的部分'501'就是这个表中某条记录的key信息。知道了这个以后,我们看看Monitor的数据目录下都存储了哪些表。
从中我们发现了比较熟悉的各种map,mdsmap、monmap、osdmap、pgmap、auth等。而如上所讲,其中每一张表都有很多表项组成,接下来我们使用ceph-kvstore-tool来查看一下monmap这个表中某个表项中的数据。
[root@ceph01 ~]# ceph-kvstore-tool leveldb /var/lib/ceph/mon/ceph-ceph01/store.db/ list|grep monmap|head -10
2016-07-19 10:53:48.264480 7ff95e170040 1 leveldb: Recovering log #14378
2016-07-19 10:53:48.265488 7ff95e170040 1 leveldb: Level-0 table #14416: started
2016-07-19 10:53:48.286166 7ff95e170040 1 leveldb: Level-0 table #14416: 43990 bytes OK
2016-07-19 10:53:48.315682 7ff95e170040 1 leveldb: Delete type=3 #14377
2016-07-19 10:53:48.315799 7ff95e170040 1 leveldb: Delete type=0 #14378
mon_sync:latest_monmap
monmap:1
monmap:first_committed
monmap:last_committed从中,可以看出monmap目前有三个表项,看看monmap:1这项包含什么数据
[root@ceph01 ~]# ceph-kvstore-tool leveldb /var/lib/ceph/mon/ceph-ceph01/store.db/ get monmap 1 out monmap.1.txt
2016-07-19 10:54:27.946186 7f6628f34040 1 leveldb: Recovering log #14419
2016-07-19 10:54:28.035087 7f6628f34040 1 leveldb: Delete type=0 #14419
2016-07-19 10:54:28.035205 7f6628f34040 1 leveldb: Delete type=3 #14418
(monmap, 1)
[root@ceph01 ~]# file monmap.1.txt
monmap.1.txt: DBase 3 data file (1316683776 records)
导出来的这个文件是一个DBase文件,是编译过的,需要使用工具来解析它。我们知道Ceph中很多数据都是经过序列化(encode)之后持久化的(这里有篇文章有相关的介绍https://www.ustack.com/blog/cephxuliehua/),所以要解析这些数据需要将它们反序列化(decode),Ceph提供了一个反序列化的工具ceph-dencode,关于ceph-dencoder的使用会在之后介绍。
[root@ceph01 ~]# ceph-dencoder import monmap.1.txt type MonMap decode dump_json
{
"epoch": 1,
"fsid": "7b4eb697-fd53-4bd8-9b7a-ca1b37110623",
"modified": "2016-06-26 00:07:24.222662",
"created": "2016-06-26 00:07:24.222662",
"mons": [
{
"rank": 0,
"name": "ceph01",
"addr": "192.168.0.23:6789\/0"
},
{
"rank": 1,
"name": "ceph02",
"addr": "192.168.0.24:6789\/0"
},
{
"rank": 2,
"name": "ceph03",
"addr": "192.168.0.25:6789\/0"
}
]
}
同样,可以使用以上方法查看osdmap各个表项的数据。
[root@ceph01 ~]# ceph-kvstore-tool leveldb /var/lib/ceph/mon/ceph-ceph01/store.db/ get osdmap full_10 out osdmap-full_10.txt
[root@ceph01 ~]# ceph-dencoder import osdmap-full_10.txt type OSDMap decode dump_json
Ceph是一个复杂的分布式存储系统,有很多组件组成,不光学习成本比较高,而且运维难度也是相当的大。但近几年,它却很受大家的欢迎,越来越多的互联网企业开始采用ceph来构建自己的存储。这是为什么呢?我想源自于它优秀的设计、规范的项目管理以及活跃的社区。Ceph本身提供了很多工具(之所以称它们为高级工具,是因为要使用它们必须对Ceph有较为深入的理解),它们在处理Ceph故障时,非常有用,接下来的几篇文件主要介绍它们。
大家都知道Ceph的很多数据比如PG log、Monitor的数据都存在kvstore里(leveldb或者RocksDB中),Ceph也提供了查看kvstore里数据的工具,它就是ceph-kvstore-tool。
1 安装ceph-kvstore-tool工具
如果你是从官网释放的rpm包安装的Ceph,那么ceph-kvstore-tool默认是没有安装的,它包含在ceph-test这个rpm中,你可以通过以下方法安装。
# yum install ceph-test然后确认ceph-kvstore-tool正确被安装上了,
# which ceph-kvstore-tool /usr/bin/ceph-kvstore-tool
2 ceph-kvstore-tool命令使用介绍
以下介绍基于Ceph 10.2.2版本,
[root@ceph01 ~]# ceph --version ceph version 10.2.2 (45107e21c568dd033c2f0a3107dec8f0b0e58374)
学习一个命令最好的办法就是看它的manpage,不过很尴尬,这个工具没有提供manpage
[root@ceph01 ~]# man ceph-kvstore-tool No manual entry for ceph-kvstore-tool那还是老套路,看看-h或者--help有没有什么信息
[root@ceph01 ~]# ceph-kvstore-tool -h Usage: ceph-kvstore-tool <leveldb|rocksdb|...> <store path> command [args...] Commands: list [prefix] list-crc [prefix] exists <prefix> [key] get <prefix> <key> [out <file>] crc <prefix> <key> get-size [<prefix> <key>] set <prefix> <key> [ver <N>|in <file>] store-copy <path> [num-keys-per-tx] store-crc <path>描述的比较简单,但是基本上告诉你了这个命令的用法。从它的子命令来看,基本都会涉及两个词'prefix'和'key',这两个是什么含义呢,貌似只有知道了它们,才能更好的使用这个命令。再仔细观察,发现有些命令是不需要prefix,比如list命令 prefix就是可选项。我们先执行一下看看输出吧。
[root@ceph01 ~]# ceph-kvstore-tool leveldb /var/lib/ceph/mon/ceph-ceph01/store.db/ list 2016-07-19 10:29:48.188121 7f4cb30cf040 1 leveldb: Recovering log #14359 2016-07-19 10:29:48.232871 7f4cb30cf040 1 leveldb: Delete type=0 #14359 2016-07-19 10:29:48.232948 7f4cb30cf040 1 leveldb: Delete type=3 #14358 auth:501 auth:502 auth:503 auth:504 auth:505 auth:506 auth:507 auth:508 auth:509 auth:510 auth:511 auth:512 auth:513 ...
我们知道leveldb是一个kvstore也就是kv的数据库,monitor的数据目录中实际上包含了多个表。list命令能够列出当前数据库中包含的所有的表项信息,而表项的名字都是以'auth' :'501'的格式存在。其中auth就是‘prefix',也就是kv数据库中的某张表,而':'后面的部分'501'就是这个表中某条记录的key信息。知道了这个以后,我们看看Monitor的数据目录下都存储了哪些表。
[root@ceph01 ~]# ceph-kvstore-tool leveldb /var/lib/ceph/mon/ceph-ceph01/store.db/ list |awk -F ':' '{print $1}'|uniq 2016-07-19 10:12:22.278491 7faba460f040 1 leveldb: Recovering log #14345 2016-07-19 10:12:22.305658 7faba460f040 1 leveldb: Delete type=0 #14345 2016-07-19 10:12:22.305745 7faba460f040 1 leveldb: Delete type=3 #14344 auth logm mdsmap monitor monitor_store monmap osd_metadata osdmap paxos pgmap pgmap_meta pgmap_osd pgmap_pg
从中我们发现了比较熟悉的各种map,mdsmap、monmap、osdmap、pgmap、auth等。而如上所讲,其中每一张表都有很多表项组成,接下来我们使用ceph-kvstore-tool来查看一下monmap这个表中某个表项中的数据。
[root@ceph01 ~]# ceph-kvstore-tool leveldb /var/lib/ceph/mon/ceph-ceph01/store.db/ list|grep monmap|head -10
2016-07-19 10:53:48.264480 7ff95e170040 1 leveldb: Recovering log #14378
2016-07-19 10:53:48.265488 7ff95e170040 1 leveldb: Level-0 table #14416: started
2016-07-19 10:53:48.286166 7ff95e170040 1 leveldb: Level-0 table #14416: 43990 bytes OK
2016-07-19 10:53:48.315682 7ff95e170040 1 leveldb: Delete type=3 #14377
2016-07-19 10:53:48.315799 7ff95e170040 1 leveldb: Delete type=0 #14378
mon_sync:latest_monmap
monmap:1
monmap:first_committed
monmap:last_committed从中,可以看出monmap目前有三个表项,看看monmap:1这项包含什么数据
[root@ceph01 ~]# ceph-kvstore-tool leveldb /var/lib/ceph/mon/ceph-ceph01/store.db/ get monmap 1 out monmap.1.txt
2016-07-19 10:54:27.946186 7f6628f34040 1 leveldb: Recovering log #14419
2016-07-19 10:54:28.035087 7f6628f34040 1 leveldb: Delete type=0 #14419
2016-07-19 10:54:28.035205 7f6628f34040 1 leveldb: Delete type=3 #14418
(monmap, 1)
[root@ceph01 ~]# file monmap.1.txt
monmap.1.txt: DBase 3 data file (1316683776 records)
导出来的这个文件是一个DBase文件,是编译过的,需要使用工具来解析它。我们知道Ceph中很多数据都是经过序列化(encode)之后持久化的(这里有篇文章有相关的介绍https://www.ustack.com/blog/cephxuliehua/),所以要解析这些数据需要将它们反序列化(decode),Ceph提供了一个反序列化的工具ceph-dencode,关于ceph-dencoder的使用会在之后介绍。
[root@ceph01 ~]# ceph-dencoder import monmap.1.txt type MonMap decode dump_json
{
"epoch": 1,
"fsid": "7b4eb697-fd53-4bd8-9b7a-ca1b37110623",
"modified": "2016-06-26 00:07:24.222662",
"created": "2016-06-26 00:07:24.222662",
"mons": [
{
"rank": 0,
"name": "ceph01",
"addr": "192.168.0.23:6789\/0"
},
{
"rank": 1,
"name": "ceph02",
"addr": "192.168.0.24:6789\/0"
},
{
"rank": 2,
"name": "ceph03",
"addr": "192.168.0.25:6789\/0"
}
]
}
同样,可以使用以上方法查看osdmap各个表项的数据。
[root@ceph01 ~]# ceph-kvstore-tool leveldb /var/lib/ceph/mon/ceph-ceph01/store.db/ get osdmap full_10 out osdmap-full_10.txt
[root@ceph01 ~]# ceph-dencoder import osdmap-full_10.txt type OSDMap decode dump_json
相关文章推荐
- 基于zookeeper+leveldb搭建activemq集群
- [转]Leveldb实现原理
- 查看ceph中levelDB存储的数据
- LevelDB 编译安装(Debian 8)
- leveled学习
- LevelDB的实现原理
- 数据存储封装—支持内存和本地缓存
- leveldb中的编码方式的分析
- caffe RGB转gay存储为Leveldb 格式(CIFAR10)示例
- levelDB源码学习——Arena(简单内存池)
- 编译、测试 leveldb
- Leveldb官方文档(中文版)
- [转]Leveldb 实现原理
- [转]LevelDB原理探究与代码分析
- [转]Kyoto Cabinet和LevelDB的架构比较分析
- Leveldb源码分析--1
- Leveldb源码分析--2
- Leveldb源码分析--3
- Leveldb源码分析--4
- Leveldb源码分析--5