「DMM.com Labo ツチノコ杯」第4回ICTトラブルシューティングコンテスト を支える技術 〜サーバ編〜


こんにちは、whywaitaです。

「DMM.com Labo ツチノコ杯」第4回ICTトラブルシューティングコンテスト にて運営委員を務めさせて頂きました!

「DMM.com Labo ツチノコ杯」第4回ICTトラブルシューティングコンテスト(以下、トラコン)では様々な機材や技術を用いた上での運営を行いました。

今回はその中で、サーバ周りの技術をご紹介したいと思います!

ansible

今回は物理ホストサーバの上に、vmware社のvSphereを構築し、その上で仮想ホストを管理していました。問題用サーバ・運営用サーバ・DMZ用サーバ・その他様々な用途のサーバが立っており、最終的には350台弱のサーバが起動していました。このホスト群を上手く操作するのはとても大変です。問題を出す直前で何らかの仕様変更が発生したり、事前にやっておくべきであった操作を完全に忘れたまま放置していた事もありました。

この問題を対処するために我々が採用していたのが、ansibleです。

今回ansibleでは、以下のような作業を行いました。(あくまで一例です!)

  • チーム毎にログインパスワードの変更
  • ntpdやiptablesなどの必要なミドルウェアのインストール
  • 参照するリポジトリを日本のミラーサーバに変更
  • 参加者が作業するサーバに対して、運営の作業ログ削除
  • DHCPにて割り振られていたIPアドレスを利用して、そのままstaticなconfigの設置

特に、「問題用ホストを問題として出せるように調整する」作業に大きな効果を発揮しました。

問題によっては1チームに3台のホストを提供していることもあり、今回参加して下さったチーム数が15チームのため、全部で45台分その問題用のホストがあることになります。このホスト群に対して同じ動作をする必要があるのですが、その際にサッと書いたansibleのplaybookを書く事で、全台に対して同じ動作をすることが保証された状態で設定の変更を反映することができました。

ホストの大量展開

また、多くのホストを操作する事が出来ても、そもそも構成を管理するホストが無ければ意味がありません。通常であれば長い時間をかけて少しずつホストが徐々に増えていくのかも知れませんが、今回のトラコンではそのような事は出来ず、一度に数十台のホストを用意する必要がありました。

その解決策として、vsphere_guestというモジュールを用いて、大量展開を行いました。これを用いる事で、特定のテンプレートを基に複数台のホストを自動で用意する機構も作成しました。

この機構により、問題用のホストを作成した後にそのホストをテンプレート化、チーム数分展開を行うことで、各チームごとに差異が発生しないまま問題を出すことが出来ました!

事前準備期間のansible

当日は複数ホストに対する操作が多かったのですが、当日までの期間には構成管理ツールとしての使い方を行っていました。

GitHub上でのPullRequest(通称PR)ベースでの開発を行うことで、一定の品質を保ったplaybookの開発を行うことが出来ました。

PRの様子
また、GitHubへのPRをトリガーとして、jenkinsを用いた自動テストを行い、その結果をslackに通知していました。これにより、テストが失敗した時のみjenkinsを確認すれば良いので大変便利でした。近年はChatOpsと呼ばれるチャット基盤とオペレーションを繋げる試みが話題ですが、その便利さには本当に驚かされます。

jenkinsの結果がslackに通知されている様子1
jenkinsの結果がslackに通知されている様子2
これらの機構を使う事により、安定かつ暖かみの無いplaybookの制作を進めることが出来ました!

playbookのオープンソース化!

最後に、トラコンの過程で出来たplaybookがどのようなものになったのか、気になりませんか?

なんと…作成したplaybookが、先日オープンソースとしてGitHub上にて公開されています!

ictsc/ictsc-playbooks

構築期間中、とある社会人の方に競技後公開する話をした所、「太っ腹すぎない?」と心配されてしまいましたが問題ありません!再利用性があるように(急いでいて出来ていない部分もありますが)制作したつもりですので、ライセンスの下ご自由にご利用ください!

まとめ

学生の身分で約350台のホストを一斉に管理することは中々無いので、今回は貴重な経験を積む事が出来ました!

これからもトラコンは続きます!大量のホスト管理に興味の出た方は、是非運営参加もご検討下さい!

«
»

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

Optionally add an image (JPEG only)