ICTSC8競技中に発生したトラブルの技術的な観点での解説

こんにちは。ICTSC8にて問題リーダーを務めました、中西です。

ICTSC8に参加して頂いた皆さま、本当にありがとうございました。
競技中、一部の問題が回答できない状態、及び、問題出題などに利用していたコンテストサイトにアクセスできない状況が発生しました。
ご迷惑をおかけして申し訳ありませんでした。

本エントリでは、この事象が発生した原因、及び解決に至った流れを紹介させていただきます。

発生した事象とその対処について

本大会では、問題出題用のVMや、コンテストサイトや参加者提供用のDHCPサーバなどを初めとする生活用のVMなどを収容するために、CyberAgent様から2種類のサーバ提供を頂きました。(参考: ICTSC6での記事)
以前の記事中にもある通り、こちらは既に本番運用が終了し検証用として用いられていた古いサーバでした。
実際に、IBM社のSystem x3530 M4(以下、m4)を4台、Cisco社のUCS(以下、ucs)を3台お借りしたのですが、m4の一台は我々が受け取った時点では起動しなかった物でした。
そのため、今回はm4とucsをともに3台ずつ起動させ、運用しました。

電気通信大学での準備期間、及び本番1日目までは、上記の6台体制で運用を行っており、特に問題なく動作していました。
しかし、2日目の10時過ぎごろに、突然m4の1台(m4-02)が再起動しました。直接的な原因は最終的に分かりませんでしたが、一度起動した後も何度か再起動を繰り返していたため、電源ユニットの不調を疑い、起動させていなかったm4から電源ユニットの交換を行いました。
その後は正常に起動したのですが、その後ucs3台が1台ずつ、30秒ほどのスパンを開けて再起動している事に気づきました。
この時点でマシン固有の、ハードウェア起因な障害である可能性が低いのではないかという仮説が立ち、電力的な障害の可能性が浮上しました。

会場となった電気通信大学では、一部屋に独立した系統が3つあり、事前にサーバやネットワーク機器が利用出来る電気容量を計算した上で運用していました。
上記の通り、本番1日目までは正常に動作していたので、特に問題ないという認識でしたが、トラブルが発生した後に計測してみると、驚くことに92Vほどしか出力されていませんでした。

ictsc8_92v

日本での電圧は一般的に100Vなので、出力電圧がかなり下がっていることが分かります。
サーバの起動時には一時的に消費電力が大きくなってしまうため、m4-02が再起動を繰り返したことでucs3台の動作用電圧を下回ってしまったものだと考えられます。

今回発生した問題の原因としては、25m電源ドラムに約15Aもの負荷をぶら下げ、一つのコンセント及び電源系統から給電していたことにあります。
単相2線式電源における電線の電圧降下計算式は、

電圧降下e = (35.6 * 線路長L * 電流I) / (1000 * 電線の断面積A)

で求まります。当てはめてみると、 e = (35.6 * 35 * 15) / (1000 * 2) ≒ 9.345V となり、ブレーカーからコンセントまでの電線で約9Vの降下が起きていることが分かります。
分電盤を開け、ブレーカーにマルチメータをあてて測った時は101Vでしたので、この数値はある程度正確と言えるでしょう。
(分電盤を見ると一般的な 1.6mm 600V VVF が使用されていたことから、電線の断面積は2mm^2で計算しました。教室の端にあるコンセントなので、電線もおよそ35m程と考えられます)
コンセントまででもこれだけ電圧降下した中、更にその先に25mの電源ドラムがあるので、いったいサーバに届くまでにどれだけ電圧が下がってしまっていたのでしょうか。
焦りすぎて電源ドラムのコンセント電圧を測り忘れてしまい、最終的にサーバには何Vで給電されているか、究明することができませんでした。

計算式だけで見れば、電源ドラムの電圧降下e = (35.6 * 25 * 15) / (1000 * 2) ≒ 6.675V と、考えたくもありませんが電圧90Vを割り込んでいる可能性すらあります。
即座に電源系統の変更を検討し、事前調査で判明していた教室外にある3つの電源系統(男子トイレ・女子トイレ・教室外)に分散するように再設計を行いました。
緊急的な対策でしたが、それぞれ男子トイレ・女子トイレのウォシュレットから電源を拝借することになりました。

その後は安定してサーバが起動し、OpenStackで管理していた数百台のVMも起動させた上で特に問題が発生していないことを確認し、競技再開可能と判断しました。

タイムテーブル

時間は分かる限り正確な物ですが、若干前後しています。

  • 10:10 m4-02が再起動を繰り返していることを確認
  • 10:15 他のサーバが再起動を行っていないことを確認
  • 10:20 m4-02上に存在した問題が解答不可であることをアナウンス
    • 同じ問題のVMは単一のホストにあったため、チーム間での不平等は発生していません
  • 10:40 m4-02の電源ユニット交換、起動を確認
  • 11:00 ucs 3台が全て再起動していたことを確認
    • その際、m4-02以外のm4サーバは再起動していないことを確認
  • 11:10 ラック内サーバに依存しない問題のみが解答できることをアナウンス
  • 11:30 午前の部競技終了をアナウンス
  • 11:40 冗長化構成していたネットワーク機器の縮退運転を実施
    • 動作に最低限必要な機器以外はシャットダウン
  • 11:50 電源系統の確認、及び確保を実施
  • 12:10 全ての物理サーバをシャットダウン、系統の切り替えを実施
  • 12:20 全物理サーバの再起動を確認
  • 12:25 OpenStack上のVM全台起動を確認
  • 12:30 ストレスチェックが確認できたため、13:00頃に競技再開をアナウンス
  • 13:00 午後競技再開

再発防止策

事前に電源系統の計算は行っていましたが、想定よりも大きな負荷を接続したときの電圧降下やコンセントの定格電流(15A)を超える場合を考慮していなかった事が障害に繋がりました。
今後の大会における再発防止策としては
1.クランプメータ等で任意のタイミングにおいて電流値を計測できるようにする。
2.1系統で利用する電流値上限設計値を10Aとする。(マージン50%)
3.事前検証期間中に、全てのサーバをフルパワーで回して電流値計測を行い、安全性を確認する。
4.長い電線(電源ドラム等)を利用する場合は、使用電流値と電圧降下を考慮する。
の、大きく4つになります。

今後もよりよい大会環境を構築するため、運営委員一同精進して参ります。