サーバロードバランス

サーバロードバランシング（英語: Server Load balancing）は、クライアント/サーバネットワークにおいて、クライアントとサーバの間にロードバランサー（負荷分散装置）を設置し、通信アプリケーションの（TCP/UDP）ポート番号をもとに、2台以上のサーバが分散処理を行う、コンピュータシステム。 通常は、サーバはサーバ技術者、ネットワークはネットワーク技術者が相互に依存することなく構築が行われるが、サーバロードバランスにおいては、サーバ構築とネットワーク構築の高度なインテグレーションが必要となる。 サーバのスケーラビリティーが簡単に拡張でき、保守運用コストも圧縮されるので、多くのWebアプリケーションに適している。 負荷分散（英: Load balancing）とは、コンピュータネットワークにおける技法の一種であり、作業負荷を多数のコンピュータ/プロセス/その他のリソースに分散し、リソースの利用効率を高め性能を向上させる手法。一般にロードバランサと呼ばれるシステムを利用する。 ロードバランサを使うことで、サーバファームの容量を1台のサーバから徐々に増やしていくことができる。また、サーバの故障や保守によるサーバの停止の際にもサービスを続行させることができる。 外部のネットワークから見て、ロードバランサは仮想的な1台のサーバに見える。つまり、IPアドレスやポート番号は、背後にあるサーバ群の代表としてロードバランサのものだけが見える。サーバ群で動作する各種サービスは、外部からはこの仮想サーバが提供するように見える。各サービスは物理サーバのIPアドレスやポート番号を指定することで機能する。クライアントは仮想サーバに要求を送り、ロードバランサが物理サーバを選んでクライアントからの要求をそのサーバに転送する。ロードバランサは一部企業では「ディレクター（管理者）」とも呼ばれていた。ある意味で、クライアントとサーバ間の接続を管理するというロードバランサの役目をうまく言い表しているといえよう。 サービスが異なれば、ロードバランサによる仮想サーバの構成も変わってくる。基本的にはTCPとUDP上のサービスだが、仮想サーバがサポートする通信プロトコルとしては、HTTP、FTP、SSL、SSL BRIDGE、SSL TCP、NNTP、SIP、DNS などがある。 負荷分散手法とは、サーバファーム内から適切な物理サーバを選択することを管理・制御する手法である。 仮想サーバにおける持続性を設定することもでき、最初に物理サーバを選択したら、そのクライアントからの要求は同じ物理サーバに転送されるよう設定される。これは、クライアントの状態をサーバ側で管理するようなアプリケーションでは必須となるが、故障などが発生したとき問題となる。持続性機構をどう実装するかは、ロードバランサの機種によって異なる。最も典型的な手法は、状態情報を共有データベースに保持し、全ての物理サーバがそれにアクセスできるようにし、Cookieなどの小さなトークンを使って状態情報とクライアントを結びつける。 Webサーバファームでは、ロードバランサはサービスの監視も行う。サービス（サーバ）障害が発生したとき、ロードバランサは残っているサーバ群で負荷分散を続行する。仮想サーバを構成する全サーバに障害が発生すると、（もしあれば）バックアップの仮想サーバに要求を転送したり、事前に定義されたURLにリダイレクトしたりする。そのリダイレクト先は、例えばサイト保守中であることを知らせるWebページだったりする。 負荷分散されるサーバの種類としては、以下のものがある: サーバファーム キャッシュ ファイアウォール 侵入検知システム SSLオフロードまたは圧縮 コンテンツ監視サーバ（ウイルス監視、スパム監視など） 広域サーバ負荷分散(GSLB)は、地理的に離れたサーバ群を対象とした負荷分散手法である。 SSLオフロードと加速: SSLアプリケーションはWebサーバにとっては重い負担であり、特にCPU時間を消費する。そのため、SSLコネクションと非SSLコネクションを同時に処理すると、ユーザーから見て反応が悪くなったように感じられる。これに対処するため、ロードバランサにはSSLオフロードを行う機能を持つものもある。 Secure Remote Access (SSL VPN): DDoS攻撃への防御 圧縮 TCP 負荷低減 クライアント・キープアライブ TCP バッファリング 統合ロギング アプリケーションのキャッシュ化 TCP 圧縮 コンテンツのフィルタリング 優先度別キューイング コンテンツ切り替え キャッシュのリダイレクト 広域サーバ負荷分散 リンク負荷分散 最小コネクション: クライアントとのコネクション数の少ないサーバを選択する。 DNSラウンドロビン コンピュータ・クラスターを実現するソフトウェアは一般に負荷分散機能も備えていることが多い。 インターネットの大きな問題として、あるサイトに訪れる多数のユーザーによる負荷を如何に制御するかという問題がある。この問題はサイトの成長に伴って発生するスケーラビリティの問題でもある。負荷分散を実現する手法はいくつかあり、ウィキメディア財団も負荷分散を行っている。2004年6月時点で同サイトが行っている負荷分散手法は以下の組合せである。 DNSラウンドロビンにより、ページ要求を3つのSquidサーバに平等に分散させる。 Squidサーバは応答時間を測定しており、7台のWebサーバにページ要求を分散させる。さらに Squid のキャッシュにより要求の75%はWebサーバを煩わせることなく応答できる。 各WebサーバにはPHPスクリプトが動作していて、要求の種類によっていくつかのデータベースサーバに負荷を分散する。すなわち、更新要求はマスターデータベースに渡されるが、クエリは複数のスレーブデータベースに分散される。 他にもレイヤ4スイッチを使った手法や、オープンソースの負荷分散機能であるLinux Virtual Serverを使う手法がある。UNIX系での負荷分散手法としてリバースプロキシがある（HAProxy など）。適切なモジュール構成にすれば、Apache や Lighttpd などのWebサーバもリバースプロキシとしての働きをする。 負荷分散システムでは、サーバ群が健全に動作しているかを把握することが重要である。このため、各サーバにキープアライブと呼ばれるパケットを定期的に送り、応答時間を監視する。応答時間が事前に設定された時間を越える事態が予め設定された回数続くと、そのサーバはダウン状態であると判断される。この監視は通常のネットワークとは別の経路で行われることが多い。 Shortest Path Bridging (IEEE 802.1aq) Tony Bourke: Server Load Balancing, O'Reilly, ISBN 0-596-00050-2 Chandra Kopparapu: Load Balancing Servers, Firewalls & Caches, Wiley, ISBN 0-471-41550-2 Robert J. Shimonski: Windows Server 2003 Clustering & Load Balancing, Osborne McGraw-Hill, ISBN 0-07-222622-6 Jeremy Zawodny, Derek J. Balling: High Performance MySQL, O'Reilly, ISBN 0-596-00306-4 Matthew Syme, Philip Goldie: Optimizing Network Performance with Content Switching: Server, Firewall and Cache Load Balancing, Prentice Hall PTR, ISBN 0-13-101468-4 シスコシステムズ ファウンドリーネットワークス ジュニパーネットワークス アスタロ バラクーダネットワークス シトリックス・システムズ コヨーテポイントシステムズ F5ネットワークス セイコーソリューションズ（セイコープレシジョンから事業譲渡、Netwiserシリーズ） アレイ・ネットワークス 富士通（IPCOM EX LBシリーズ） Loadbalancer ノーテル ラドウェア バリオセキュア パイオリンク フォーティネット OpenBSD relayd Open Source Layer 3/4/7 load balancer XLB Open Source HTTP (Layer-7) Loadbalancer IPVS Open Source Layer-4 Loadbalancer Dynamic Load Balancing and Scheduling Load Sharing and Balancing Load Balancing in Signaling Transfer Points（独語） What Is Network Load Balancing? How does CORBA support load-balancing?