Home > まめ知識 | 開発裏話 > KeepAlivedのススメ

KeepAlivedのススメ

KeepAlivedとは

何ともいえないいい奴です。いぶし銀みたいな、安定性も高いし・・。って何の説明にもなっていないですね。KeepAlivedとは、レイヤ4ロードバランサ機能とVRRPによるフェイルオーバー機能を実装したOSSプログラムです。

簡単に言うと「アプリケーションをサーバーごとホットスタンバイで二重化・三重化できてしまうすぐれもの」です。例えば、MySQLを冗長化したり、Apacheを冗長化したり・・・。うちでも様々なところでお世話になっております。半年くらい前にPound+KeepAlivedで記事を書いたのですが、自分でもわかりにくいな・・と思ったので、今回は、KeepAlivedに焦点を当てて記事を書いてみます。

KeepAlivedでできる構成

こんな構成ができます。

KeepAlivedの仕組みについて1〜LVSについて〜

LinuxにはもともとLVS(Linux Virtual Server)というレイヤ4ロードバランサ機能を持っています。その前に、レイヤ4とは、OSI参照モデルのトランスポート層、俗に言うTCP層です。TCP層でロードバランスするということは、簡単に言うと、「IPアドレスとport番号を見て、誰に振るのか決める」みたいな感じです。

{レイヤ3ならばIP層ですので、IPアドレスまで(ルーターです。)、レイヤ2ならMACアドレスでふりわけ(所謂HUBです)します。}

また、話がそれてしまいました。KeepAlivedは、このLVSの機能を簡単に使えるようにラッピングしてくれています。どんなことができるのかと言うと、「ヴァーチャルIP(VIP)を新しく持って、そのIPのポート○○に来たパケットは、△△と、□□と、▲▲のサーバ達に振り分けよう」といった行動ができます。

ここで、勘の良い方は、「パケットをバラバラに分散させていたら、通信の連続性が保てないのじゃないか・・」なんて思いませんでしたか?。LVSはTCPヘッダまでを分析するので、ステートフル(通信の連続性)な通信が保てます。また、もちろん分散のさせかたも、ただのラウンドロビンから重み付け等までサポートしています。さらに、バックエンドのサーバーがダウンしたら、振らないなんて機能もついています。そこらのロードバランサ顔負けですね。

しかし・・LVSだけでは問題があります。「KeepAlived自体が落ちたらどうするの?」という問題も解決する力を持っています。

KeepAlivedの仕組みについて2 〜VRRPについて〜

KeepAlivedは、VRRP(ぶいあーるあーるぴー)というプロトコルで、お互い通信しあいます。この機能により、「一方のKeepAlivedが落ちたら、もう一方のKeepAlivedがマスタになって、業務を継続する」なんてことが、一瞬のうちに自動で行われます。だいたい、次のような動きです。

単純に書きましたが、マスタノードとなったKeepAlivedは、VRRPパケットを1秒おき(設定により変更可)でネットワーク上にマルチキャストアドレス宛に送信します。バックアップ(ホットスタンバイ)ノードのKeepAlivedは、このパケットが届く間は、待機しています。もし、マスタノードに障害が発生した場合は、バックアップノードにパケットが届かなくなります。3回連続で届かない場合、バックアップノードのうち、最もプライオリティ(優先度)の高いものが、「おれ、いまからマスタになるし。」というマルチキャストパケットを送出し、フェイルオーバーが行われます。

 設定によって、マスタが復旧した場合、マスタに自動フェイルバックさせるパターンと、復旧したらバックアップとしてもどるパターンを選択できます。

この機能、別に二台だけで行う機能ではありません。三台でも四台でも、同一セグメント内であれば複数台で動きます。ただし、マスタとして稼働するものは、一台だけです。(※誤解を招かないように追記します。KeepAlivedでは、グループを分けるための仮想ルーターIDというものがあります。これを利用して、同一セグメント内でも、機能別に複数のグループを作成することができます。この場合、同一セグメント内にマスタが複数稼働することになりますが、それぞれのグループ内では、マスタは一台だけです。)

KeepAlivedをインストールする

最新版は1.2.1のようです。www.keepalived.orgからダウンロードできます。ただし、もちろんソース公開です。./configure、make、make installすれば、インストールはできますが、折角なので、rpm化してservice追加してください。ソースのtarballを解凍すると、KeepAlived.spec.inという、specファイルが標準でついています。ラッキ〜。面倒臭いspecファイル記述作業が不要になりました。RPM化については、前回までの記事をご覧ください。ついでに、ipvsadm(CentならBaseレポジトリにipvsadmという名である)もインストールしておいてください。

KeepAlivedの設定について

ここから、次回の投稿とします。お楽しみに!

Comments:0

Comment Form

Trackbacks:0

Trackback URL for this entry
http://dev.tapweb.co.jp/2010/12/280/trackback
Listed below are links to weblogs that reference
KeepAlivedのススメ from tap dev blog

Home > まめ知識 | 開発裏話 > KeepAlivedのススメ

Search
Feeds

Return to page top