2012/04/01

MT4用EA実行環境構築 - インターネット障害に備えるには



さて一ヶ月前の前回は、MT4用EAを実行させる環境について書きました。今回は、その環境の中で、インターネット障害(ISP障害)が発生した時にどうやって予備用のインターネット回線に自動切換えするかについて書いてみたいと思います。

【今回の記事の大まかな流れ】
---------------------------
1.当初の構想
2.UQ-WiMAXルータの購入
3.WiMAXルータの設定
4.不要サービス停止
5.評価にあたって
6.PC⇔ハブ間LAN抜線
7.ハブ⇔TA/ルータ間のLANケーブル抜線(土日)
8.ハブ⇔TA/ルータ間のLANケーブル抜線(平日)
9.代替策を考える
10.課題
11.「ExPing」の設定
12.ISP障害発生時の対応手順
---------------------------

そもそも、本当はもっと簡単に実現できるはずだった。
それは、以下の記事で書かれている通り、OSの設定をごにょごにょいじればできたハズ。

【当初の構想】
-----------------------
以下のOSの動作を利用し、2つのNIC(ネットワーク・インタフェース・カード)の優先順位(メトリック)に差をつけることで、片方が通信不可になればOSの機能で自動的にもうひとつのNICに切替るはず。

・「TCP/IP for Windows NT の停止ゲートウェイ検出アルゴリズムの更新プログラム」 
-----------------------

前回の記事に書いたとおり、予備用のISPはUQ-WiMAXに新たに加入し評価することになる。
で、UQ-WiMAX加入/ルータ購入にはお金がかかるので、一旦有線LANと無線LANを両方つないで、切替るかどうかを暫定的に確認。
ゲートウェイが同じになってしまうので、実際とは異なる状況とはいえ、優先順位が機能している事は解った。
#実はちょっとヘンな動きしたけど、本番では問題にならない挙動なので、問題なしとした。

【UQ-WiMAXルータの購入】
-------------------
構想としては、UQ-WiMAXのステッププランに加入して、月額380円の固定費で予備回線を用意するという魂胆。
 
本当は、UQ1dayにして月額コストも削減したかったけど、UQ1Dayで実際に通信を開始するためには、手動操作が必要とのこと。今回のネットワーク自動切換えには残念ながら利用できず、泣く泣く月額380円を払う事に。

そして、当然ながら世の中そんな甘くなく、OSから勝手に出て行くパケットやら、WiMAXルータそのものが基地局との回線維持のための制御系パケット送受信するので、その意図せず送受信されるパケット量が380円以内に収まるかどうか。

あと、某電気屋で購入すると、フラット・プランで加入するとWiMAXルータが実質無料。
でも30日以内にステップ・プランに変更すると、ペナルティが発生するけど、最初からステップ・プランでWiMAXルータを購入するのと比較しても、実はお得。

そして、フラットプランの支払いは月末決済での日割り計算の支払いなので、試験1週間を見込んで、月末の1wk前にUQ-WiMAXルータを購入し、即日ステッププランに変更(変更後プラン適用は翌月から)。
-------------------

さて、事前にUQ-WiMAXのサポートから、ルータ自体がパケット送受信するケースを教えてもらったので、少しでも送受信パケット量を減らすために、WiMAXルータの設定を変更した。

【WiMAXルータの設定】
-----------------------
1.ECO設定:ロングライフ充電 使用する
2.自動省電力設定: 5分→0分
3.メンテナンス/ファームウェア更新 更新方法:自動更新 → ローカルファイル指定
4.パケットフィルタエントリで、ICMPパケット送信破棄を追加
-----------------------

次は、今度はOSが勝手に通信するパケットを抑制。
TCP接続に関しては、メインのNIC経由で1回接続してしまえば、WiMAX側にパケットが流れる事は無い。
でも、UDPに関してはどうなるか解らないので、コマンドプロンプトから「netstat -anb」で、利用されているUDPポートを探して、該当ポートを利用しているサービスを、片っ端から停止。ICMPに関しては、WiMAXルータで破棄する事で対処。

【不要サービス停止】
-----------------------
●調査で参考にしたページ
 ・VAIO固有:VCSW.exe
  VAIO の VCSW.exe
  
●停止したサービス 
・DHCP Client
・Distributed Link Tracking Client
・IPSEC Services
・Messenger
・Server
・SSDP Discovery Service
・Windows Image Acquisition (WIA)
・Windows Time
-----------------------

【評価にあたって】
-----------------------
ちなみに今回のISP切替、擬似障害の発生のさせ方にポイントがあります。
それは、本番構成をテスト用に変更し、PCとハブ間のLANケーブルを抜線するのではなく、HUBとTA/ルータ間のケーブルを抜線すること。抜線箇所を絵にすると以下の様な感じ。

つまり以下の図の様に、PCとハブ間のLANケーブルを抜線すると、通電されなくなるので、PCのOSで該当NICが使えなくなったという事が直ぐに判断できる。なので「該当NIC使用不可」という状態で安定するので、NIC切替がスムーズされてしまう。つまり実際のISP障害発生時の挙動と異なる。

でも、HUBとTA/ルータ間の場合、PCから見るとSWまでは通電しているので「NICは有効」とOSに判断されたままになり、その後、前述で紹介した記事のメカニズムが動いてISP障害発生時と似た挙動でNICの切替ができるハズ。

本来は、SWを介さずにPCをTA/ルータに有線LANで直結する構成なんだけど、我が家でTA/ルータの外部とのケーブルを抜線すると、TVは映らなくなるし、電話も繋がらなくなる。なので、テスト用の暫定構成として、トレード用PCを一旦ハブに結線して、ハブ経由でTA/ルータにつなげたという次第。
-----------------------

という事で、暫定ネットワーク構成で擬似ISP障害試験開始!!

まずは景気づけに多分素直に成功するであろう、PC⇔ハブ間LAN抜線。

【PC⇔ハブ間LAN抜線】
-----------------
●確認内容
 MT4が再ログインされた事を確認
 LiveMessengerが再ログインされた事を確認
 TeamViewerで接続できる事を確認(上記再ログイン確認後実施)

 うんうん。素直に48秒で上手く切替った! 思ったよりも早い!
-----------------

さて、ここからが本格的な評価!
つまり、SW⇔TA/ルータ間のLANケーブル抜線試験!

【ハブ⇔TA/ルータ間のLANケーブル抜線(土日)】
-----------------
まずは、マーケットが閉まっている土日に実施。MT4自体は4分弱で切替る模様。
15:28:38 SW⇔TA/ルータ間のLANケーブル抜線
15:29:59 MSN切断検出
15:30:19 MT4回線不通検出
15:30:35 MT4回線不通の旨ログ出力
15:32:19 MT4ログイン開始(データコネクト失敗)
15:32:35 MSNログイン
15:33:28 TeamViwer接続確認
-----------------

さて、ついにマーケットが開いている平日に実施。

【ハブ⇔TA/ルータ間のLANケーブル抜線(平日)】
-----------------
詳細ログは割愛するけど、まずMT4の回線切替に20分程度かかる。

しかも、切替ってから1.5H後ぐらいに通信障害が30分発生。
その後、20分後約6分の通信障害。
さらにその後、1時間33分後に15分間の通信障害。
さらにその後、2時間19分後に43分間通信障害発生。

なぜそんなに挙動が変わる。。。。

どうも勝手にデフォルトゲートウェイが抜線した側のNIC側に勝手に切り戻ってしまう事象が度々発生していたみたい。色々試行錯誤するも、事態は変わらず。



使い物になるかぁ!!!!

-----------------



まずい!

まずいじゃないか!!

試験がUQ-WiMAX加入月末を越えてしまったから、

1ヶ月分のパケット代が余計にかかるやんけ!






いやいや、そんなセコイ話じゃなくて、









そもそもの構想が破綻してるやんけ!!

UQ-WiMAX加入に金かかってるんやぞ!! もう通信代も発生してるんやぞ!!



という事で、OSのデフォルト機能を用いた切替は挫折。

【代替策を考える】
---------------------
ここで登場するのが前回記事にも登場した、「ExPing」というフリーソフト。
設定した通信先(IPアドレス)にpingを定期的に送信して、指定回数以上NGだったら外部プログラムを起動させる事ができる。

なのでまずは、デフォルトゲートウェイを変更するバッチ・ファイルを作成。
ExPing」の設定で、ping(※)が一定回数以上連続NGであれば、前述のバッチ・ファイルを起動する事で、通信経路を切り替える事にした。
※ping : 通信したい相手と通信が可能か確認するコマンド。

●バッチファイル(起動する外部プログラム)の中身
・「GwToWiMAX.bat」: 通信経路をWiMAX側に切り替え、切り替えた旨をメールする
route add 0.0.0.0 mask 0.0.0.0 192.168.0.1
route change 0.0.0.0 mask 0.0.0.0 192.168.0.1
"D:\Program Files\WinMailCmd\WinMailCmd.exe" [送信先メールアドレス] , , [[EX_PING]][[CRITICAL]] Change to WiMAX, [[EX_PING]][[CRITICAL]] Change to WiMAX
・「GwToFlets.bat」: 通信経路を通常要に切り替える
route add 0.0.0.0 mask 0.0.0.0 192.168.1.1
route change 0.0.0.0 mask 0.0.0.0 192.168.1.1
pause
・「RoutePrint.bat」 : ルーティング情報を表示する
route print
pause
・「NetStatABN.bat」 : 通信状況を表示する
netstat -abn
pause
---------------------

ここで新方式での課題を整理。

【課題】
----------------------
1.どれぐらいの頻度/間隔でpingを行い、何回連続NGでNICを切り替えるかを決める必要がある
  
  ●考慮ポイント
   ・WiMAXに切替ると、パケット量をほぼ満額(4,980円)分まで使いきってしまう。
    短時間の通信障害や間欠障害では切替たくない。
   ・メインで使用するISPのTA/ルータの障害ログを確認してみた。
    実はちょくちょく通信断が発生している。発生している障害時間は長短様々。
  
  ●検討結果
   ある程度切替を抑止できる時間として、5分間の連続障害で切替要の障害と判定する事にした。
   間欠障害で切替ってしまわない様に、1秒間隔で3回というセットを5分間隔。
   なので、6回連続のping失敗でISP障害発生と判断する事にした。

2.MT4のFX業者側のサーバにpingできない(※)ので、ping先のIPアドレスを決めないといけない。
  検出したいのはISP障害。googleとかyahooとかの著名サーバをあて先にする事も考えたけど、
  googleやyahooの障害でNW切替が発生するのもおかしい話。
  なので、以下の様にTA/ルータが直接接続している基地局のIPアドレスにする事にした。
  
※セキュリティ観点で意図的にpingを受け付けない様にしているのだと思う
----------------------

で、上記検討結果を踏まえた具体的な「ExPing」の設定は以下。

【「ExPing」の設定】
-------------------
●基本設定
 ・繰り返し回数:3回
 ・実行間隔:1000ミリ秒
 ・定期的に実行する:チェック → 5分間隔
●NG時設定
 ・トレイアイコンを変化させる:チェック
 ・ポップアップメッセージを表示:チェック
 ・外部プログラムを起動:チェック
  プログラム:cmd
  オプション:/C "バッチファイル名(フルパス)"
  作業ディレクトリ:バッチファイル格納ディレクトリ
 ・レスポンス遅延時にNG処理を実行する:オフ
 ・一度通知したアドレスは2回目以降通知しない:オフ
 ・NGが指定回数に達するまで、通知しない
 ・6回連続NGで切替 / 連続したNGのみカウントする:チェック
 ・「通知しない」設定は定期実行ごとに有効:オフ
-------------------

実際の切替は設定通り5分で完了する事は確認し、メールで通知される事も確認。
次にすることは、外出時に障害が発生した時を想定したリハーサル。リハーサルをするには、障害発生時の手順書を作成する必要がある。

「自動切換えするんだから手順なんていらないんじゃないの?」

という素朴な疑問もあるかと思うのですが、これが違うのです。

まず、本当に切替が成功し、MT4が正常に動作しているか確認する必要がある。
もし切替が不完全でMT4が動作していなければ手動復旧させる必要がある。
そして、UQ-WiMAXで長時間トレード継続させるのはエアーという事もありいささか不安。
つまり、メインのISPが復旧したら、ISP復旧確認後、元に切り戻したい。

以下は、MT4用EA開発用共通部品「ahfw」MT4障害監視システム「ahfw_hc」を利用する前提で作った手順書。

【ISP障害発生時の対応手順】
-------------------
手順検討で気をつけないといけないのは、問題切り分けを行う手順を明確化する事と、切り戻しの時。一歩間違えるとせっかく用意した2系統のISP両方が使えなくなってしまわな様に注意。

●障害発生時
 1.メール「[[EX_PING]][[CRITICAL]] Change to WiMAX」受信
   及びメール「[[AHFW_HC]][[INFO]][DEMO][FOREX.com Japan][TEST1](AHFW_HC) Connection 
   was opened.」受信
 2.myfxbookの更新状態を確認し、更新が15分以内であればOK.15分以上経過していた場合は、
   以下に進む。
 3.TeamViwerでログイン。成功すればMT4のログイン状態/Publisher状況確認。
   また、TAにログインしISP接続状態を確認する。ログイン失敗時は、次に進む。
 4.MSNのログイン状態を確認する。ログイン中であればしばらく待ち、再度上記「3.」
   から繰り返す。20分経過してもログインされていなければ、次に進む。
 5.バックアップ用PCのTeamViwerにログインを試みる。成功時はそこからUltraVNC経由
   でトレード用PCにログイン。WiMAX切替バッチ実行等により復旧作業を行う。
 6.通信正常にも関わらずMT4がログインできていない場合は、FX業者に問い合わせる。
 7.ISP障害であった場合は、障害情報HPを確認する。記載がなければ自宅に電話し、
   つながるかどうかで問題切り分けを行い、「フレッツ光」/「ぷらら」に障害調査を依頼する。

●障害復旧確認
 1.通信障害が公式HPで公表されていた場合は、復旧の旨の掲載を待つ。
 2.通信障害が公式HPで公表されていなかった場合は、調査依頼結果を待つ。
 3.復旧した事をISP業者から回答得た場合は、TeamViwerでログイン。
   TAにログインして接続状態を確認する。

●切り戻し手順
 1.TeamViwerで予備機にログイン。
 2.IEを起動し有線ISPが動作することを確認する
 3.予備PCからUltraVNCでメインPCにログインする
 4.「フレッツ用ルータ」にログインし、接続状態が正常である事を確認
   トップページ > 情報 > 現在の状態 で接続先IPが「XX.XX.XX.XX」から変更されているか確認し、
   変更されていれば「ExPing」の設定を新IPアドレスに変更する。
 5.「GwToFlets.bat」を起動
 6.「RoutePrint.bat」を起動し、デフォルトゲートウェイが「192.168.1.1」である事を確認
 7.「ExPing」がOK応答した事を確認
 8.「UQ-WiMAX」アイコンをクリックし、プロパティから一旦「無効化」する
 9.10分経過後、再度TeamViwerにログイン
 10.「NetStatABN.bat」を起動し、TeamViwerセッションが切替っている事を確認
 11.「UQ-WiMAX」アイコンをクリックし、WiMAX側を再度有効化する
-------------------

この手順を、Evernoteに格納しておいて、外出先でスマホからEvernote上の手順書を見ながら処置をしていく。そして、各サービスに問合せしたり障害状況を確認するために、スマホに各サービスへの問合せ窓口とか、障害情報掲載ホームページのURLを事前登録しておく。

さて、実際にスマホ+3G回線で、上記手順を元に外出している事を前提としたリハーサル開始!!
リハーサルは、障害発生から、復旧確認と切り戻しまで。

【NW障害リハーサル結果】
-------------------
以下、リハーサル実施結果
14:40 SW⇔TA/ルータ間のLANケーブル抜線
14:41 異常音声通知
14:46 WiMAX切替メール受信
15:01 障害発生時手順完了
15:02 SW⇔TA/ルータ間のLANケーブル結線
15:05 正常確認完了
15:09 切り戻し作業開始
15:19 WiMAXルータ無効化まで実施
15:33 切り戻し作業完了
●結果概略
NW切替に5分。NW切替メール受信してから正常性確認完まで19分。切り戻し作業24分。結構スマホの電池が減った。
-------------------





疲れちゃった。。。




幸いな事に本番開始前に、本当にISPのメンテナンスによりNW切替が発生。
無事に自動切換えができた事を確認できた!




念のためですが、





これはFXのブログです。




そして、「FXシステムトレード初心者奮闘記」は、MT4用EA実行環境構築で、MT4誤操作対策に続くのでした。
#今ライブ口座で動作中のEA君は当初資金から-1.84%DD中。。

0 件のコメント:

コメントを投稿