サーバー負荷分散

アクセスが多くなると1台のサーバーでは負荷が高すぎて通信出来なくなってしまいます。本項では複数のサーバーに処理を振り分けるサーバー負荷分散について説明します。

サーバー負荷分散の概要

 例えばWebサーバーに多数のアクセスがあった場合、1台のサーバーでは賄いきれなくなってしまいます。サーバー負荷分散はアクセスを複数のサーバーに分散させる機能です。

サーバー負荷分散1

 サーバー負荷分散の実現方法は他にもありますが、ここでは負荷分散装置を導入する場合について説明します。

 尚、サーバー負荷分散はサーバーロードバランスとも言われ、略してSLBと言われます。

負荷分散装置の動作

 パソコンからWebサーバーにアクセスする場合、DNSによりFQDNからWebサーバーのIPアドレスを調べ、そのIPアドレスに対して通信を行います。

 通常、このIPアドレスはWebサーバーのIPアドレスであるか、NATしている場合はWebサーバーのIPアドレスに1対1で対応したIPアドレスになります。

サーバー負荷分散2

 負荷分散装置を導入するとこのIPアドレスは負荷分散装置に設定し、負荷分散装置がWebサーバーの実際のIPアドレスに対して分散して通信を行うようになります。

サーバー負荷分散3

 負荷分散装置に設定するIPアドレスを仮想IPアドレスと言い、DNSにはこのアドレスを登録します。

 又、NATしている場合は変換するアドレスは仮想IPアドレスにします。NATして仮想IPアドレスを宛先とする事で負荷分散装置でサーバー負荷分散が出来ます。

振り分け方法

 負荷分散装置がWebサーバーに振り分ける方法は様々です。

 ラウンドロビンは1つ目の通信は1台目、2つ目の通信は2台目、3つ目の通信は1台目と順番に振り分ける方法です。

サーバー負荷分散4

 この他にもコネクション数が少ないサーバーに振り分ける方法、アクセスしているパソコン数が少ないサーバーに振り分ける方法等があります。

 負荷分散装置は単純にパケットを振り分けているのではありません。

 例えば3ウェイハンドシェイクの間に異なるWebサーバーにパケットが送信されると通信が成り立たなくなってしまいます。

サーバー負荷分散5

 このため、負荷分散装置はパソコンとサーバー間のコネクションを管理しており、1コネクションの間は同じサーバーに振り分けるようにしています。

 又、例えばWebサーバーにログインして利用する場合等は、コネクションが終了した次の通信であっても異なるWebサーバーに振り分けられるとそちらのWebサーバーではログインしていないため、アクセスを拒否される可能性があります。

サーバー負荷分散6

 このような場合は一定時間同じサーバーに振り分けるような仕組みが必要です。

 例えば、同じIPアドレスから通信が来たら一定時間同じサーバーに割り振るようにします。通常はこれで問題ありませんが、接続元でNAPTをしている場合等に上手くいかない可能性があります。NAPTではコネクションの度に送信元のIPアドレスが変わる可能性があるためです。

サーバー負荷分散7

 同じパソコンからの通信を同じサーバーにより確実に振り分ける方法はCookieを使う方法です。

 パソコンから通信が発生すると、サーバー、又は負荷分散装置でセッションIDを含むCookieを返します。ブラウザではCookieを返したサーバーへの通信はCookieを含めて通信するため、負荷分散装置はCookieに含まれるセッションIDを見て同じサーバーに振り分ける事が出来ます。

サーバー負荷分散8

 Cookieには有効期限を示す事も出来るため、その時間は同じサーバーに振り分けられます。

 しかし、Cookieが有効でないパソコンや携帯電話等ではこの方法は使えません。この場合はURLにセッションIDを埋め込みます。

 以下のようにURLに?がついている長いURLを見た事があると思います。

 http://example.com/index.html?jsessionid=1234567890abcghijk

 jsessionid以降がセッションIDになります。

 ログインした後に次のページを示す時にこのようなURLをサーバー、又は負荷分散装置から返信する事でパソコンはそのURLにアクセスします。負荷分散装置はURLの内、セッションIDを見て同じサーバーに割り振るようにし、Webサーバーは?より前の情報を見て該当するページを応答します。

 このように負荷分散装置はセッションを維持する機能を持っています。

 尚、一定時間同じサーバーに振り分けると書きましたが、この時間をどの位にするかは非常に重要です。

 短すぎるとユーザーがページを見ている間にタイムアウトして、次のページを見る時に違うサーバーに振り分けられる可能性があります。

サーバー負荷分散9

 逆に長すぎると多数の通信がある場合は、負荷分散装置で管理出来るセッション数を超えて管理出来なくなってしまいます。

 又、アプリケーション自体が複数台のサーバー間でログイン情報を同期して、どのサーバーに接続してもアクセスが拒否されないような作りになっている場合もあります。

サーバー負荷分散a

 このような仕組みがあればコネクション単位にサーバーを振り分けてもセッションは維持されます。

信頼性

 3台のWebサーバーに負荷分散していたとして1台が故障した場合、残りの2台だけに振り分けるように負荷分散装置はサーバーを監視する事が可能です。

 監視の方法は単純にpingで行えますが、pingに応答してもサービスがダウンしている可能性があります。例えばWebサーバーの機能を提供しているアプリケーションがダウンしてポート80番に応答しない場合等です。

 このため、ポート番号に対しても3ウェイハンドシェイクを行い、成功するとサーバーが正常であると判断する方法があります。

 又、3ウェイハンドシェイクの後、サービスに応じたコマンド、例えばhttpであればコンテンツを要求するgetコマンドに正常に応答があった場合にサーバーが正常と判断する方法もあります。

 負荷分散装置ではこのような監視を一定時間単位で行って、障害が発生したサーバーは切り離して正常なサーバーだけでサービスを継続する事が可能です。これには、残ったサーバーだけでサービスを継続出来る台数が必要なため、負荷分散対象のサーバーは余裕を持った台数にする必要があります。

サーバー負荷分散b

 サーバーを修理して応答が正常に返ってくるようになると再度振り分け対象に戻す事が出来ます。

 サーバーが複数台ある場合、このようにして信頼性の向上が図れますが、負荷分散装置が1台の場合は負荷分散装置がダウンすると全てのサービスが停止してしまいます。

 このため、負荷分散装置自体の冗長化も検討が必要です。

Webサーバー以外の負荷分散

 これまでWebサーバーへの負荷分散を示してきましたが、SMTP、pop、imap、DNS、ftp等様々なサービスでサーバー負荷分散はサポートされています。

 負荷分散装置はこれらのサービスを認識し、例えばSMTPであれば3ウェイハンドシェイクを行った後、HELLOコマンドに応答するまでを監視する等、一般的に高いレイヤーでの監視が可能です。

データの一致性

 サーバー負荷分散をして異なるサーバーに振り分けた時、アクセスするサーバーによってデータが異ならないようにする必要があります。

 一番簡単な方法は1つのサーバーのデータを他のサーバーにコピーする方法です。

サーバー負荷分散c

 これでどのサーバーにアクセスしても同じデータが参照出来ますが、サーバーの台数が増えるとコピーする手間がかかります。又、コピーするまではデータが一致せず、一致するまでタイムラグが発生してしまいます。

 このため、頻繁に書き換えがあるサーバーには不向きです。

 これを防ぐためにはNASを導入し、負荷分散対象のサーバーからNASをマウントして自分のディスクのように見せ、全てのサーバーで同じデーターが参照出来るようにします。

サーバー負荷分散d

 マウントすると、例えば/aaaディレクトリには何もファイルがない場合でも、NASを/aaaにマウントする事でNASにあるディレクトリやファイルが/aaa配下に見れるようになります。

 つまり、NASのディレクトリやファイルが/aaa配下に結合され、本来あった/aaa配下のディレクトリやファイルは見えなくなります。

サーバー負荷分散e

 NASでは複数のサーバーから同時に書き込みが発生しないよう排他制御も出来ます。従って、Webメーラーのようにメールを受信したり消したりして書き込みが発生する場合にも対応可能です。又、インターフェースが冗長化されており、2台のスイッチに接続して冗長化出来るものもあります。

 他の方法としてファイバーチャネルによりDAS接続する方法もあります。

 ファイバーチャネルは1000Base-SXや1000Base-LXと同様の光ケーブルでサーバーと接続しますが、NASとは違って排他制御が出来ません。

 このため、ストレージをマウントしているサーバーに振り分けるよう負荷分散装置で設定してActive/Standby構成にします。

サーバー負荷分散f

 負荷分散装置では信頼性で示したようにActive側の監視を行って、ダウンするとStandby側に分散を切り替える事が出来ます。但し、WebサーバーのストレージへのマウントはActive側がダウンした事を検知してStandby側でマウントする仕組みは一般的に自動化されていないため、別途仕組みを作るかアプリケーション等が必要になります。

 DAS構成では1台のサーバーしかActiveに出来ませんが、一般的にNASと比較して高速で安価です。

メンテナンス性の向上

 サーバーをメンテナンスする際、メンテナンス対象のサーバーに振り分けないようにする事も可能です。

 例えば、既に発生しているセッションはそのまま残し、これから発生するセッションはメンテナンスするサーバーに振り分けないようにすれば、そのサーバーへのアクセスはセッション維持の時間を過ぎればなくなります。

サーバー負荷分散g

 他のサーバーでサービスは継続出来るため、サービスを停止する事なくサーバーのメンテナンスが可能になりますが、故障時の切り離しと同様、残ったサーバーだけで処理可能なサーバーの台数が必要です。

 メンテナンスが完了すれば手動で振り分け対象に組み入れる事で再度振り分けされるようになります。

サイト関連1

トラブル対応「同一サブネット内で負荷分散不可
トラブル対応「URL単位の負荷分散が出来ない

キーマンズネット1

初級ネットワーク講座「ロードバランサとアドレス変換技術
  • このエントリーをはてなブックマークに追加