Slide 1

Slide 1 text

無限ストレージ Jul. 10th, 2021 Satoru Takeuchi twitter: satoru_takeuchi, EnSatoru 1

Slide 2

Slide 2 text

ストレージのコストは高い 1. ハードウェアコストは高い 2. ストレージシステムを組むコストも高い 3. 運用コストも高い 2

Slide 3

Slide 3 text

今日のテーマ 1. ハードウェアコストは高い 2. ストレージシステムを組むコストも高い 3. 運用コストも高い 3

Slide 4

Slide 4 text

容量が無限のストレージさえあれば… 1. 構築 2. 容量を無限に増やす 3. バイト単価が実質ゼロに 4. うれしい 4

Slide 5

Slide 5 text

実現方法: Cephを使う ● CephはOSSの分散ストレージ ● 提供するストレージ ○ ブロックデバイス(RBD) ○ ファイルシステム(CephFS) ○ オブジェクトストレージ (RGW) 5

Slide 6

Slide 6 text

Cephのアーキテクチャ 6 ストレージプール RBD CephFS RGW node node node node disk OSD disk OSD disk OSD disk OSD データはOSD間に均等に分散配置される データはOSD間に均等に分散配置される データはOSD間に均等に分散配置される データは全OSDに均等に分散配置される

Slide 7

Slide 7 text

RBDに注目! 7 ストレージプール RBD node node node node disk OSD disk OSD disk OSD disk OSD

Slide 8

Slide 8 text

もしRBDの上にOSDを作れれば… 8 ストレージプール RBD node node node node disk OSD disk OSD disk OSD disk OSD OSD

Slide 9

Slide 9 text

もしOSD on RBDのみからクラスタを作れれば… 9 ストレージプール rbd OSD rbd OSD rbd OSD rbd OSD

Slide 10

Slide 10 text

無限ストレージができるのでは? 10 ストレージプール rbd OSD rbd OSD rbd OSD rbd OSD 超自然的パワー 無限のデータ やったね!

Slide 11

Slide 11 text

つくりかた 1. 物理ディスク上のOSD(以下OSD on diskと記載)からCephクラスタを作る 2. クラスタからRBDを切り出す 3. RBD上にOSD(以下OSD on RBDと記載)を作ってクラスタに組み込む 4. OSD on diskをクラスタから切り離す 11

Slide 12

Slide 12 text

環境 ● Ubuntu: 18.04.4 ● Linuxカーネル: 4.15.0-99 ● Ceph: v15.2.12 ● Rook(Cephのオーケストレータ): v1.6.7 12

Slide 13

Slide 13 text

初期状態 13 ストレージプール disk OSD 1node, 1OSD on disk(10GiB)のシンプルな構造 # ceph -s ... osd: 1 osds: 1 up (since 9m) …usage: 1.0 GiB used, 9.0 GiB / 10 GiB avail

Slide 14

Slide 14 text

RBDを作る 14 ストレージプール disk OSD RBD

Slide 15

Slide 15 text

次: RBDの上にOSDを作る 15 ストレージプール disk OSD RBD OSD

Slide 16

Slide 16 text

成功 16 ストレージプール disk OSD RBD OSD # ceph -s ... osd: 2 osds: 2 up

Slide 17

Slide 17 text

容量も倍になった! 17 ストレージプール disk OSD RBD OSD # ceph -s ... osd: 2 osds: 2 up ... usage: 2.0 GiB used, 18 GiB / 20 GiB avail

Slide 18

Slide 18 text

次: OSD on diskをクラスタから切り離す 18 ストレージプール disk OSD RBD OSD

Slide 19

Slide 19 text

成功! 19 ストレージプール disk OSD RBD OSD # ceph -s ... osd: 1 osds: 1 up ... usage: 1.0 GiB used, 9.0 GiB / 10 GiB avail

Slide 20

Slide 20 text

…と思ったら死んだ! 20 ストレージプール disk OSD RBD OSD osd: 1 osds: 0 up

Slide 21

Slide 21 text

原因 21 ストレージプール disk OSD RBD OSD 1. OSD on RBDのメタデータはOSD on diskに保存されている 2. OSD on diskを削除するとそこにあったデータはロスト 3. OSD on RBDが機能しなくなりDOWN 新OSDのメタデータ

Slide 22

Slide 22 text

対策: データを冗長化させて徐々に移動させる 22 1. 最初にOSD on diskを二つ作る 2. OSD on RBDを2つ作る 3. OSD on diskを1つ削除。このOSDにあったデータは他の OSDに移動 4. OSD on diskをもう1つ削除。その後は同上

Slide 23

Slide 23 text

初期状態その2 23 ストレージプール disk OSD ● 1node, 2OSD on disk(それぞれ10GiB) # ceph -s ... osd: 2 osds: 2 up … usage: 2.0 GiB used,18.0 GiB / 20 GiB avail disk OSD

Slide 24

Slide 24 text

次: OSD on RBDを2つ作る 24 ストレージプール disk OSD disk OSD RBD OSD RBD OSD

Slide 25

Slide 25 text

問題発生: データのリバランスが終わらない 25 ストレージプール disk OSD RBD OSD RBD OSD disk OSD ● 期待値: OSD on disk上のデータの半分が OSD on RBDに移動 ● 実際: 全然進まない

Slide 26

Slide 26 text

原因: 循環I/O 26 ストレージプール disk OSD RBD OSD RBD OSD disk OSD 1. OSD on disk上のデータをOSD on RBDに移動 2. 移動時のwriteは同期write 3. OSD on RBDへの同期write->OSD on diskへの同期write->OSD on RBDへの(ry

Slide 27

Slide 27 text

解決方法: 同期writeしないようにCephを改造 27 ● open()に付与されたO_SYNC,O_DSYNC,O_DIRECTを削除 ● sync系システムコールの呼び出しをすべて削除 ○ sync(), fsync(), fdatasync(), sync_file_range()...

Slide 28

Slide 28 text

改造したCephを使ってもう一回やってみると… 28 ストレージプール disk OSD disk OSD RBD OSD RBD OSD

Slide 29

Slide 29 text

やっぱり循環I/O発生! 29 ストレージプール disk OSD RBD OSD RBD OSD disk OSD ● 原因不明 ● カーネルのrbdドライバの変更が必要 ? ● ここで時間切れ

Slide 30

Slide 30 text

(推測) 仮に次のステップに行けたとして… 30 ストレージプール RBD OSD RBD OSD

Slide 31

Slide 31 text

(推測) こうなるか? 31 ストレージプール RBD OSD RBD OSD やったね! 無限I/O 超自然的パワー

Slide 32

Slide 32 text

(推測) 無限に書き込むと… 32 ストレージプール RBD OSD RBD OSD できるよね? 無限write

Slide 33

Slide 33 text

(推測) たぶん死ぬ 33 ストレージプール RBD OSD RBD OSD 君にはがっかりだ RBD 無限write カーネルパニック!

Slide 34

Slide 34 text

(推測) 原因 1. OSD on RBDのデータはアタッチされたノードのメモリ上にのみ存在 2. メモリが足りないとOOM発動 3. プロセスを皆殺しにした後にカーネルパニック 4. ノード上のデータはすべて消える 34

Slide 35

Slide 35 text

結論 ● 超自然的パワーは無かった ● 無限ストレージも無かった ● ハードウェアコストは高い 35

Slide 36

Slide 36 text

おわり 36 残念だったな