Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
無限ストレージ
Search
Satoru Takeuchi
PRO
July 10, 2021
Technology
16
16k
無限ストレージ
以下イベントの発表資料です
https://kernelvm.connpass.com/event/209105/
Satoru Takeuchi
PRO
July 10, 2021
Tweet
Share
More Decks by Satoru Takeuchi
See All by Satoru Takeuchi
低レイヤソフトウェア技術者が YouTuberとして食っていこうとした話
sat
PRO
7
6k
ポーリングと割り込み
sat
PRO
1
67
Rook: Intro and Deep Dive With Ceph
sat
PRO
1
130
会社員しながら本を書いてきた知見の共有
sat
PRO
3
840
デバイスにアクセスするデバイスファイル
sat
PRO
1
56
ファイルシステムのデータを ブロックデバイスへの操作で変更
sat
PRO
1
45
デバイスドライバ
sat
PRO
0
73
マルチスレッドの実現方法 ~カーネルスレッドとユーザスレッド~
sat
PRO
2
160
共有メモリ
sat
PRO
3
86
Other Decks in Technology
See All in Technology
AWS DDoS攻撃防御の最前線
ryutakondo
0
110
AIエージェントを現場で使う / 2025.08.07 著者陣に聞く!現場で活用するためのAIエージェント実践入門(Findyランチセッション)
smiyawaki0820
6
620
JAWS AI/ML #30 AI コーディング IDE "Kiro" を触ってみよう
inariku
3
270
Segment Anything Modelの最新動向:SAM2とその発展系
tenten0727
0
390
LLMで構造化出力の成功率をグンと上げる方法
keisuketakiguchi
0
400
ビジネス文書に特化した基盤モデル開発 / SaaSxML_Session_2
sansan_randd
0
260
Kiroから考える AIコーディングツールの潮流
s4yuba
4
660
LLMでAI-OCR、実際どうなの? / llm_ai_ocr_layerx_bet_ai_day_lt
sbrf248
0
430
【CEDEC2025】大規模言語モデルを活用したゲーム内会話パートのスクリプト作成支援への取り組み
cygames
PRO
2
770
Findy Freelance 利用シーン別AI活用例
ness
0
300
マルチプロダクト×マルチテナントを支えるモジュラモノリスを中心としたアソビューのアーキテクチャ
disc99
0
290
風が吹けばWHOISが使えなくなる~なぜWHOIS・RDAPはサーバー証明書のメール認証に使えなくなったのか~
orangemorishita
15
5.5k
Featured
See All Featured
Large-scale JavaScript Application Architecture
addyosmani
512
110k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
50
5.5k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
667
120k
Designing Experiences People Love
moore
142
24k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
10
1k
Why Our Code Smells
bkeepers
PRO
337
57k
Product Roadmaps are Hard
iamctodd
PRO
54
11k
Raft: Consensus for Rubyists
vanstee
140
7k
Navigating Team Friction
lara
188
15k
Intergalactic Javascript Robots from Outer Space
tanoku
272
27k
YesSQL, Process and Tooling at Scale
rocio
173
14k
Being A Developer After 40
akosma
90
590k
Transcript
無限ストレージ Jul. 10th, 2021 Satoru Takeuchi twitter: satoru_takeuchi, EnSatoru 1
ストレージのコストは高い 1. ハードウェアコストは高い 2. ストレージシステムを組むコストも高い 3. 運用コストも高い 2
今日のテーマ 1. ハードウェアコストは高い 2. ストレージシステムを組むコストも高い 3. 運用コストも高い 3
容量が無限のストレージさえあれば… 1. 構築 2. 容量を無限に増やす 3. バイト単価が実質ゼロに 4. うれしい 4
実現方法: Cephを使う • CephはOSSの分散ストレージ • 提供するストレージ ◦ ブロックデバイス(RBD) ◦ ファイルシステム(CephFS)
◦ オブジェクトストレージ (RGW) 5
Cephのアーキテクチャ 6 ストレージプール RBD CephFS RGW node node node node
disk OSD disk OSD disk OSD disk OSD データはOSD間に均等に分散配置される データはOSD間に均等に分散配置される データはOSD間に均等に分散配置される データは全OSDに均等に分散配置される
RBDに注目! 7 ストレージプール RBD node node node node disk OSD
disk OSD disk OSD disk OSD
もしRBDの上にOSDを作れれば… 8 ストレージプール RBD node node node node disk OSD
disk OSD disk OSD disk OSD OSD
もしOSD on RBDのみからクラスタを作れれば… 9 ストレージプール rbd OSD rbd OSD rbd
OSD rbd OSD
無限ストレージができるのでは? 10 ストレージプール rbd OSD rbd OSD rbd OSD rbd
OSD 超自然的パワー 無限のデータ やったね!
つくりかた 1. 物理ディスク上のOSD(以下OSD on diskと記載)からCephクラスタを作る 2. クラスタからRBDを切り出す 3. RBD上にOSD(以下OSD on
RBDと記載)を作ってクラスタに組み込む 4. OSD on diskをクラスタから切り離す 11
環境 • Ubuntu: 18.04.4 • Linuxカーネル: 4.15.0-99 • Ceph: v15.2.12
• Rook(Cephのオーケストレータ): v1.6.7 12
初期状態 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
RBDを作る 14 ストレージプール disk OSD RBD
次: RBDの上にOSDを作る 15 ストレージプール disk OSD RBD OSD
成功 16 ストレージプール disk OSD RBD OSD # ceph -s
... osd: 2 osds: 2 up
容量も倍になった! 17 ストレージプール disk OSD RBD OSD # ceph -s
... osd: 2 osds: 2 up ... usage: 2.0 GiB used, 18 GiB / 20 GiB avail
次: OSD on diskをクラスタから切り離す 18 ストレージプール disk OSD RBD OSD
成功! 19 ストレージプール disk OSD RBD OSD # ceph -s
... osd: 1 osds: 1 up ... usage: 1.0 GiB used, 9.0 GiB / 10 GiB avail
…と思ったら死んだ! 20 ストレージプール disk OSD RBD OSD osd: 1 osds:
0 up
原因 21 ストレージプール disk OSD RBD OSD 1. OSD on
RBDのメタデータはOSD on diskに保存されている 2. OSD on diskを削除するとそこにあったデータはロスト 3. OSD on RBDが機能しなくなりDOWN 新OSDのメタデータ
対策: データを冗長化させて徐々に移動させる 22 1. 最初にOSD on diskを二つ作る 2. OSD on
RBDを2つ作る 3. OSD on diskを1つ削除。このOSDにあったデータは他の OSDに移動 4. OSD on diskをもう1つ削除。その後は同上
初期状態その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
次: OSD on RBDを2つ作る 24 ストレージプール disk OSD disk OSD
RBD OSD RBD OSD
問題発生: データのリバランスが終わらない 25 ストレージプール disk OSD RBD OSD RBD OSD
disk OSD • 期待値: OSD on disk上のデータの半分が OSD on RBDに移動 • 実際: 全然進まない
原因: 循環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
解決方法: 同期writeしないようにCephを改造 27 • open()に付与されたO_SYNC,O_DSYNC,O_DIRECTを削除 • sync系システムコールの呼び出しをすべて削除 ◦ sync(), fsync(),
fdatasync(), sync_file_range()...
改造したCephを使ってもう一回やってみると… 28 ストレージプール disk OSD disk OSD RBD OSD RBD
OSD
やっぱり循環I/O発生! 29 ストレージプール disk OSD RBD OSD RBD OSD disk
OSD • 原因不明 • カーネルのrbdドライバの変更が必要 ? • ここで時間切れ
(推測) 仮に次のステップに行けたとして… 30 ストレージプール RBD OSD RBD OSD
(推測) こうなるか? 31 ストレージプール RBD OSD RBD OSD やったね! 無限I/O
超自然的パワー
(推測) 無限に書き込むと… 32 ストレージプール RBD OSD RBD OSD できるよね? 無限write
(推測) たぶん死ぬ 33 ストレージプール RBD OSD RBD OSD 君にはがっかりだ RBD
無限write カーネルパニック!
(推測) 原因 1. OSD on RBDのデータはアタッチされたノードのメモリ上にのみ存在 2. メモリが足りないとOOM発動 3. プロセスを皆殺しにした後にカーネルパニック
4. ノード上のデータはすべて消える 34
結論 • 超自然的パワーは無かった • 無限ストレージも無かった • ハードウェアコストは高い 35
おわり 36 残念だったな