記事のディレクトリ
A、HAproxy 7ロードバランシング
1、HAProxyはじめに
HAProxy: フランスのウィリーTarreauは、オープンソースソフトウェアを開発した高性能TCPへの応答とHTTPロードバランサクライアント1万回の以上の同時接続です。
- 関数は、ヘルプトラブルシューティングするためにクッキーベースの永続性、コンテンツベースのスイッチング、高度なトラフィック制御過負荷保護、制御、実行時のタイトルベースのWebベースのレポートを記録する正規表現への自動フェイルオーバー、高度なログを提供するために使用されますアプリケーションやネットワーク障害やその他の機能。
- LBクラスタ:
四层:lvs, nginx(stream) ,haproxy(mode tcp)
七层:http: nginx(http), haproxy(mode http), httpd...
- ソフトウェアのロードバランシングは、一般的に二つの方法で行われます。オペレーティングシステムソフト負荷ベースの実装とソフト負荷サードパーティ製アプリケーションの実現に基づいて、
LVSは、ソフト負荷Linuxオペレーティングシステムの実装の種類に基づいて、HAProxyは、オープンソースソフトウェアに基づいており、第三の負荷アプリケーションが実装しました。
HAProxyは、高可用性、負荷分散、およびプロキシソフトウェアTCP(レイヤIV)とHTTP(7階)のアプリケーションに基づいています。
2、HAProxyは、2つの主要なプロキシモードをサポートしています
すなわち、レイヤ4 TCP(主にメールサーバ、内部サーバ通信プロトコル、等)は、4つのスライスモードにおいて、双方向フローHAProxy前方にのみ、クライアントとサーバの間です。
- これは主にIPプラスポートに基づいてIP層とTCP / UDP層のロードバランシングの流れを分析することによって達成されます。
- 唯一のTCP接続を確立します。
HTTPすなわち7層モデルは、HAProxyは、指定されたコンテンツ制御プロトコルにプロトコルを解析し、可能にすることができる、拒否、交換、追加、変更、または削除要求(リクエスト)またはレスポンス(応答)、ロードバランサは、7つのパケットもよいです知られているバックエンドサーバーを選択するために、ロードバランシングアルゴリズム、と相まってコンテンツ、「コンテンツスイッチ。」
- クライアントとバックエンドサーバとロードバランサは、それぞれ、TCPコネクションを確立し
7つのより負荷分散デバイスのためのバランスの要件を読み込み、そして確かに少ない4つのロードバランシングモードより7ロードバランシングの処理能力。
3、HAProxy機能
HAProxy 是TCP / HTTP 反向代理服务器,尤其适合于高可用性环境。
可以针对HTTP 请求添加cookie,进行路由后端服务器
可平衡负载至后端服务器,并支持持久连接
支持基于cookie 进行调度
支持所有主服务器故障切换至备用服务器
支持专用端口实现监控服务
支持不影响现有连接情况下停止接受新连接请求
可以在双向添加,修改或删除HTTP 报文首部
支持基于pattern 实现连接请求的访问控制
通过特定的URI 为授权用户提供详细的状态信息
支持http 反向代理
支持动态程序的反向代理
支持基于数据库的反向代理
4、HAProxy組成
HAProxyプロファイルは、/etc/haproxy/haproxy.cfgです文書は、プロキシと負荷分散を設定ファイルに配置されて構成された機能構成ファイルHAProxyに焦点を当てることです。HAProxyプロファイルは、4つの部分、すなわち、全体的な機能構成部、デフォルトのプロパティ設定部、フロントエンドプロキシ設定部、後部ロードバランシング構成に分割されます。
二、HAproxy、LVSとnginxの
LVSは、nginxのは、HAProxyは、現在最も広く使用されている3つのソフトウェア負荷分散ソフトウェアです。
一般的に異なる技術を使用するためのアップグレードの段階に応じてさまざまなサイトで、負荷分散のスケールを使用。特定のアプリケーションの要件を持っている特定の分析、など日常のPVなど中小のWebアプリケーションは、nginxのは完全に可能であると、以下千万であれば、機械多くは、あなたがDNSのポーリングを使用することができれば、マシンをLVSのかかる、またはそれ以上大規模なサイトや重要なサービス、およびサーバーの比較的長い時間、LVSを使用することを検討してください。
ロードバランサとしてWebフロントエンドnginxの/ HAProxy + keepalivedの、MySQLデータベースバックエンドは、LVS + keepalivedのアーキテクチャを使用して、マスター・マルチスレーブと個別の読み取りと書き込みを使用しています。現在、サイトのアーキテクチャに人気の建築ソリューション、一般的に、より合理的です。
1、LVS
LVSアーキテクチャ
LVS 架设的服务器集群系统有三个部分组成:
(1) 最前端的负载均衡层,用 Load Balancer 表示
(2) 中间的服务器集群层,用 Server Array 表示
(3) 最底端的数据共享存储层,用 Shared Storage 表示
LVSの利点
-
アンチ負荷容量は、トランスポート層で作業するのみ配布のために使用され、トラフィックは、この機能は、負荷分散ソフトウェアで消費その最強のパフォーマンス、メモリとCPUリソースを決定していないことは比較的低いです。
-
設定はかなりのconfigureに何が本当にありませんので、それは非常にヒューマンエラーの可能性を低減、接触してあまりとらない、欠点も利点である、比較的低いです。
-
LVS + keepalivedのように、その強力な抗負荷容量自体の安定した、自身の完全なデュアル冗長性、。
-
トラフィックは、LVSが唯一の要求を配布していないが、それ自体の流出することはない、これはイコライザーIOのパフォーマンスが大きな流れに影響されないようにすることです。
-
アプリケーションの幅広い範囲、トランスポート層であるためLVSの仕事、それは、http、データベース、オンラインチャットルームなどなど、ほぼすべてのアプリケーションのためのロードバランシングを行うことができますので。
LVSの欠点
- ソフトウェア自体は、正規表現の処理をサポートしていない静的および動的な分離を行うことはできません。そして今、この地域の多くのサイトでは強い需要があり、これはnginxの、HAProxy + keepalivedの利点の嘘です。
- 適用部位は、その後、LVS / DR + keepalivedのは、より比較的、nginxの/ HAProxy + keepalivedの方がはるかに簡単に言えば、実装するために複雑な比較的大きいされている場合。
2、nginxの
nginxのアーキテクチャ設計は、イベント駆動型、非同期、シングルスレッドおよび非ブロッキングに基づいて、モジュール化されています。
多重化およびイベント通知のnginxの広範な使用は、nginxの開始後、マスター工程を含む、手段のシステムでデーモンとしてバックグラウンドでN(N> = 1)ワーカープロセスを実行します。すべてのプロセスの間に主に共有メモリー・アプローチを使用するシングルスレッド(一つだけメインスレッドである)であり、プロセス間通信。
これは、外部からの信号を受信するためのプロセスを習得し、ワーカープロセスに信号を送信し、モニタジョブステータスワーカープロセス。労働者の外部要求プロセスは、労働者ごとに要求された実際の契約は独立しており、クライアントの要求との競争に等しいです。要求は、ワーカープロセスで処理することができ、ワーカープロセスが一つだけメインスレッドを持っている、それだけで、同時に一つのリクエストを処理することができます。。
nginxの利点
-
クロスプラットフォーム:nginxのは、OSのコンパイルのようにほとんどのUnix上で実行されますが、また、Windowsのポータブルバージョン
-
非常にシンプルな構成:非常に使いやすいです。同じスタイルで構成プログラムの開発、一般的な構成の神
-
ノンブロッキング、高同時接続数:50,000公式テストは同時接続をサポートすることができ、本番環境で2〜3万の同時接続を実行します
-
イベント駆動:ファイルディスクリプタモデルを用いた通信メカニズム、大規模同時接続をサポート
-
マスター/ワーカーの構造:マスター・プロセスは、一つ以上のワーカープロセスを生成します
-
メモリの消費量が少ない:大規模同時要求処理のメモリ消費量が非常に小さいです。3万同時接続には、オープン10のnginxのプロセスが消費のみ150Mメモリ(15M×10 = 150M)
-
内蔵ヘルスチェック機能:エージェントのバックエンドnginxのは、Webサーバーがダウンしている場合、フロントエンドへのアクセスには影響しません
-
保存帯域幅:サポートGZIP圧縮は、ローカルブラウザのキャッシュヘッダーヘッドを追加することができます
-
高い安定性:リバースプロキシは、ダウンタイムの確率が最小限であります
nginxの欠点 -
nginxのは、HTTP、HTTPSプロトコルやメール、小さな範囲をサポートしています。
-
バックエンドサーバーがサポートするためのヘルスチェックは、専用ポートを介して検出することウルリットルによって検出をサポートしていません。セッションが直接保有が、解決にip_hashを通じてサポートしていません。
3、HAProxy
HAProxyは、仮想ホストをサポートする、2つのプロキシモードのTCP(4)とHTTP(7)をサポートしています。
それは利点HAProxy nginxのようなクッキーを案内支持セッション保持、のようないくつかの欠点を補完することができ、支持体のバックエンドサーバの状態が指定されたURLを取得することによって検出しました。
ソフトウェアのバランスをとるだけの負荷LVS、自身と似たHAProxy;シンプルHAProxyは、並行処理上、それはnginxのに優れている、効率比nginxのから速度の点で優れた負荷分散を持つことになります。
HAProxyは、転送のバランスをとるTCPプロトコルの負荷をサポートし、ロード・バランシングがMySQLの上で読むことができ、バックエンドでのMySQLのノードが検出して負荷分散するために、あなたは、負荷分散のMySQLマスタースレーブを行うにはLVS + keepalivedのを使用することができます。
HAProxy非常に戦略をロードバランシング:ラウンドロビン(ラウンドロビン)、重量ラウンドロビン(加重ラウンドロビン)、ソース(元のアドレスが残る)、RI(要求URL)、(クッキーに基づく)RDP-クッキー。
HAPorxy短所:
(1)POP / SMTPプロトコルをサポートしていない
(2)プロトコルSPDYサポートしていない
(3)HTTPキャッシュ機能をサポートしていません。今、オープンソース・プロジェクトの多くは、多かれ少なかれHTTPキャッシュ機能を持って、LB。
(4)オーバーロード機能はまた、ソフトスタートを有しているが、構成プロセスを再起動する必要があるが、nginxのせずに滑らかで優しいreaload。
(5)マルチプロセスモードのサポートは良い十分ではありません