日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

ceph-dencoder工具使用详解

發布時間:2023/11/27 生活经验 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ceph-dencoder工具使用详解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

      • 簡介
      • 使用
        • decode命令用法
        • encode

簡介

ceph-dencoder工具是一個序列化編碼、解碼并且打印ceph數據結構的工具。它主要用來調試和測試ceph不同版本之間的兼容性問題
該工具是由
ceph-common-12.2.1.06-0.el7.centos.x86_64 rpm包生成
本文章是根據ceph-12.2.1版本來描述改命令的使用方式

使用

執行ceph-dencoder -h 命令可以查看到如下幫助信息

[root@node1 ~]# ceph-dencoder -h
usage: ceph-dencoder [commands ...]version             print version string (to stdout)import <encfile>    read encoded data from encfileexport <outfile>    write encoded data to outfileset_features <num>  set feature bits used for encodingget_features        print feature bits (int) to stdoutlist_types          list supported typestype <classname>    select in-memory typeskip <num>          skip <num> leading bytes before decodingdecode              decode into in-memory objectencode              encode in-memory objectdump_json           dump in-memory object as json (to stdout)hexdump             print encoded data in hexcopy                copy object (via operator=)copy_ctor           copy object (via copy ctor)count_tests         print number of generated test objects (to stdout)select_test <n>     select generated test object as in-memory objectis_deterministic    exit w/ success if type encodes deterministically

decode命令用法

本文我們主要看一下decode命令的具體使用方式
如果我們想要查看一個cephfs內部的元數據對象內容,執行如下命令

  • 先獲取元數對象,通過rados命令get獲取,關于rados命令可以參考文檔rados使用詳解
    [root@node1 ~]# ceph fs ls   #獲取元數據pool
    name: cephfs, metadata pool: fs_meta_pol, data pools: [fs_pol ] 
    [root@node1 ~]# rados -p fs_meta_pol ls #通過rados命令獲取元數據pool中的對象
    601.00000000
    602.00000000
    600.00000000
    603.00000000
    1.00000000.inode
    mds_snaptable
    605.00000000
    mds0_inotable
    100.00000000
    mds0_sessionmap
    ...
    [root@node1 ~]# rados -p fs_meta_pol get 601.00000000 mds.out  #借用rados命令將對象內容放入到指定文件mds.out中
    
  • ceph-dencoder命令解析
    先執行命令ceph-dencoder list_types命令來獲取你想知道的對象屬性信息,改屬性信息包括ceph各個組件元數據操作信息,從集群各個組件表項,到pg元數據信息,到對象元數據信息,都會存放在bufferlist,由bufferlist進行編碼序列化(encode)存放到數據庫中,使用得時候又從數據庫中取出,經過bufferlist進行反序列化(decode)進行使用。這里的list_types即是各個數據屬性存放再bufferlist中的內容,在進行反序列化查看屬性內容的時候需要進行指定
    [root@node1 ~]# ceph-dencoder type MDSMap::mds_info_t import mds.out  decode dump_json
    {"gid": 0,"name": "","rank": -1,"incarnation": 0,"state": "up:standby","state_seq": 0,"addr": "-","standby_for_rank": -1,"standby_for_fscid": -1,"standby_for_name": "","standby_replay": false,"export_targets": [],"features": 0
    }
    

如果我們想要查看osdmap 進行decode之后的元數據內容時可以進行如下操作
ceph-kvstore-tool rocksdb /var/lib/ceph/mon/ceph-node1/store.db/ list|grep osdmap|tail -n 10 使用ceph-kvstore-tool工具從mon數據庫查看較新的osdmap表項以及對應的版本

[root@node1 mdsmap]# ceph-kvstore-tool rocksdb /var/lib/ceph/mon/ceph-node1/store.db/ list|grep osdmap|tail -n 10
osdmap	full_992
osdmap	full_993
osdmap	full_994
osdmap	full_995
osdmap	full_996
osdmap	full_997
osdmap	full_998
osdmap	full_999
osdmap	full_latest
osdmap	last_committed

獲取osdmap的制定版本內容,并放入指定文件中如下,關于ceph-kvstore-tool工具的使用可以參考文章ceph-kvstore-tool 工具使用詳解

[root@node1 mdsmap]# ceph-kvstore-tool rocksdb /var/lib/ceph/mon/ceph-node1/store.db/ get osdmap full_998 out osdmap.998
(osdmap, full_998)

此時osdmap的full_998版本內容已經放入到了osdmap.998文件之中,因為該文件時序列化之后的,需要進行解碼decode,同樣我們的ceph-dencoder工具的decode子命令,可以看到如下decode之后的輸出,osdmap數據結構非常清晰(由于內容較多,包括pool,osd的信息都有描述,暫不一一列舉)

[root@node1 mdsmap]# ceph-dencoder import osdmap.998 type OSDMap decode dump_json
{"epoch": 998,"fsid": "fa27f041-0ce9-4df1-a4bd-5e37678834bd","created": "2019-07-22 15:43:30.494296","modified": "2019-08-07 19:26:56.518397","flags": "noout,nobackfill,norecover,sortbitwise,recovery_deletes,purged_snapdirs","crush_version": 30,"full_ratio": 0.950000,"backfillfull_ratio": 0.900000,"nearfull_ratio": 0.850000,"cluster_snapshot": "","pool_max": 15,"max_osd": 10,"require_min_compat_client": "jewel","min_compat_client": "jewel","require_osd_release": "luminous",...

encode

encode子命令主要是將內存中產生對應type的ceph元數據實例進行序列化,并放入bufferlist之中
ceph-dencoder import osdmap.998 type OSDMap encode

關于ceph-dencoder的其他子命令的使用可以參見幫助文檔,或者官方社區文檔,個人認為該工具同樣有助于我們對ceph源碼的理解。ceph設計去固化什么樣類型的元數據到數據庫中,才能維持ceph的可靠,高度自治的特性。
就這樣吧,存儲路漫漫~

總結

以上是生活随笔為你收集整理的ceph-dencoder工具使用详解的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。