TOPIC

gooを支えるインフラ基盤の話

2015/07/09

サーバーエンジニアの山下亮です。今回はこの記事が載っているgooラボのサーバも乗っている、gooを支えるインフラ基盤の話をしたいと思います。

gooではこれまで数年に一度の割合で大規模なDC移転を行ってきました。

直近では、昨年末から今年の頭にかけて大規模なDC移転を無事に終えた所です。

今回のDC移転ではオンプレミスのサーバー数百台の上に、OpenStackを使ってプライベートクラウドを構築しました。
これにより、仮想マシンの作成からサービスインまでのリードタイムを大幅に短縮することができました。

仮想化については4~5年前から大規模に行ってきたのですが、アロケーション等の部分で手作業も多く残っていました。
特に大きな課題だったのは、新規仮想マシン作成時のIPアドレスの払い出しとその管理及び新規仮想マシン作成時に人力でリソースの空き状況や分散状況を確認して、配置する物理マシンを決定するところでした。
また、これにより急なアクセス増等の際に、サーバリソースを増強するまでに時間がかかるといった問題も発生していました。
今回OpenStackを導入したことで、まさに時間と人的稼動が多くかかっていたこれらの課題の部分を自動化でき、一掃することができました。

新しいこのインフラ基盤の構築にあたっては、パブリッククラウドを利用するという案もありました。しかし、品質やコスト等を比較し、この規模と求める品質であれば、オンプレミスでプライベートクラウドを構築するのが一番妥当であると判断しました。
プライベートクラウドの基盤ソフトウェアとしては、OpenStackを採用しました。CloudStack等とも比較しましたが、他のNTTグループの各社もコミュニティに多く参画している等の理由によりOpenStackを採用しました。

OpenStackについては、開発が進んできて、簡易に安定的に運用できるレベルになっていると思います。
とはいえ、素のOpenStackのままで自分たちの業務、環境にそのまま適用できるかというとそうでは無いと思います。
gooでも、自分たちの業務をOpenStackでどこまで出来るかの見極めが大変でした。最終的にはNTTの研究所の協力も得ながら、Horizon(Webコンソール)のソースコードに手を入れたり、OpenStack APIと連携したDNSやLDAPの独自ツールを開発したりしました。
このように、最後はどうしてもOpenStackのコードに手を入れないといけなくなると思いますので、そういった人的リソースや体制を確保できるかどうかが重要になると思います。

構成管理ツールについてはPuppetを7~8年前から使っています。
以前はOpsチームや一部のサービスでの利用でしたが、今回のDC移転を機に全面的に採用することにしました。
これまでPuppetを利用する中で出てきた課題を整理し、主にはマニフェストのツリー構造や運用ルールの整理を工夫することで、DevとOpsが共存して構成管理を行える仕組みを作り、所謂DevOpsな環境を作ることができました。ただ、そうすると、Devを含む多くのエンジニアが同じpuppetのマニフェストを触ることになるので、マニフェストが壊れていないかを確認する構文チェックツール等、運用を楽にする自作ツールも色々と作りました。
こうして構成管理方法を統一することで、サービス間でのエンジニアの移動時における立ち上がり期間の短縮や今後のDC移転等の際の稼動削減にも活かせると考えています。

監視については、これまでNagiosやZabbixを使っていましたが、今回のDC移転を機にZabbixに統一しました。
これまで手動で行ってきた監視設定や障害チケットの起票等をPuppetやRedmineとも連携することで半自動化し効率化を行っています。
Zabbixには、ノウハウが必要で、ちょっと難しいところがありますが、オートディスカバリ、LLDやuserparameter等、監視設定を自動でやったり省力化できる仕組みが備わっています。そういったものや自作ツールも組み合わせながら半自動化、省力化を行っています。
但し、この辺の仕組みについては、大量に障害チケットが起票されてしまい処理が追いつかない等、まだまだ問題があるので、今後の課題として試行錯誤しているところです。

これまで、gooを支えるインフラ基盤については、あまり外に向けて発信してこなかったのですが、今後は、自分たちが取り組んできた情報を発信していき、市場において競争力のある基盤としていくための高度化、さらにはより安心安全を提供できる監視・運用の自動化、環境整備等に取り組んでいきます。
同じような課題でお困りの皆様と情報交換できればありがたいです。

そんなgooを運営するNTTレゾナントでは、gooを支えるインフラ基盤を支えるサーバエンジニアを募集しています。
サーバエンジニア募集
募集職種一覧

一緒にDevOpsやInfrastructure as Codeの理想郷を目指しましょう!!