博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Ceph高级工具介绍之ceph-kvstore-tool的使用
阅读量:4027 次
发布时间:2019-05-24

本文共 4516 字,大约阅读时间需要 15 分钟。

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中,你可以通过以下方法安装。

# 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 --versionceph version 10.2.2 (45107e21c568dd033c2f0a3107dec8f0b0e58374)

学习一个命令最好的办法就是看它的manpage,不过很尴尬,这个工具没有提供manpage

[root@ceph01 ~]# man ceph-kvstore-toolNo manual entry for ceph-kvstore-tool
那还是老套路,看看-h或者--help有没有什么信息
[root@ceph01 ~]# ceph-kvstore-tool -hUsage: ceph-kvstore-tool 
command [args...]Commands: list [prefix] list-crc [prefix] exists
[key] get
[out
] crc
get-size [
] set
[ver
|in
] store-copy
[num-keys-per-tx] store-crc
描述的比较简单,但是基本上告诉你了这个命令的用法。从它的子命令来看,基本都会涉及两个词'prefix'和'key',这两个是什么含义呢,貌似只有知道了它们,才能更好的使用这个命令。再仔细观察,发现有些命令是不需要prefix,比如list命令 prefix就是可选项。我们先执行一下看看输出吧。

[root@ceph01 ~]# ceph-kvstore-tool leveldb /var/lib/ceph/mon/ceph-ceph01/store.db/ list2016-07-19 10:29:48.188121 7f4cb30cf040  1 leveldb: Recovering log #143592016-07-19 10:29:48.232871 7f4cb30cf040  1 leveldb: Delete type=0 #143592016-07-19 10:29:48.232948 7f4cb30cf040  1 leveldb: Delete type=3 #14358auth:501auth:502auth:503auth:504auth:505auth:506auth:507auth:508auth:509auth:510auth:511auth:512auth: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}'|uniq2016-07-19 10:12:22.278491 7faba460f040  1 leveldb: Recovering log #143452016-07-19 10:12:22.305658 7faba460f040  1 leveldb: Delete type=0 #143452016-07-19 10:12:22.305745 7faba460f040  1 leveldb: Delete type=3 #14344authlogmmdsmapmonitormonitor_storemonmaposd_metadataosdmappaxospgmappgmap_metapgmap_osdpgmap_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 -102016-07-19 10:53:48.264480 7ff95e170040  1 leveldb: Recovering log #143782016-07-19 10:53:48.265488 7ff95e170040  1 leveldb: Level-0 table #14416: started2016-07-19 10:53:48.286166 7ff95e170040  1 leveldb: Level-0 table #14416: 43990 bytes OK2016-07-19 10:53:48.315682 7ff95e170040  1 leveldb: Delete type=3 #143772016-07-19 10:53:48.315799 7ff95e170040  1 leveldb: Delete type=0 #14378mon_sync:latest_monmapmonmap:1monmap:first_committedmonmap: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.txt2016-07-19 10:54:27.946186 7f6628f34040  1 leveldb: Recovering log #144192016-07-19 10:54:28.035087 7f6628f34040  1 leveldb: Delete type=0 #144192016-07-19 10:54:28.035205 7f6628f34040  1 leveldb: Delete type=3 #14418(monmap, 1)[root@ceph01 ~]# file monmap.1.txtmonmap.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

转载地址:http://kvxbi.baihongyu.com/

你可能感兴趣的文章
机器学习中样本缺失值的处理方法
查看>>
机器学习中样本比例不平衡的处理方法
查看>>
机器学习中的文本处理
查看>>
K近邻分类
查看>>
Java集合
查看>>
Java泛型、反射、注解、Lambda表达式
查看>>
Spring框架入门
查看>>
Linear Regression及各种线型回归在正则化中的应用
查看>>
朴素贝叶斯算法
查看>>
逻辑回归
查看>>
感知机 - 支持向量机
查看>>
决策树算法(ID3、C4.5、CART)
查看>>
集成学习(Bagging、Boosting、Stacking)
查看>>
无监督学习
查看>>
K均值算法(K-means)
查看>>
机器学习中的损失函数
查看>>
机器学习中的性能度量
查看>>
机器学习中的优化问题
查看>>
机器学习中的参数估计方法
查看>>
机器学习中的特征工程
查看>>