Hadoop では、分散処理のマスタとなるノード(サーバ)の
冗長化が課題となることがあると思います。
たとえば下記のあたりの障害対策をどうするかが、よく話題になっています。
- HDFS のマスタノード(NameNode)
- MapReduce のマスタノード(JobTrackser)
vSphere Big Data Extensions(BDE) と
vSphere での冗長化については、
マニュアルだと下記のあたりにそれとなく記載があります。
VMware vSphere Big Data Extensions Administrator's and User's Guide
> Managing Hadoop and HBase Clusters
About vSphere High Availability and vSphere Fault Tolerance
FT では当然、保護可能だと思います。
ただし FT は vSphere 5.5 までだと 1vCPU しか割り当てられないので
実際のところは vSphere HA が有効そうな気がします。
そして、vSphere HA については
マスタノードのプロセス検知まで対応しているのか気になったので試してみました。
BDE で自動構築した VM の HA 保護構成について
BDE で自動構築(テンプレートからクローン)された VM のうち、
マスタノードになるものは、デフォルトで
共有データストア(Shared datastores)に配置されます。
DataMaster が、HDFS の NameNode で、
ComputeMaster が、MapReduce の JobTracker です。
vSphere HA での VM の保護設定を確認してみると、
マスタノードは HA が有効で、それ以外は無効になっていました。
※仮想マシンの監視は「仮想マシンとアプリケーションの監視」にしてあります。
マスタノードの確認
ためしにマスタノード障害を発生させてみるために、
マスタノードを確認します。
BDE では、BDE の Web Client プラグイン画面から、マスタノードがわかります。
それぞれゲスト OS の、IP アドレスがわかります。
他にも、BDE の管理サーバに SSH して
Serengeti CLI からマスタノードを確認することもできます。
[serengeti@192 ~]$ serengeti
=================================================
* _____ _ _ *
* / ____| ___ _ __ ___ _ __ __ _ ___| |_(_) *
* \____ \ / _ \ '__/ _ \ '_ \ / _` |/ _ \ __| | *
* ____) | __/ | | __/ | | | (_| | __/ |_| | *
* |_____/ \___|_| \___|_| |_|\__, |\___|\__|_| *
* |___/ *
* *
=================================================
Version: 2.0.0
Welcome to Serengeti CLI
serengeti>connect --host localhost:8443
Enter the username: vmad\administrator ★vCenterSSOで認証可能なユーザでログイン
Enter the password: **********
Connected
serengeti>cluster target --name hdp_cluster01
serengeti>cfg info
Hadoop [1.2.1 rev.1503152][fs=hdfs://192.168.5.128:8020][jt=192.168.5.125:8021]
「fs=~」が HDFS のマスタノード(NameNode)、
「jt=~」が MapReduce のマスタノード(JobTracker)です。
マスタノードを停止してみる。
まず、HDFS のマスタノードを停止してみます。
hdp_cluster01-DataMaster-0 に SSH でログインして
NameNode プロセスを停止してみました。
[root@192 ~]# uname -n
192.168.5.128 ★ホスト名は IP アドレスと同じになっている。
[root@192 ~]# jps
4930 NameNodeMonitor
25430 Jps
2680 NameNode
kill コマンドで、プロセス停止してみました。
[root@192 ~]# kill 2680
[root@192 ~]# jps
4930 NameNodeMonitor
25466 Jps
少し待つと、vSphere HA が作動します。
プロセスの再起動ではなく、
VM がリセットされ、ゲスト OS があらためて起動されます。
VM が vSphere HA でリセットされたことが
イベント にも残っています。
ゲスト OS 起動後は、
NameNode のプロセスが自動起動します。
[root@192 ~]# uname -n
192.168.5.128
[root@192 ~]# uptime
13:45:38 up 6 min, 1 user, load average: 0.10, 0.45, 0.29
[root@192 ~]# jps
2716 NameNodeMonitor
2309 NameNode
2830 Jps
同様に、MapResuce の JobTracker のプロセスを停止してみました。
hdp_cluster01-ComputeMaster-0 に SSH でログインして、
JobTracker のプロセスを停止してみます。
[root@192 ~]# uname -n
192.168.5.125 ★ホスト名は IP アドレスと同じになっている。
[root@192 ~]# jps
2656 JobTracker
15403 Jps
2802 JobTrackerMonitor
[root@192 ~]# kill 2656
[root@192 ~]# jps
15418 Jps
2802 JobTrackerMonitor
しばらくすると、JobTracker の VM も
vSphere HA によってリセットされました。
VM がリセットされることで、
ゲスト OS の起動に合わせて JobTracker のプロセスが起動(復旧)されます。
vSphere HA では、ESXi ホスト障害や、VM(ゲスト OS)のハングといった
障害は標準で検知でき、自動復旧できます。
アプリケーション障害を検知する場合には
そのアプリケーション側で vSphere HA に対応している必要があるのですが、
BDE で自動構築した Apache Haoop のマスタノードは
NameNode も、JobTracker も vSphere HA のアプリケーション監視に
対応しているようです。
BDE については、こちらもどうぞ・・・
vSphere で Hadoop してみる。(Big Data Extentions) 第1回
以上、BDE と vSphere HA についてでした。