Cloudera ManagerのNameNode HAウィザード

[Cloudera Manager Advent Calendar 2015](http://qiita.com/advent-calendar/2015/cm)の4日目です。

いまだにHDFSはSPOFガー！という方がいます（本当にいる）。NameNodeのHAはもう3年以上も前に実装されており、本番環境で当たり前のように利用されています。
HA構成への移行はCloudera Managerを使えば簡単です。HA移行ウィザードは美しくシンプルなので、ここで画面ショットと共にで手順を紹介しておきたいと思います。Cloudera Manager 5.5のUIですが、5系であればさほど変わりありません。

# 準備

- ZooKeeperが起動していること（3台以上の奇数台）

以上です。本番環境での要件を考慮する場合には、ディスクの分離など確認が必須ですが、HAを組むだけであればマスタが3台ありZooKeeperが起動していれば準備完了です。もちろん、ワーカノードは別に走っていることを前提にしています。

詳細なハードウェア要件は以下を参照
http://www.cloudera.com/content/www/en-us/documentation/enterprise/latest/topics/cdh_hag_hdfs_ha_hardware_config.html

# ウィザードの実行

HDFSのページにあるアクションメニューから「High Availabilityの有効化」を選択します。

![alt](https://lh3.googleusercontent.com/xN8rpaeRS0FW56-GqC41j9Ujgpykxli3ZXymMtFKMYXbdMdyTpJvwNkC4Cd2bfPSu1sxIjs8UWpM2RulEGs_HRFmEMfSwSYMgcYO_IvOWXtG4NJedO0C7D1xjAqlz_5fM9hcAIn8Cn3jPTh-H4lzHx_ugGL35pL6ct6oMqbSMrvOhgrb4Aurh_cNhYTT-5Sugvka0C54GnqSnpVSBIbfHDhsO208EX8c_vKKhgv8KIc_XxJEvMXoOGQl5nWcLBJHEZUiJBRvKQf3P14dippn6Ck1ldpKLgcr5M9CuLeg2j8Uh3fQwSpUuw1oV-TUf_14lTPmHuV-iwDt55oaoO5LoJl6IIKQy2c9FP-INAoB1mdMd70haYrV2Fm3M_P_TdOewLYd-CggaXZcgAEgrtidJ7zQCe_TKV_c6vuvIOWukW0u4sH3F4A6y0qr6P7Sz9PlNUFKyKn0y2np5g0yTBmcLWGs4ouQkZ7rMbIosMP4cspD81Zr1TEnQpQoU_IHsjsr-PwKtAJnRt4NvGQldZxr4AUNWyYxG47HVhvdfPc=w1045-h720-no)

NameNodeの論理名を決めます。デフォルトで「nameservice1」となっています。

![alt](https://lh3.googleusercontent.com/DImWv7sT70T558Flf3Dl2I-G9_f0er541yG2FSON1kKr2UfLC3Cih-eyGC0rIYCi2UJl3qcYNswXn9nvunpqrlxTGKO-g_DCgpQDhNPt-SRq5M_wFGE_N7FGi_oltnHOUhoJawvNt9bhHgKhGkBdiKpUOGLvEY2AbRFiCjakzdzO8VxGe3YBgrZxm7dsDPg1noVGrigVwEgNixZa32PTdDIQ0JOl02RmHQVUu9Qu30Wev1vI5cZBI_6nXGyiliG_KvvkFXCmqGRapZJQmzySABkMJt4z85_giG44KSIs-B1ZnD8Yu3R6bJ5A7vertPPLhTuVVNT2ok3f7_xJ5VzIL9dl-xofBPOHf9Nttk8-6wFcBsBlrpoHAqHyCgOfsa6qZp2DeX5rzIXIfll0hh1p6vrnEqHI3nJrUC9W7lWVsRUU9WzK2U9X2AOSl34NFyOv08wqL4vJGm7hXcPT_nWVW6wxqCX26S-AAXn0ScROomwW_dmDusbeQGMXsriHnO4QquRpN30SaGdM5a4mqLpSR7L3UhVGPSqQgZLCTPU=w1006-h364-no)

2台のNameNodeが稼働するホスト、3台のJournalNodeが稼働するホストを選択します。

![alt](https://lh3.googleusercontent.com/1Y0K9yFWMmdu8UFnXNqelrF4y0iBBUk5oeQdoyyi9UkuOC-BxfOV8EDp8YslPakUefgxxSjI_GNuMMe_BsWm3ZrKqqs3Aa9y_PvOHDejqrpHC0I5ax_gT9ej_G-UpDfdJId7z292JnWGa-QaDC-S8s4G5LzZss179Eqdum0txsLOBk0EVo8DqGtytdlmZsfekB-xNvAim-QPBuHLOCouTykunsVaftKUNNR1HZ5GOBnpEAtGzpL8-du6j5fqoInWmcw0C3BmyyRydJ1GIBZMdAI0SD8krOT2exn2GgmWT5GHXjNxXyBoQAueCYW-7NdJx7pZUe-9nHgP092oM7V6HDOwZHvlzMbtJK5Frr2VCjVL_R5WhAfBkUAJh1X7zVoCW7Av_wJZLAtw9oNQANbti8C9PhaJlpVvPYbq1vk5Ah0CmjbKY28zUtRtnjQSXWYAXGq8ghOVtgda1B0CmrjESjqt0kgm_mjmoJxB6gcfLX7PIkQULsfqpiqJuX7OMoVQQoq1IqQpZsC59RMu29DewYL55656nxhYWWaYdb0=w989-h406-no)

editsを書き込むディレクトリを指定します。

![alt](https://lh3.googleusercontent.com/g99WrbLufxeDOCIdHq9F2-gl-8viHUtrnogZHkml8KGjBzIwtJ3OGKwb02QLn3i00uA0ROUiwvE-zdQmS-Wr4RYmWju2EGWVl5U1GlE1GnqIclm4Ykr6p6K7K305rJz8bUpmWEDx7kJWPRlfG_EPP5X9EY-rIpGdUElzg_KHpA-SBRM6iFagGcDtJgAhNjhkgMK9Rg0HEvIQHZu0g-9u8WV2WSKEhlpycHZTmd2t3cqOh9180QVe6x5uC244ILvDj9AEa_gO2m91B_TfVwISJ2dn0ZpQdHw5596_bXRufjW2ED7Mm5bpcbHsxgQyNSvSwMQKObMJxzp4g9wVjmTsc088uLmPW5kAlndj8vAnnuDJoxARfhioBQJf9cO0dyIW-ji0opz_Ob-3jmUOWW62WonKdUtxVdMwoIUO04RzgO1PIwWpWw4WKteX7L5NnVmF6TdoRX1pZ88yOW8hZ1AuI8cD1VTBJ639H-wrMWuipxZDKM3CEVjKwIz4c8enWnxdA-eq0TmPm0wlKhhJ_wJJiP_2SkIMN4lMnvOP5gk=w1001-h632-no)

以上で、有効化のステップが流れます。あとは待つだけ（中で何が流れているのかは後述します）。

![alt](https://lh3.googleusercontent.com/lExtc1wdi6eXd0ces3hQZCMr5C1MWKyNFFNSHgIFWElSat-UdcIB6FTRSQ1c95BQpxHVOmKuXoDvic30b6o1V7iw90NA_deese7q_3Q6lMdcnD9PcXTEk9LYEiIuf128Z1eTiq3blmbOewwbkgNKy3QFqD1_M7LUziPT5G0oTXEX_Uh-5HOiceBV2hUPJ0lhyHQYEJzvO-KrA8vATNM7IwsMFX_7kWMdDAojf1vbX0cndx41FHOqAiWg0wVm49WEV8Ed7B6nRDrS5QMfSS0c4oQFPhq9LvBpAbiPAN5ZiQxTT-FGNHyVqGmNJ7GAy4lWHfNyOCG19GYjIsvY5WSuw5IGLmCumrPi7--lYSi3cl8kTRWe5ylvS2jnYIdM3CpAnJKE6NuEmpbITlD0VJw8gZm9U6nF_9JyNyPWhdXg1VNCrd3er_KV7DH8Y-IZ4n_hybq-igg54e-1J5ll_zBuRfnLp_gKrFt9S3swJgGzpf1ak-873P2emD-EhfA3Wg-FMHn0fe_RrSFzp7XRIcTcfxOhn3sJq_FvK761mYI=w1000-h385-no)

終わりです。本当にこれだけなんです。

![alt](https://lh3.googleusercontent.com/kEeyT_BVfxkL_4gF4bxhanPE9hF8KOJfv9HtZILcXldvp64hR3NyLt3VNSZTLQc_NGcyutEbp6MqbkKYcPzn0dJyHyKnAPa4PFUaY5VMKKa2gAx-QxcO3h7gNSnByn4U1JhKYIaFPPDHKgmOtFqG9W1BVeOVnM5RbBomXUO9GVVmEzO9wHR9snL-CFJVi02u6Bs_csnH-HaXwlFBbCUsVn4nwQgYMlQcuEcdQkeWsKBjMTiK4a9P2oAJqQApyEvd_UCMaY1Ohe5UVdpeQrx3uvHg3Sgfhdeiu4ox6fEv2rzgVT5WbBDsZQ0hz43TpCPbRjbJgJRiaF0RKj9PZdsr4zakaKLGQ7KjiKKaxAH0qUrVVhL-i0iRAgXbjJ8cGEkcQO-DgOAqITUo6vUS_hlpazg-rrJ0ykcmZOXiTglPgbDLS7aVRi9ZsEiFjZ_OZmYxNBOtRcuqZAmUOTnwqnA4HUd-tWr_tndBeN6zg1bfrE0D9erpLROWP_YikP7NJXBKRT2JUAh_1y5xkca1jSLMuQ7URM0HwkujVF6EtVs=w635-h238-no)

具体的に何をしているのか、各ステップを書き出してみました。上の画面ショットでは省略しましたが、これらが順に実行される様子はすべて可視化されています。また、カッコで書いている分は少しわかりにくいかなと思った点のみ私が補足したものです。

1. 新しいスタンバイ NameNode の name ディレクトリが存在しないか、書き込み可能で空の状態であることを確認します。
2. nameservice の edits ディレクトリが存在しないか、書き込み可能で空の状態であることを確認します。
3. ZooKeeper以外のサービスの停止
4. ロールを作成して High Availability を有効にしています（JournalNodeの追加です）
5. SecondaryNameNode ロールを削除しています。
6. NameNode および HDFS サービスを設定して High Availability を有効化しています（設定をレビューして有効にしています）
7. Automatic Failover Znode の初期化
8. JournalNodes を開始しています
9. フォーマット（新規構築時以外は失敗して先に進むようになっています） 
10. 共有 edits ディレクトリの初期化
11. この NameNode の開始（Active NameNode の起動です）
12. RPC への応答開始の NameNode 待機（NameNode が起動したか、RPC への応答を待つことで確認しています）
13. スタンバイ NameNode のブートストラップ
14. この NameNode の開始（Standby NameNode の起動です）
15. この Failover Controller の開始（両ノードの Failover Controller を起動します）
16. RPC への応答開始の NameNode 待機
17. 開始（DataNode やその他のサービスを起動します）
18. クライアント設定の展開（詳しくは[Cloudera Managerが管理する設定ファイルの違いについて
](http://qiita.com/d1ce_/items/15b9e7cb58ff2289f3cb)を参考）

# 最後に

これだけのステップを手動でやるのは負荷以外のなにものでもありません。Cloudera Managerを使ってさっさと終わらせてしまいましょう。
参考: HDFS High Availability
http://www.cloudera.com/content/www/en-us/documentation/enterprise/latest/topics/cdh_hag_hdfs_ha_config.html