48
1 High Availability for the HDFS NameNode Cloudera 株株株株 株株株株株株株株株株株株株株株株株株 株株 株株 2013 株 1 株 21 株

HDFSネームノードのHAについて #hcj13w

Embed Size (px)

DESCRIPTION

Hadoop Conference Japan 2013 Winter で発表した、ネームノードHA についての資料です。10分だったのでかなり限定的な説明に終わっています。

Citation preview

Page 1: HDFSネームノードのHAについて #hcj13w

1

High Availability for the HDFS NameNode

Cloudera 株式会社 カスタマーオペレーションズエンジニア小林 大輔2013 年 1 月 21 日

Page 2: HDFSネームノードのHAについて #hcj13w

自己紹介

• 小林 大輔 (@daisukebe_)• カスタマーオペレーションズエンジニアとして

テクニカルサポート業務を担当• email: [email protected]

Page 3: HDFSネームノードのHAについて #hcj13w

3

ネームノード HA とは?

Page 4: HDFSネームノードのHAについて #hcj13w

4

従来のネームノードの問題点

• 従来の Hadoop ではネームノードは単一障害点(SPOF) だった

• ネームノードは、ファイルシステムのメタデータを管理している (edits ログ /fsimage など )

• ネームノードがダウンしたらデータが読み込めず、クラスタ自体が利用不可になる

Page 5: HDFSネームノードのHAについて #hcj13w

5

従来のネームノードの問題点

• 従来の Hadoop ではネームノードは単一障害点(SPOF) だった

• ネームノードは、ファイルシステムのメタデータを管理している (edits ログ /fsimage など )

• ネームノードがダウンしたらデータが読み込めず、クラスタ自体が利用不可になる

HA 対応してほしいという需要

Page 6: HDFSネームノードのHAについて #hcj13w

6

ネームノード HA の要件

• メタデータの保存先として、カスタムハードウェアに依存しないこと

• アクティブ / スタンバイ構成において、メタデータの同期が容易であること

• デプロイが容易であること• スプリットブレインシンドロームを避けられる

こと• SPOF がないこと• 既存の Hadoop クラスタの資産を無駄にしないこ

Page 7: HDFSネームノードのHAについて #hcj13w

7

ネームノード HA の要件

要は

Page 8: HDFSネームノードのHAについて #hcj13w

8

ネームノード HA の要件

( 比較的 ) 簡単に既存の Hadoop の仕組みを

無駄にすることなくHA 構成を作れること

Page 9: HDFSネームノードのHAについて #hcj13w

9

ネームノード HA

• Apache Hadoop2.0 ではネームノード HA が導入されました

• CDH4.1 にも含まれてます

Page 10: HDFSネームノードのHAについて #hcj13w

10

ネームノード HA

• クォーラムベースジャーナリング• 外部のハードウェアに依存しない

• 自動フェイルオーバー• 障害発生時にも自動で切り替え可能

Page 11: HDFSネームノードのHAについて #hcj13w

11

今日は、、

• クォーラムベースジャーナリング• 外部のハードウェアに依存しない

• 自動フェイルオーバー• 障害発生時にも自動で切り替え可能

Page 12: HDFSネームノードのHAについて #hcj13w

12

クォーラムベースジャーナリングについて

Page 13: HDFSネームノードのHAについて #hcj13w

13

クォーラムベースジャーナリング

• ネームノードのメタデータ (edits ログ ) を複数の場所で保管

• ネームノードはクライアントとして、 edits を書き込む

• 複数の書き込み先のうち、過半数( クォーラム数 ) のノードに成功すればedits はコミットとみなす

Page 14: HDFSネームノードのHAについて #hcj13w

14

NameNode

QuorumJournalManager

クォーラムベースジャーナリングの導入

Page 15: HDFSネームノードのHAについて #hcj13w

15

NameNode

QuorumJournalManager

クォーラムベースジャーナリングの導入

edits ログの書き込み先として、ジャーナルノード (JN) の導入

Page 16: HDFSネームノードのHAについて #hcj13w

16

NameNode

QuorumJournalManager

クォーラムベースジャーナリングの導入

複数のノード上でスタンドアロンのデーモンが動作

Page 17: HDFSネームノードのHAについて #hcj13w

17

NameNode

QuorumJournalManager

クォーラムベースジャーナリングの導入

各 JN はローカルディスクに edits を書き込む

Page 18: HDFSネームノードのHAについて #hcj13w

18

NameNode

QuorumJournalManager

クォーラムベースジャーナリングの導入

追加でノードが必要なわけではないアクティブ / スタンバイネームノード、jobtracker( 比較的信頼性の高いノード )

の 3 台にデプロイ

Page 19: HDFSネームノードのHAについて #hcj13w

19

クォーラムベースジャーナリングの導入

クライアント側はクォーラムジャーナルマネージャ (QJM)

NameNode

QuorumJournalManager

Page 20: HDFSネームノードのHAについて #hcj13w

20

クォーラムベースジャーナリングの導入

各ネームノード上にデプロイ

NameNode

QuorumJournalManager

Page 21: HDFSネームノードのHAについて #hcj13w

21

では、、

edits はどのように

書き込まれるのか?

Page 22: HDFSネームノードのHAについて #hcj13w

22

edits 書き込みのフロー

ネームノードはedits をローカルディスクに書き込む

Localdisk

Page 23: HDFSネームノードのHAについて #hcj13w

23

edits 書き込みのフロー

書き込みよろー

QJM は、 logSync() メソッドを使用してすべての JN へ edits を同期する

Page 24: HDFSネームノードのHAについて #hcj13w

24

edits 書き込みのフロー

書き込んだった

書き込んだったクォーラム数の JN から成功の ACK が返ると

edits の書き込みに成功したとみなす

Page 25: HDFSネームノードのHAについて #hcj13w

25

edits 書き込みのフロー

書き込んだったクォーラム数未満の JN からしか成功の ACK が返ってこなければ

edits の書き込みに失敗したとみなす

Page 26: HDFSネームノードのHAについて #hcj13w

26

ところで、、

ネームノード HA はアクティブ / スタンバイ構成

Page 27: HDFSネームノードのHAについて #hcj13w

27

ところで、、

両ネームノードから edits が書き込まれる恐れはないの?

Page 28: HDFSネームノードのHAについて #hcj13w

28

これは、、

両ネームノードから同時に書き込んでしまうと

データに不整合が生じてしまう

Page 29: HDFSネームノードのHAについて #hcj13w

29

ファイルシステムとしての信頼性が損なわれる

Page 30: HDFSネームノードのHAについて #hcj13w

30

最悪データ破損も招きかねないので

非常に危険!

Page 31: HDFSネームノードのHAについて #hcj13w

31

JounalNode JounalNode JounalNode

NameNode

QuorumJournalManager

NameNode

QuorumJournalManager

Page 32: HDFSネームノードのHAについて #hcj13w

32

JounalNode JounalNode JounalNode

NameNode

QuorumJournalManager

NameNode

QuorumJournalManager

Page 33: HDFSネームノードのHAについて #hcj13w

33

JounalNode JounalNode JounalNode

NameNode

QuorumJournalManager

NameNode

QuorumJournalManager

どのネームノードがアクティブなのかJournalNode が判断できなければ

両ノードからの書き込みを許してしまう

Page 34: HDFSネームノードのHAについて #hcj13w

34

そこで、、

クォーラムベースジャーナリングにはフェンシングの

仕組みがある

Page 35: HDFSネームノードのHAについて #hcj13w

35

そこで、、

フェンシング:edits を書き込めるネームノードは

常にただ 1 つだけであることを保証する仕組み

Page 36: HDFSネームノードのHAについて #hcj13w

36

QJM のフェンシング

エポック番号を使う

Page 37: HDFSネームノードのHAについて #hcj13w

37

エポック番号

JN がアクティブネームノードを

一意に識別するために使う番号

Page 38: HDFSネームノードのHAについて #hcj13w

38

エポック番号によるフェンシング

• アクティブになるたびに新しいエポック番号が割り振られる

• 両ネームノードが同時に同じエポック番号をもつことはない

• JN は最新のエポック番号を保存する

Page 39: HDFSネームノードのHAについて #hcj13w

39

エポック番号によるフェンシング

時系列でみてみると ...

Page 40: HDFSネームノードのHAについて #hcj13w

40

エポック番号によるフェンシングネームノード 1 ネームノード 2

時間 時間

起動時

1

2

3

フェイルオーバー

フェイルオーバー

アクティブになった

Page 41: HDFSネームノードのHAについて #hcj13w

41

エポック番号によるフェンシング

JounalNode JounalNode JounalNode

NameNode

QuorumJournalManager

NameNode

QuorumJournalManager

Page 42: HDFSネームノードのHAについて #hcj13w

42

エポック番号によるフェンシング

JounalNode JounalNode JounalNode

NameNode

QuorumJournalManager

NameNode

QuorumJournalManager

2 2 2

Page 43: HDFSネームノードのHAについて #hcj13w

43

エポック番号によるフェンシング

JounalNode JounalNode JounalNode

NameNode

QuorumJournalManager

NameNode

QuorumJournalManager

俺、” 1” だわ 俺、” 2” だわ

21

2 2 2

Page 44: HDFSネームノードのHAについて #hcj13w

44

エポック番号によるフェンシング

JounalNode JounalNode JounalNode

NameNode

QuorumJournalManager

NameNode

QuorumJournalManager

“1” は低いので却下“2” の書き込みを採用しま

“1” は低いので却下“2” の書き込みを採用しま

Page 45: HDFSネームノードのHAについて #hcj13w

45

エポック番号によるフェンシング

JounalNode JounalNode JounalNode

NameNode

QuorumJournalManager

NameNode

QuorumJournalManager

クォーラム数からのレスポンスを得ることで、 edits の書き込みに

成功する

書き込めた!

Page 46: HDFSネームノードのHAについて #hcj13w

46

まとめ

• クォーラムベースジャーナリングを使用したネームノード HA を紹介しました

• edits を複数ノードで分散して保存することで信頼性が高まっています

• エポック番号を使用することで、両ネームノードから書き込みが発生することを防いでいます。

Page 47: HDFSネームノードのHAについて #hcj13w

47

宣伝

• Cloudera Manager を使用することでネームノード HA への移行が非常に簡単にできます

• Cloudera 社のブースでデモを行なっているので、立ち寄ってみてください

Page 48: HDFSネームノードのHAについて #hcj13w

48