2024.12.19
システムの穴を運用でカバーしようとしてミス多発… バグが大量発生、決算が合わない状態から業務効率化を実現するまで
リンクをコピー
記事をブックマーク
安達寛之氏:では、次にセキュリティ対応の自動化について話をしたいと思います。まずみなさん、セキュリティ対応ってちゃんとできていますか? 「できている」「ちゃんとやってます」っていう方は、すばらしいと思います(笑)。
一方で、やらないといけないのはわかっているんだけど、「クローズドな環境だから」とか、「他に優先すべきことがあるから」といったことで、できてない方もいらっしゃるんじゃないかなと思います。
弊社では、YJ-CSIRTという社内のセキュリティを一元的に管理する部署があり、その指示のもと、期限を決めて対応しています。とはいえ、数千台あるサーバーのそれぞれの種類に応じて期限内に人の手で適切に対応するというのは非常に難しい状況です。ですので、これも自動化というか、ワンコマンド化しました。
先ほどと同じように、DataNodeとかNodeManagerといったスレーブノード群もそうですし、NameNodeやResourceManagerなどのマスター系のものであったり、HiveServer2のようなロードバランシングしてるツールのサーバーなど、それぞれに応じて自動化しました。これについては本番環境で稼働させています。
まずDataNode、NodeManagerの脆弱性対応の自動化についてご紹介します。
少し細かくなって申し訳ないんですが、最初にDataNodeとNodeManagerのサービスアウトを行います。NodeManagerにラベルという機能がありまして、それを付けたノードに新しいジョブがアサインされないようにします。
そのうえで、DataNodeをデコミッション。つまり、持っているデータを他にコピーさせて、そのノードを外すための準備を開始させて、あとはラベル付けしたそのNodeManagerによって実行されているジョブがなくなるまで待って、今度はNodeManagerも外し、DataNodeのデコミッションが完了するのを待つ、といったようなことを行います。
完全に持っているデータがアクセスされない状況になって、処理も実行されない状況になったということを確認して、セキュリティアップデートを適用して、そのサーバーをリブートします。それが完了したら、DataNode、NodeManagerをサービスインさせるという順番で、処理を行ってます。これをHadoopの処理に影響を与えない程度の単位で自動化し、順番に処理していっています。
次に、NameNodeの脆弱性対応の自動化ですが、HadoopのNameNodeはアクティブのものとスタンバイのものでHA構成になっています。この2台と、あとはコールドスタンバイ用のサーバーというのを使って、上から順番に実行していきます。
まずはコールドスタンバイに、セキュリティアップデートを適用します。その後、スタンバイのNameNodeからメタデータをコピーして、コールドスタンバイがNameNodeとして使えるような状態にします。そして、スタンバイのNameNodeを停止します。
その後、スタンバイのNameNodeに割り当てているVIP、バーチャルホスト名をこっちのコールドスタンバイのほうに付け替えて、利用者から……というかHadoopクラスタとしてみた時に、そのアクセスポイントは変わらないようにしてます。その状態でコールドスタンバイをスタンバイNameNodeとして起動します。
それら一連の作業が問題なく動作することを確認した後で、今度はアクティブのNameNodeとコールドスタンバイのNameNodeをフェイルオーバーさせて入れ替えて、今度は一番左のアクティブのNameNodeに対するアップデートを提供していくといったようなかたちで、NameNodeを止めることなく安全に脆弱性対応をしています。
このあたりの、例えばメタデータのコピーやVIPの付け替えみたいなところについては、手順化してきちんとまとめていたりしても、どうしてもミスしたり時間かかってしまったりするようなところがあると思うんですけど、そういったところを自動化して、ちゃんと安全にツール内でチェックしつつ、できるだけ早くこの入れ替え作業などを行えるようにしています。
次にHiveServer2。先ほど申し上げたように、このHiveServer2などのツール系のサーバーは、ロードバランシングして運用していて、ユーザーはこのロードバランサ―のDNS名に対してアクセスをしてます。
あるHiveServer2でジョブが実行されているという状況で、このHiveServer2をいったんロードバランサーから外します。
ただし、この上で実行されているジョブはまだ動き続けているので、それが終わるまで待って、完了したらセキュリティアップデートをします。
この間、ロードバランサーからは外れてるので、新しいジョブがアサインされることはなく、ユーザー影響はないという状態になってます。バージョンアップが完了したらここに戻す、という感じです。
このようにしてセキュリティ対応を自動化したことにより、運用工数の削減に大きく貢献しました。運用者としては1回つくってしまえばコンポーネントごとにワンコマンドで実行すればいい状況になります。
また、安全にオペレーションを実行することができます。人の手で全部やってしまうと、このセキュリティ対応が期限内に終わらないんですけれど、自動化だとそのplaybookを実行して放置しておけばいいので、昼夜を問わずでき、ちゃんと期限内にセキュリティ対応ができるという効果を発揮してます。
3つ目の不良ノード対応についてです。背景として、数百台あるいは1,000台以上のサーバーを運用していると、やっぱり普通に壊れます。
だいたいディスクとメモリがエラーになります。それによって、HDFSのブロックが壊れてデータが読めなくなったり、特定のマウントしてるパスにライブラリを配置してたりするんですけれども、運悪くそこが壊れてしまうと、そのライブラリが読めなくなって、Hadoopのタスクが失敗するといったようなことが起きます。
また、どういう状態になったらこのサーバーをサービスアウトするかという、明確な判断基準がなかったりということもあって、これもちゃんとしたいという背景もありました。
それに対しては、非常に単純なんですけれど、dmesgなどのハードウェアエラーのメッセージをもとにそれぞれの種類に応じてスコアリングし、それを足し上げて閾値を超えたら筐体不良であるとみなしています。
仕組みとしては各DataNodeとかNodeManagerのサーバーにインストールされているAmbariエージェントから、これらのスコアをAmbariサーバーにレポートして、オペレーション用のサーバーから定期的にその数値を取ってきて、閾値を超えていればデコミッションすべきだというふうにAPIから指示を出して、それを外すというようなことをやっています。
この効果として、まずSLAの維持ができるということがあります。自動的にこれを判断してくれるので、故障を早期に検出して、順番に修理に出すことができます。ですので、いきなりその台数が減ってしまうというようなことがなくて、性能を保つということができています。
もう1つ、これまでと同じように運用工数の削減ができます。人の手でサービスアウトをするという作業が減ったりだとか、あとは、この不良ノードに起因した問い合わせ対応が少なくなる、といったような効果が期待されます。
これらの運用の自動化全体を振り返ってみてどうだったかというと、私は自動化するツールを開発するチームにいて、開発環境、ステージング、そして本番と、運用チームの人と協力してリリースしていくんですけども。やっぱり運用チームが直面している課題というのが、受け入れられやすかったです。
どうしても開発していく中で、あれもこれもだったりとか、「こういうケースもあるよね」って未来のことを考えたり、あとは過去起きた問題に対してだとか、そういったものもやるんですけれども、それらよりもやはり現在の課題っていうのが受け入れられやすくて、そういうところから徐々に歩調を合わせていくのが良さそうだな、と感じています。
「まずはスモールスタートから」と書いているのは、いきなり大量に自動化するというと、やはり不安に感じられるんですね。ですので、できるだけ小さいケースで自動化の効果が確認できるところに持っていってから、徐々に機能を拡大していくといい感じに働いています。
また、あって便利だったなと思っているのが、リードオンリーモードです。先ほどの自動のサービスアウトとかだと、いきなりそれを本番でやると怖いというのもありますし。
とはいえ、開発環境だとかステージングの環境では起きなくて、本番の環境でしか起きてないハードウェア障害といったようなものもあるので、そこのスコアリングはするけど、サービスアウトはせずに、単にbot的に通知・速報するだけとか、そういった挙動をオンラインで変更できるようにしていたりするとけっこう便利でした。
というところで最後に、これからの成長に向けて思ってることを少しお話しさせていただきます。
まずはデータ基盤についてなんですけれども、これからもやはりデータ量というのはどんどん増加していくと考えていますし、実際そうなっています。これはHadoopに限らないんですけれど、新しくワシントン州にデータセンターを建設していて、そういったところで規模を大きくしてこれからもデータ基盤全体を運用していきます。
あとは、Erasure Codingという機能がHadoopにあるんですけれども、これを使うとデータ量を普通に単純にファイルを複製するのと比べると抑えることができるので、今後Hadoop 3.0を使用するとなってきた時に、これを使ってデータの増加に耐えられるようにしていきたいな、と思っています。
また、NameNodeの負荷対策というのを現在やっていて。Log Aggregationといって、Hadoop上で実行されたジョブのログをHDFSに書くという処理があるんですけれども、この書き込み処理があまりに同時に起きすぎて、Hadoop上で動いてるジョブによってHadoopが殺されてしまう現象が起きました。なので、今、それ専用のHadoopクラスタをつくって、そちらにオフロードするというようなことをやってます。
これも新しいHadoopのバージョンではFederationという機能があって、NameNodeが管理する領域をそれぞれ分けるといったことができます。それでわざわざ小さいHadoopクラスタ立ててオフロードするなんてことはしなくていいんじゃないかな、と期待しています。
その他に、まだまだHadoopは実際の物理的なサーバーの上で動かしていますが、コンテナ技術との連携であったり、機械学習フレームワークの導入であったり、あとはHadoopからGPUを使うといったことも、今後できるようになっていく見込みなので。そういったものの導入をしたりなど、いろいろありますけれども、どんどんこのデータ基盤も拡大していくかな、と感じています。
また、運用体制としてもスケーラブルにしていかないといけない、と今感じています。先ほど言ったように、Hadoopにせよデータ基盤にせよ、どんどんこれから大きくなっていくことが見込まれているんですが、一方で、クラスタが大きくなるからといってそれと同じだけ人が増やせるかっていうと、そんなことはないので(笑)。スケーラブルにしていかないといけないです。
これまでも自動化してきましたけど、やっぱり自動化できるものは自動化するであったりとか、あとは共通化ですね。我々のチームでは、さっきのHadoopクラスタだけではなく、他にもいくつかのHadoopクラスタを管理してるんですけど、意外と共通化できてなかったりするのでそういったところをちゃんと共通化していき、スケールするようにする必要があると感じています。
あとは、Infrastructure as Codeですね。「おまえ、今さら何言ってんだ」って感じがするかもしれないんですけども(笑)、オンプレでHadoopクラスタみたいなものを運用してると、なかなかこれができてないんです。
どうしてもサーバーの投入時期であったり、そのタイミングで運用してたメンバー、あと緊急対応で「一部のサーバーにだけこの機能をリリースします」みたいなことがあったりで、個別にサーバーごとに変更が加えられていて、もはや状態がバラバラになっちゃってます。
一度そうなってしまうと、先ほどやったような自動化でなにか変更を加えようとなった時に、不統一の状態なので「なにかがぶっ壊れてしまうかもしれない」みたいな不安感が先に来てしまい、変えることができないといった状態になります。
自動化ツールで変えられないので、人ががんばってそれに対応する、そしてまた不統一感が出てきて……という悪循環になっていくので、やはりどこかのタイミングで1回ちゃんとコード化して、変化を恐れないというか、それをくり返しデプロイすることで、恐れなくてもいいようにしていく必要があると感じてます。
ということで、取り組みの内容を少しまとめますと、我々のチームではHadoopの運用の自動化というのに取り組んでいました。バージョンアップであったり、セキュリティ対応であったり、不良ノード対応であったりといったことの自動化に取り組みました。
今後は、データ基盤と運用をよりスケーラブルにしていかないといけないと感じていて、そのために先ほど紹介したようないろんな取り組みをしています。といったところで、発表を終わらせていただきます。どうもありがとうございました。
(会場拍手)
関連タグ:
2024.12.20
日本の約10倍がん患者が殺到し、病院はキャパオーバー ジャパンハートが描く医療の未来と、カンボジアに新病院を作る理由
2024.12.19
12万通りの「資格の組み合わせ」の中で厳選された60の項目 532の資格を持つ林雄次氏の新刊『資格のかけ算』の見所
2024.12.16
32歳で成績最下位から1年でトップ営業になれた理由 売るテクニックよりも大事な「あり方」
2023.03.21
民間宇宙開発で高まる「飛行機とロケットの衝突」の危機...どうやって回避する?
PR | 2024.12.20
モンスター化したExcelが、ある日突然崩壊 昭和のガス工事会社を生まれ変わらせた、起死回生のノーコード活用術
2024.12.12
会議で発言しやすくなる「心理的安全性」を高めるには ファシリテーションがうまい人の3つの条件
2024.12.18
「社長以外みんな儲かる給与設計」にした理由 経営者たちが語る、優秀な人材集め・会社を発展させるためのヒント
2024.12.17
面接で「後輩を指導できなさそう」と思われる人の伝え方 歳を重ねるほど重視される経験の「ノウハウ化」
2024.12.13
ファシリテーターは「しゃべらないほうがいい」理由 入山章栄氏が語る、心理的安全性の高い場を作るポイント
2024.12.10
メールのラリー回数でわかる「評価されない人」の特徴 職場での評価を下げる行動5選
Climbers Startup JAPAN EXPO 2024 - 秋 -
2024.11.20 - 2024.11.21
『主体的なキャリア形成』を考える~資格のかけ算について〜
2024.12.07 - 2024.12.07
Startup CTO of the year 2024
2024.11.19 - 2024.11.19
社員の力を引き出す経営戦略〜ひとり一人が自ら成長する組織づくり〜
2024.11.20 - 2024.11.20
「確率思考」で未来を見通す 事業を成功に導く意思決定 ~エビデンス・ベースド・マーケティング思考の調査分析で事業に有効な予測手法とは~
2024.11.05 - 2024.11.05