Slide 1

Slide 1 text

分散ストレージCephの データ破壊検知&修復機能は 本当に動作するのか Dec, 11st, 2023 Satoru Takeuchi X: satoru_takeuchi

Slide 2

Slide 2 text

今回話すこと ● 分散ストレージCephのデータ破壊検知&修復機能の動作確認 ○ レプリカが2個以上ある状態で1つのレプリカが壊れても、正しいデータから修復できる ○ …という触れ込みだが、本当なのだろうか ?  ● 「その63 ディスクI/O障害のエミュレーション ~既存ターゲット編~」を見ていると理解 しやすい ○ 軽い事例紹介なので、難しいところは雰囲気を理解するだけで OK

Slide 3

Slide 3 text

Cephのアーキテクチャ node node node disk OSD disk OSD disk OSD RADOS(独自インタフェースのオブジェクトストレージ ) ファイルシステム ブロックデバイス S3互換 オブジェクトストレージ

Slide 4

Slide 4 text

実験に使ったCephクラスタ node disk RADOS ファイル ファイル /dev/loop0 /dev/loop1 dust0 dust1 OSD0 OSD1

Slide 5

Slide 5 text

オブジェクトを作成 $ cat /tmp/test.data Hello Ceph world! $ rados -p replicapool put test-object test.data RADOS /dev/loop0 /dev/loop1 dust0 dust1 OSD0 OSD1 データ データ write write

Slide 6

Slide 6 text

GETする場合に読むOSDを得る $ ceph pg ls-by-pool replicapool PG OBJECTS … UP ACTING … 1.a 1 … [1,0]p1 [1,0]p1 … オブジェクトを読み出すのは dust0上のOSD1から RADOS /dev/loop0 /dev/loop1 dust0 dust1 OSD0 OSD1 データ データ read

Slide 7

Slide 7 text

オブジェクトの位置を知る ● stringsコマンドを使ってそれっぽいデータがあるセクタを疑似不良セクタとする ○ 📝 本当はOSDの中にあるRocksDBを走査してセクタ番号を求めます $ sudo strings -t d /dev/mapper/dust1 | grep "Hello Ceph world!" 4616192 Hello Ceph world! ^C $ echo $((4616192/512)) 9016

Slide 8

Slide 8 text

疑似不良セクタを設定 $ sudo dmsetup message dust1 0 addbadblock 9016 0 $ sudo dmsetup message dust1 0 enable RADOS /dev/loop0 /dev/loop1 dust0 dust1 OSD0 OSD1 データ データ readするとI/Oエラー発生 データ

Slide 9

Slide 9 text

オブジェクトをGETすると中身は正しい $ rados -p replicapool get test-object /tmp/out.data $ cat /tmp/out.data Hello Ceph world! RADOS /dev/loop0 /dev/loop1 dust0 dust1 OSD0 OSD1 データ データ read データ readするとI/Oエラー発生 したはずだが…

Slide 10

Slide 10 text

OSDのログにデータを修復した痕跡が出ている … _aio_thread got r=-5 ((5) Input/output error) … _aio_thread translating the error to EIO for upper layer … log [ERR] : 1.a missing primary copy of 1:5756f1fd:::test-object:head, will try copies on 0 RADOS /dev/loop0 /dev/loop1 dust0 dust1 OSD0 OSD1 データ データ データ

Slide 11

Slide 11 text

何が起きたか RADOS /dev/loop0 /dev/loop1 dust0 dust1 OSD0 OSD1 データ データ read データ

Slide 12

Slide 12 text

何が起きたか RADOS /dev/loop0 /dev/loop1 dust0 dust1 OSD0 OSD1 データ データ I/Oエラー発生 データ破壊検知

Slide 13

Slide 13 text

何が起きたか RADOS /dev/loop0 /dev/loop1 dust0 dust1 OSD0 OSD1 データ データ 正しいデータをコピー

Slide 14

Slide 14 text

何が起きたか RADOS /dev/loop0 /dev/loop1 dust0 dust1 OSD0 OSD1 データ データ 渡す

Slide 15

Slide 15 text

おわり ● Cephのデータ破壊検知&修復機能は仕様通り機能することを確認した ● こういうことを楽々試せるdm-dustは便利