Upgrade to Pro — share decks privately, control downloads, hide ads and more …

分散ストレージはすごいぞ

 分散ストレージはすごいぞ

分散ストレージCephでレプリカ数が2以上のときにデータが1つおかしくても、もう一つの正しいデータを読んで、おかしいデータも復旧することを示しました。

kernel/vm探検隊北陸part6のLT資料です。
https://kernelvm.connpass.com/event/297033/

Avatar for Satoru Takeuchi

Satoru Takeuchi

December 03, 2023
Tweet

More Decks by Satoru Takeuchi

Other Decks in Technology

Transcript

  1. Cephのアーキテクチャ node node node disk OSD disk OSD disk OSD

    RADOS(独自インタフェースのオブジェクトストレージ ) ファイルシステム ブロックデバイス S3互換 オブジェクトストレージ
  2. 問題: そもそもdm-dustデバイス上にOSDが作られねえ! • Cephはlsblkコマンドによってデバイスのタイプを判断して、特定のタイプ上にのみ OSDを作る ◦ disk, part, lvm, crypt,

    loop… node disk ファイル ファイル loop loop dm-dust dm-dust OSD OSD $ sudo lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS loop0 7:0 0 6G 0 loop └─dust0 253:0 0 6G 0 dm loop1 7:1 0 6G 0 loop └─dust1 253:1 0 6G 0 dm
  3. ソリューション: インチキしよう! • lsblkのソースを読んでtypeフィールドの決め方を知る • dmデバイスなら、デバイスに設定されたUUIDが”foo-bar”なら”foo”を小文字にした ものがtypeとみなされる ◦ もともとはcryptデバイスのUUIDがCRYPT-foobarのようになっているものを想定 ◦

    sudo dmsetup create -u loop-foo test-dust test-dust.table ◦ $ sudo dmsetup create -u loop-foo test-dust test-dust.table $ sudo lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS loop0 7:0 0 6G 0 loop └─dust0 253:0 0 6G 0 loop loop1 7:1 0 6G 0 loop └─dust1 253:1 0 6G 0 loop
  4. GETする場合に読むOSDを得る $ ceph pg ls-by-pool replicapool PG OBJECTS … UP

    ACTING … 1.a 1 … [1,0]p1 [1,0]p1 … データはdust0上のOSD1から読む
  5. OSDのログにデータを修復した痕跡が! bdev(0x565452c64000 /var/lib/ceph/osd/ceph-1/block) _aio_thread got r=-5 ((5) Input/output error) 7ff464ab4700

    -1 bdev(0x565452c64000 /var/lib/ceph/osd/ceph-1/block) _aio_thread translating the error to EIO for upper layer 7ff453291700 -1 log_channel(cluster) log [ERR] : 1.a missing primary copy of 1:5756f1fd:::test-object:head, will try copies on 0