サーバ2重化
今日は珍しくシステム・プログラムの話題です。「プログラマー社長のブログ」と言っている割にほとんど技術系の話題が無いのですよねぇ・・・。
私がこれまで自作した製品は売れないものを合わせればかなりの数になるのですが、売れない(売らない?)製品にも価値はあり、その技術をベースに開発の仕事の依頼をいただいたり、他のものを作るときのサンプルになったりします。私の場合はさらに著書に紹介するなどという活用もあります。「技術アピール」と「自己満足」が製品作りにはあるのです。
さて、明日は数ある製品の中のサーバ2重化システム「PerfectHA」のデモを依頼されましたので、デモ環境の準備をしました。2重化のデモなので少なくともマシンが2台必要で、普段電源を入れていない古いマシンを引っ張り出し、セットアップして実験していたところ、片方が突然落ちるようになり、「なんで?」とそばで様子を見ていたら電源がお亡くなりになってしまったようで、他のマシンから電源だけ借用して何とかデモができる状態にできました。
「PerfectHA」は実は自分で作りたくて作ったというよりは、以前ある大きな仕事に関わっていた際に、現地のサーバが不調になり、何とかして、と言われて修復をした際に、あまりにも使っていたクラスターシステムが難解複雑で、しかもそれが原因の一つとなってなかなか起動できないというひどい目にあい、これなら自分で作ったものの方が良いな、と思ってすぐに作り、多くの拠点のサーバに入れたというのがきっかけです。明日はその方が見せたい人を連れて来てくださるという予定です。その後改良を続けながらずっと自社のファイアーウォールサーバとインターネットサーバで使い続けているものです。
大きな特徴として、ハングアップしても必ず切り替えるために、ネットワークの物理的な遮断まで行うという点があります。遮断にはいろいろな方法が選択できるのですが、とりあえずローコストに行うためにはネットワーク制御電源タップで、HUBの電源をコントロールするという方法を使っています。
多くのクラスターシステムは片系が完全に落ちたり、ソフト的な障害などの場合にはうまく切り替わるのですが、OSがハングアップした状態になるとマスターのIPアドレスを解放できず、自動では切り替わらないのです。最近はメンテナンスポートをコントロールしてサーバの電源を落とすようなものも登場していますが、ハングアップしたホストは電源を切らずにそのままの状態で、コンソールメッセージを見たりして後で調査したいものです。「PerfectHA」ではネットワークを隔離するのでハングアップしたホストはそのままの状態で保持しておけます。
サーバ2重化の仕組みはそれほど難しいものではなく、多少システム系のプログラミングができる人であれば自作できる程度の難易度で、インターンシップの学生に課題で出すようなものなのですが、同時にマスターになってしまった場合の回避策など、異常系を全て考慮するのは意外と大変です。
また、2重化で難しいのはデータの可用性と同期を考えることです。これはソフトのみで満足できない場合もあり、ハード構成も含めて検討が必要です。
シビアに可用性を要求するような金融系のシステムなどはこの程度の仕組みでは不足だと思いますが、一般的なサーバであればそれほどコストをかけずに2重化できるものです。私の経験ではお金をかなり使ってガチガチに構成したクラスターシステムほど何か起きると手が終えないという印象があります。しかも複雑な構成でもハングアップなどで意外とあっさりとお手上げになります。シンプルな方が何か起きても対処しやすく、構築も拡張もしやすいというのが私の考えです。
クラスターシステムは基本的に複数台で1つのサービスを切り替えながら運用するもので、IPアドレスなどを変えずに運用し続けるのがポイントですが、サービスによってはIPアドレスが変わっても問題ない場合があります。DHCPサーバなどはサーバのIPアドレスが変化してもそれほど影響なく運用を続けられますし、WEBサーバなどの場合は元々負荷分散装置の配下に複数台のサーバを設置するような使い方をします。そのような場合は普通のクラスターシステムとは少し違うマスター切り替えシステムのようなものがマッチします。もちろん私はそのタイプも自作していて、お客先で実運用しているものや、今度DHCPサーバと組み合わせてアプライアンス化するものなどに使う予定です。
システムプログラミングやネットワークプログラミングが好きな人は面白いシステムですので、是非自作にチャレンジしてみて欲しいと思います!