Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
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は便利