LVS負荷分散のセッションソリューション持続接続


1.永続接続とは何ですか.
  1.1 LVSにおいて、永続的な接続は、同一のユーザからの要求時に同一のサーバに位置することを保証するために使用される.
2.永続的な接続を使用する理由
2.1 cookie/sessionメカニズムの簡単な説明:
  Webサービス通信において、HTTP自体は無状態プロトコルであり、ユーザーの出所を識別することができない.この時、一つの問題が発生した.ユーザーが一つのウェブサイトでAページを閲覧してBページにジャンプすると、サーバーはBページが新しいユーザー要求だと思っている.あなたの前のログイン情報はすべて失われ、頭が痛い.ユーザーのセッション情報を記録するために、私たちの開発者はクライアント/サーバ側ソフトウェアにcookie/sessionメカニズムを提供し、ウェブサイトにアクセスすると、サーバ側はセッションセッション領域を確立し、cookieとこのセッションバインドを確立し、ブラウザに情報を送信します.このように、あなたのクッキーが存在し、サーバー側のセッションが存在する限り、新しいページを開くと、サーバーは依然としてあなたを知っています!
2.2 cookie/session負荷等化による問題:
  サーバはセッション/クッキーでユーザーのセッションをマークする必要があると言っていますが、問題はありません.しかし、負荷バランスをとると問題が発生します.
  ある電子商取引サイトがより多くのユーザーのアクセスを実現するために、A、Bの2台のサーバーを提供し、前にLVSの負荷バランスを取ったと仮定しています.そこで、あるユーザーはあるショッピングサイトを開き、1枚の服を選択し、ショッピングカートに加入した(この場合、背後の操作は、LVS負荷イコライザがユーザーの要求を受け入れ、選択したサーバに配布し、ユーザーに1枚の服を追加してこのセッションのセッションに記録する).このとき、ユーザが2番目のページを開き、帽子を1枚選択してカートに加入する(この場合、背後の操作は、LVS負荷イコライザがユーザの要求を受け入れ、計算を行い、選択したサーバに送信し、そのサーバがユーザに帽子を1枚追加してセッションに記録する).
  LVSは4層負荷イコライザであり、IP:Portに基づいてデータ・メッセージのみを配布できるため、同じユーザーをセッションに基づいて同じサーバーに送信することは確保できません.つまり、ユーザーは初めてAサーバーに割り当てられ、2回目はBサーバーに割り当てられた可能性があります.しかし、BサーバーにはAサーバーユーザーのセッション記録がなく、この例のユーザーは自分のカートに前の服がなく、帽子しかないことに気づいた.これは受け入れられない.上記の問題を回避するために、生産環境には一般的に3つの案があります.
  2.2.1同一ユーザからの要求を同一サーバに送信する
  2.2.2 session情報をサーバクラスタ内で共有し、各サーバはクラスタ全体のsession情報を保存する
  2.2.3 sessionストレージプールを構築し、すべてのsession情報をストレージプールに保存する
  明らかに、第1のスキームは最も簡単で、最も資源を節約しているが、持続的な接続とshアルゴリズムは第1のスキームを実現する2つの方法である.shの応用はあまり多くないので、永続的な接続との違いを紹介するだけで、他のことは話さないで、興味のある友达は自分で資料を探すことができます.
3.LVSのshアルゴリズムと永続接続:
  shアルゴリズムはすべてsource hash(ソースアドレスhash)と呼ばれ、永続接続との役割は「同じIPからの要求を同じサーバに転送する」ことであり、sessionセッションの位置決めを保証する問題である.違いは次のとおりです.
  (1)shアルゴリズム:SHアルゴリズムを用いると,SHアルゴリズムはカーネル内でハッシュテーブルを自動的に維持し,このハッシュテーブルでは要求されたソースIPアドレスごとにハッシュ計算された値をキーとし,要求されたRSのアドレスを値とする.後続のリクエストでは、各リクエストはこのハッシュ・テーブルを先に通過し、このハッシュ・テーブルにキー値がある場合、特定のRSに直接指向し、ない場合、後続のリクエストの指向性のためにキー値が新たに生成されます.しかし,この方法は時間の記録があいまい(TCPの接続時間による計算)であり,アルゴリズム自体であるためアルゴリズムから分離できず,特に理想的な方法ではない.
  (2)永続接続:この方法は,どのスケジューリング方法を用いても,永続接続機能が指定された時間範囲内であることを保証し,同じIPからの要求が常に同じRSに指向されることを実現し,複数のサービスをバインドして統一的にスケジューリングすることもできる.
 詳細には、ユーザーがdirectorに到着するように要求した場合.どのようなスケジューリング方法を使用しても、同じサービスに対する要求が、指定された時間範囲内で常に同じRSに指向されることを実現することができる.director内にはLVS永続接続テンプレートがあり、テンプレートには各リクエストのソース、スケジューリングされたRS、メンテナンス時間などが記録されているので、新しいリクエストが入ったときに、まずこのテンプレートに記録があるかどうかをチェックします(300秒などの内蔵時間制限があり、300秒に達してもユーザーがアクセスすると、永続的な接続テンプレートは2分増加し、カウントされ、順次類推され、毎回2分しか延長されません)また、記録がタイムアウトしていない場合は、その記録が指すRSを使用し、タイムアウト記録または新規要求の場合は、スケジューリングアルゴリズムに従って特定のRSにスケジューリングしてから、スケジューリングされた記録をこのテーブルに追加します.これはSHアルゴリズムと競合するものではありません.lvs永続接続は、新規要求が到達したときに、バックエンドRSの負荷状況をチェックします.これは、比較的細かいスケジューリングとセッション保持者です法.
4.LVSの3種類の持続接続方式:
  (1)PCC:クライアントごとに永続的であり、将来同じクライアントからのすべての要求は、これまでに選択されたRSに指向される.すなわち、IPが同じであれば、割り当てられたサーバは常に同じである.
  (2)PPC:ポートごとに持続する;将来同じクライアントから同じサービス(ポート)に対しての要求は、常にこの前に選択されたRSに向けられる.例えば、同じIPからのユーザが初めてクラスタにアクセスした80ポートはAサーバに割り当てられ、25番ポートはBサーバに割り当てられる.その後、このユーザが80ポートにアクセスし続けてもAサーバに割り当てられ、25番ポートはBサーバに割り当てられる.
  (3)PFMC:永続ファイアウォールタグ接続;同一クライアント対指定サービス(ポート)からの要求は、常に選択されたRSに指向するが、それは2つの無関係なポートを1つのクラスタサービスとして定義することができ、例えば、httpの80ポートとhttpの443ポートを結合して同じクラスタサービスとして定義することができ、ユーザーが初めて80ポートにアクセスしてAサーバに割り当て、2回目の443ポートにアクセスしたときもAサーバに割り当てられる.
5.LVS永続接続を定義する:
  LVSの永続接続機能は、-p timeoutオプションを使用してクラスタサービス上で定義する必要があります.
5.1 PPCを定義する:
[root@localhost ~]# ipvsadm -At 172.16.10.1:80 -s rr -p 300

  以上のコマンドは、クラスタサービスを172.16.10.1:80に追加し、使用するスケジューリングアルゴリズムはrrであり、永続接続の保持時間は300秒である.300秒を超えても要求がない場合、LVSの永続接続テンプレートを空にする.
5.2 PCCを定義する:
[root@localhost ~]# ipvsadm -A -t 192.168.1.200:0 -s rr -p 600
[root@localhost ~]# ipvsadm -a -t 192.168.1.200:0 -r 192.168.1.10 -g -w 2
[root@localhost ~]# ipvsadm -a -t 192.168.1.200:0 -r 192.168.1.20 -g -w 1

5.3 PFMCの定義:
######PNMPP                 
[root@localhost ~]# iptables -t mangle -A PREROUTING -d 192.168.1.200 -eth0 -p tcp --dport 80 -j MARK --set-mark 3
[root@localhost ~]# iptables -t mangle -A PREROUTING -d 192.168.1.200 -eth0 -p tcp --dport 443 -j MARK --set-mark 3
[root@localhost ~]# ipvsadm -A -f 3 -s rr -p 600
[root@localhost ~]# ipvsadm -a -f 3 -r 192.168.1.10 -g -w 2
[root@localhost ~]# ipvsadm -a -f 3 -r 192.168.1.20 -g -w 2