ネットワークは難しい!
今日はProDHCPのお客さんのところで、カスタム開発分の動きがおかしいということで、対応してきました。問題は実機を見せていただき、すぐにわかり、対策もすぐにできたのですが、正常な状態にするためにはDHCPサービスを再起動しなければならないため、担当の方と、実運用中なのでどうしようか・・・としばらく悩んだのですが、変更箇所はプログラム本体ではなく、環境関連なので、やってしまいましょうか、と作業しました。
途中、一度冗長化のマスター・スレーブを切り替えてしまいましたが、サービスを止めたのはほんの数秒で正常な状態に戻せました・・・いや、戻せたと思っていました。
しかし、お客さんのところを後にして帰社途中でメンバーから電話が入り、サービスが動いていない、ということで、慌てて途中駅でおりて電話しました。
状況を説明していただいた感じでは、サーバのプログラムもOSも問題なく動いている様子でした。これはおそらくネットワーク経路の問題だろうと考え、いろいろと経路を調べるコマンドを実行してもらいました。すると、サーバの固定IPアドレスにはクライアントから疎通するものの、サービス用の仮想IPアドレスには疎通できない、ということがわかり、可能性としては冗長化のマスター・スレーブを切り替えたことによってルーターのARPテーブルがおかしくなっているということが原因と考えられました。Gratuitous ARPをブロードキャストするコマンドを実行していただいたところサービスが復活しました。担当の方のスキルが高かったので、電話ですぐに対処できましたが、実運用システムを一時的にでも止めてしまった点は非常に反省しています。
冗長化システムでは仮想IPを切り替える際に、Gratuitous ARPをブロードキャストするようにしていますが、それがたまたま届かなかったのかも知れません。1パケットしか送出していなかったため、複数パケット送出するように変更したものを対策用に準備しました。
ネットワークの難しさは、様々な機器が連携している点です。自分のプログラムや自分のサーバだけ正しく動いていても駄目で、途中経路や他のサーバシステムも含めて正しく動かなければならないのが難しいのです。しかも今やネットワークは仕事の中で非常に重要な役割を果たしており、止まることは許されません。冗長化などは既存のネットワークの仕組みの中で無理矢理実現しているような部分も多く、ますます難しくなります。
しかし、難しいからと管理を厳しくすれば良いかといえば、そうでもなく、やってみなければ人は育ちませんし、人がやることなので、どうしてもミスや見落としも発生してしまします。実環境でやるのがまずいということもありますが、実環境と同等の検証環境はまず準備できていないことがほとんどで、検証環境があったとしても、実環境とは連携している機器が異なるなど、100%の検証はできないものです。
IT関連開発でもっとも嫌がられている分野がネットワークでしょう。ソフト開発関連でもネットワークシステムの開発は多くの人が手を出したがりません。試行錯誤が必要な点と、リスクが大きい点が嫌われるのです。私のところではそんなネットワークが好き、というメンバーが集まっていて、他社が嫌がることが多いネットワーク関連を好んでやっているので、仕事面ではやりやすいのですが、なんどやってもミスすると凹みます。。一番申し訳ないと感じるのは、お客さんの担当者の方に対してです。動いて当たり前と考えている人たちから、「なぜ止めたんだ」と責められることはまちがいありません。本当はそういう方たちが「無理です」と言わずに、「なんとかしなければ」「なんとかしたい」と考えて機転を利かせて取り組んでくださっているから、運用できているものなのですが、なかなかそのあたりは評価されず、希にミスが出たときだけ責められるものなのです。
開発や構築でサポートさせていただく我々の立場としては、ノウハウを蓄積して、担当の方が確実に安心して運用できるようにがんばるしかありません。