Snippets

nomeaning777 whywaita advent calendar 2016 day 20

Created by nomeaning777 last modified

whywaita Advent Calendar 2016 - Day 20

何も考えずに登録してしまったのでネタがなくて困ってます.
とりあえず,今年whyくんと一緒にやったことということで,Tokyo Westerns / MMA CTF 2nd 2016 のスコアサーバーのインフラ回りについて書いてみます.

Tokyo Westerns / MMA CTF 2016

所属しているCTFチームであるTokyo Westernsと電通大のサークルであるMMA が合同で開催したCTFです. 詳しくは,https://tokyowesterns.github.io/ctf2016/ja/ を見てください. 今年からwhyさんも運営(特にインフラ関連)に加わりました.去年はほぼ1人でスコアサーバーインフラを担当してたけど今年は複数人になってだいぶ負担が減りました.

スコアサーバーインフラの基本方針

  • Microsoft Azureの上に構築する
  • 出来るだけSaaSを利用する
  • 最終的にStorage, DB, Redis Cacheを利用
  • 開催前,開催中,開催後でスケールアップ,スケールダウン出来るようにする

構成図

今年度のスコアサーバーの構成は次のような感じでした.コンテスト開始前はスコアサーバーは1台で,コンテスト中は4台でした.

構成図

この構成はARMのテンプレートを使って1コマンドでデプロイして作成出来るようにしてありました.また,サーバーの中のアプリケーションのインストールもitamae + capistranoで簡単に出来るようにしました.

本番中は次のような編成にしていました. * アプリケーションサーバー: Standard A3インスタンス(4コア/7GB) * ログサーバー: Standard A2インスタンス(2コア / 3.5GB) * DBサーバー: Standard S2 * Redisサーバー: Standard C4 アプリケーションサーバー(スコアサーバー)は1台につき秒間100リクエスト巻けたので,それが4台あってかなり余裕がある構成になっています.

スコアサーバー

昨年度のために開発したminictfを利用しました.今年は出来るだけAzureのSaaSを使うべく,Microsoft SQL Serverへの対応や,キャッシュのMemcachedからRedis Serverへの変更などを行いました.

スコアサーバーそのものもAzure Web Appsに載せかったのですが,Ruby(Rails)には対応しておらず断念しました.

また,スコアサーバーのマシンにはwhyさんにカーネルパラメーターのチューニングをやってもらいました.

ログ収集

去年に引き続きfluentdを利用しました. 去年はテキストファイルにログを出力していましたが,今年はElasticSearchにも保存し,Kinabaからログを見れるようにしました.

まだ,ログのうち,問題回答情報などをHipchatに流すようにしました.これはコンテスト開始直前ぐらいにwhy君がやってくれました.

死活監視

図には書かれていませんが,h_otterさんにより問題系のインフラと共用でZabbixによる死活監視がありました.
Mackerelあたりも試した記憶がありますが,良い感じに動きませんでした.

コンテスト中

何も起きず,無事コンテスト終了まで安定動作しました.

データ

TODO: ここに各種データを載せる

終わりに

今年はwhyさんの協力もあり本番中はかなり安定させることができました.また来年もよろしくお願いします.

Comments (0)