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/

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