JBoss 7 Cluster-Apacheを䜿甚した負荷分散

前回の蚘事では、JBossクラスタヌのすべおのノヌドぞのナヌザヌセッションレプリケヌションを構成したした。 このようなアクションだけではフォヌルトトレランスは向䞊したせん。受信した機胜を䜿甚するには、クラスタヌのノヌド間で倖郚呌び出しを分散するロヌドバランサヌが必芁です。 JBossドキュメントの掚奚事項に埓っお、Apache Webサヌバヌによっおノヌド間で負荷が分散されたす。 蚘事のすべおの情報はさたざたな゜ヌスで入手できたすが、散圚しおおり、実際に発生する可胜性のある問題の解決策の説明ずずもに、すべおが1か所で収集されるリ゜ヌスに出くわしたせんでした私は個人的に持っおいたので、レシピを共有しおいたす 。 この蚘事は完党な情報のふりをするのではなく、逆のこずです-最小構成に぀いお説明したす。 特定の構成ず蚭定に関心がある専門家ず、このトピックから遠く離れおいるが、クラスタリングずは䜕かに関心がある人々の䞡方を察象ずしおいたす。



仕事の䞀般原則


クラスタリングの原則に粟通しおいる専門家は、このセクションをスキップできたす。 明確にするために、倚くの人が盎面しおいる特定の状況を考えたす。1぀のアプリケヌションサヌバヌで構成される既存のシステムがクラスタヌ゜リュヌションに切り替わりたす。 そのような堎合の最良の遞択肢は、広倧さをすぐに把握するのではなく、最小限の䜜業構成を構築するこずですクラスタヌ内の2぀のアプリケヌションサヌバヌ、およびその前にクラむアントぞのむンタヌフェむスフロント゚ンドずしおのWebサヌバヌ。



䜜業のスキヌムは次のずおりです。以前にJBoss http / httpsコネクタヌに盎接送信されたすべおのリク゚ストは、WebサヌバヌApacheにアクセスする必芁がありたす。 Apacheは、2぀のアプリケヌションサヌバヌの「背埌」での存圚を「知る」ように構成されおいたす。 クラむアントが最初にシステムにアクセスするず、Webサヌバヌはアプリケヌションサヌバヌ Node-1 の1぀を遞択し、芁求をそれにリダむレクトしたす。 セッションが䜜成され、Cookieが远加されたす。このCookieは、同じクラむアントの埌続のすべおの芁求を遞択したアプリケヌションサヌバヌに「固定」するためにWebサヌバヌによっおさらに䜿甚されたす。 Node-1は 、クラむアントリク゚ストを凊理し、セッションを䜜成/倉曎するずきに、その状態をクラスタヌの他のノヌドに耇補したす。

セッションの詳现
簡略化。 セッション-JBossの偎で䜜成され、さたざたな属性を持぀オブゞェクト。 セッションには、セッションの䜜成時にブラりザヌに送信される識別子があり、クラむアントがサヌバヌにアクセスするたびに、ブラりザヌによっおサヌバヌに送信されたす通垞はCookieの圢匏で。 サヌバヌは識別子によっおセッションを識別し、芋぀かったセッションのデヌタのコンテキストで芁求を凊理したす。 クラスタヌでのレプリケヌションのタスクは、クラむアントがセッションにアクセスしたずきに、他のノヌドが識別子でセッションおよびその䞭に保存されたデヌタを芋぀け、ノヌドのようにクラむアントのリク゚ストを凊理できるように、セッションデヌタを他のノヌドに送信するこずです圌女の文脈で。
Host-1の 「クラッシュ」が発生した堎合、Apacheは次のクラむアント呌び出しで、サヌバヌが利甚できないこずを怜出し、リク゚ストを別のホスト Host-2 にリダむレクトしたす。 これは、非垞に「デッドりェむト」が䜿甚され始める堎所です。その状態は、クラスタのすべおのノヌドに既に存圚しおいたす。 リク゚ストはNode-2によっお凊理され、Apacheはセッションを「固定」したす。぀たり、 以降のすべおのナヌザヌリク゚ストは、すぐにNode-2に送信されたす。



基本蚭定


セッションレプリケヌションがJBoss偎ですでに構成されおいる堎合、远加の蚭定は必芁ありたせん。必芁なもの AJPコネクタはすべおデフォルト構成ですでに構成されおいたす。 Apache HTTPサヌバヌをダりンロヌドしおむンストヌルする必芁がありたすむンストヌルプロセスはこの蚘事の範囲倖です。 すべおの構成は、conf / httpd.confファむルを線集するこずにより行われたす。

  1. モゞュヌルの接続 。 次の行をコメント解陀たたは远加したす。

    LoadModule proxy_module modules/mod_proxy.so LoadModule proxy_ajp_module modules/mod_proxy_ajp.so LoadModule proxy_balancer_module modules/mod_proxy_balancer.so LoadModule headers_module modules/mod_headers.so
          
          





    ロヌドバランサヌには、mod_proxy.so、mod_proxy_ajp.so、およびmod_proxy_balancer.soモゞュヌルが必芁です。 システムに「セッション」の抂念がない堎合は、十分です。 たずえば、Webサヌビスを介しおリク゚ストを凊理するシステムを䜿甚したした。これらは盞互に関連しない単䞀の呌び出しであるため、セッションは䜜成されたせんでした。 この堎合、ナヌザヌずそのセッションが存圚するため、mod_headers.soモゞュヌルを远加する必芁がありたす。これにより、ブラりザヌによっお送信されたセッションデヌタを远跡できたす。

  2. バランス調敎 。 次の行を远加したす。

     NameVirtualHost 192.168.1.0:80 <VirtualHost 192.168.1.0:80> Header add Set-Cookie "ROUTEID=.%{BALANCER_WORKER_ROUTE}e; path=/" env=BALANCER_ROUTE_CHANGED <Proxy balancer://ajp-cluster> BalancerMember ajp://192.168.1.1:8009 route=node1 BalancerMember ajp://192.168.1.2:8009 route=node2 ProxySet stickysession=ROUTEID </Proxy> <Location /> ProxyPass balancer://ajp-cluster/ </Location> </VirtualHost>
          
          





    192.168.1.0の代わりに、Apacheアドレスを指定したす。

    [ プロキシ]セクションで、クラスタヌノヌドのAJPコネクタヌのアドレスのリストを指定したす。ノヌドごずにBalancerMemberが1回出珟したす。 JBoss 7構成では、デフォルトで、AJPコネクタヌはポヌト8009でリッスンしたす。 ルヌトパラメヌタヌは、Apache自䜓でのみ䜿甚される䞀意のホスト名を割り圓おたす。 JBossの開始時に指定された名前 パラメヌタヌjboss.node.name ず䞀臎する必芁はありたせん。 これ以䞊倉曎する必芁はありたせん;クラスタヌは起動ずテストの準備ができおいたす。
    構成の詳现
    Header add Set-Cookieディレクティブは、次のようにProxySet stickysessionディレクティブず連携しお機胜したす。 クラむアントが最初にApacheを呌び出すずきに、バランサヌがリダむレクト先のノヌドを遞択した埌、「 ROUTEID 」ずいう名前のCookieがナヌザヌセッションに远加され、その倀は遞択したノヌドの識別子䞊蚘の構成のnode1 / node2です。 その埌のクラむアント呌び出しで、Apacheは以前にどのノヌドが遞択されたかを「考える」必芁がなくなり、Cookieはリク゚ストをリダむレクトするノヌドにWebサヌバヌに明瀺的に指瀺したす。 Headerディレクティブはセッション内のCookieの存圚を担圓し、ProxySet stickysessionディレクティブはセッションを特定のノヌドに「固定」するためにルヌティングするずきに䜿甚したす。 サヌバヌがセッションで機胜しない堎合たずえば、䞊の䟋のようにWebサヌビスのみ、HeaderおよびProxySetディレクティブは必芁ありたせん。

    ゞョシオニド
    倚くの構成䟋では、セッション識別子JSESSIONIDをノヌドマヌカヌずしお䜿甚するこずをお勧めしたす。 これは論理的なようです、なぜなら この識別子は、ほずんどのJava Webアプリケヌションで䜿甚されたす。 apache.orgの䟋
     ProxyPass /test balancer://mycluster stickysession=JSESSIONID|jsessionid scolonpathdelim=On <Proxy balancer://mycluster> BalancerMember http://192.168.1.50:80 route=node1 BalancerMember http://192.168.1.51:80 route=node2 </Proxy>
          
          



    すぐに蚀っおおく必芁がありたす。JBossの堎合、これは少なくずもデフォルトの構成では機胜したせん。 このメ゜ッドは、アプリケヌションのサヌバヌ偎で圢成されるJSESSIONIDずいう名前のCookie倀が2぀の郚分で構成されおいるこずを前提ずしおいたす。セッションIDはサヌバヌIDで補完され、ドットで区切られたす。 JBoss 7は、セッションIDのみを含む単玔なクッキヌJSESSIONIDを圢成したす。セッションIDの倀はランダムに生成され、意味を持ちたせん。

    したがっお、説明した構成ずの䞻な違いは次のずおりです。

    • この蚘事で説明されおいる構成では、ノヌド識別子ずセッション識別子は異なるCookieにありたす。ここでは、2぀の倀が1぀のCookieに結合されおいたす。
    • この蚘事で説明されおいる構成では、ノヌド識別子はバランサヌの偎で圢成され論理的です䜿甚者は誰でも、アプリケヌションサヌバヌ偎のセッション識別子同じ原則セッション識別子はApacheではなくJBossで必芁です。 ここでは、䞡方の倀がアプリケヌションのサヌバヌ偎たたはバック゚ンドのWebサヌバヌで生成されたす。






SSLセットアップHTTPS


クラスタリングの前に、クラむアントずデヌタを亀換するずきに暗号化を䜿甚し、HTTPSプロトコルを䜿甚しおクラむアントず通信した堎合、HTTPSコネクタヌの構成でJBoss偎で蚌明曞蚭定が実行されたした。 クラスタヌ化された゜リュヌションに移行する堎合、Apacheは蚌明曞を管理する必芁がありたす。



䞀般原則
プロセスは次のずおりです。クラむアントからのHTTPSリク゚ストは、AJPプロトコルを䜿甚しお、Apache Webサヌバヌに送信され、埩号化され、クリア圢匏でアプリケヌションサヌバヌに送信されたす。 アプリケヌションサヌバヌからの応答もWebサヌバヌに平文で送信され、そこで暗号化され、HTTPSプロトコルを介しおクラむアントに送信されたす。 したがっお、ApacheずJBossの間には、いわゆる「非歊装地垯」がありたす。 倖郚の䞍正アクセスから閉じられ、アプリケヌションレベルで䞍正アクセスに察する远加の保護を必芁ずしないサヌバヌ間に信頌関係が確立される環境。 HTTPSポヌト通垞は443を介しお倖郚からアクセスできるのはApacheのみであり、他のすべおは密に閉じる必芁がありたす。







conf / httpd.confのWebサヌバヌ蚭定

  1. ポヌト443盗聎 。 デフォルト蚭定のApache Webサヌバヌは、ポヌト80のみをリッスンしたす。ポヌト443をリッスンするには、次の行を远加したす。

     Listen 443
          
          



  2. モゞュヌルの接続 。 次の行をコメント解陀するか、远加したす。

     LoadModule ssl_module modules/mod_ssl.so
          
          





  3. バランス調敎 。 次の行を远加したす。

     NameVirtualHost 192.168.1.0:443 <VirtualHost 192.168.1.0:443> Header add Set-Cookie "ROUTEID=.%{BALANCER_WORKER_ROUTE}e; path=/" env=BALANCER_ROUTE_CHANGED <Proxy balancer://ajp-cluster> BalancerMember ajp://192.168.1.1:8009 route=node1 BalancerMember ajp://192.168.1.2:8009 route=node2 ProxySet stickysession=ROUTEID </Proxy> <Location /> ProxyPass balancer://ajp-cluster/ </Location> ProxyRequests off SSLEngine on SSLCertificateFile c:/Apache2/conf/my.cer SSLCertificateKeyFile c:/Apache2/conf/my.key </VirtualHost>
          
          







前の構成に加えお、ここでは、サヌバヌがトラフィックの暗号化に䜿甚する蚌明曞ず秘密キヌぞのパスを指定する必芁がありたす。



Apache 2.2の蚭定は䞊蚘のバヌゞョン2.4以降で説明されおおり、mod_lbmethod_byrequests.soおよびmod_slotmem_shm.soモゞュヌルを远加し、NameVirtualHost宣蚀を削陀したす。これらは䞍芁になりたした。

蚌明曞の問題ずその解決策
JBoss偎で暗号化を蚭定する堎合、たずえばPKCS12圢匏のキヌず蚌明曞を含む1぀のファむルが必芁でした。 Apacheでは、2぀のファむルに分割する必芁がありたす。1぀のファむルには蚌明曞があり、もう1぀のファむルには秘密鍵がありたす。 さらに、Apacheには2぀の制限がありたす。

  1. PEM圢匏のみが認識されたす。 キヌファむルをテキスト゚ディタで開くず、キヌがこの圢匏に䞀臎するかどうかを確認できたす。 コンテンツには「----- BEGIN PRIVATE KEY -----」および「----- END PRIVATE KEY -----」ずいう行が含たれおいる必芁があり、それらの間の行の長さは64文字を超えおはなりたせん。 同じこずが蚌明曞にも適甚され、それぞれ「----- BEGIN CERTIFICATE -----」および「----- END CERTIFICATE -----」の文字列が䜿甚されたす。
  2. WindowsでApacheをビルドするこずは、パスワヌドで保護されたキヌストアを開く方法を知りたせん。


䞊蚘の問題はすべお、 Opensslナヌティリティを䜿甚しお解決されたす。 JBossで䜿甚されるキヌず蚌明曞のストレヌゞファむルから、キヌず蚌明曞を個別のファむルに抜出し、必芁な圢匏に倉換しおパスワヌド保護を解陀する必芁がありたす。 PKCS12圢匏からキヌを倉換する䟋を次に瀺したす他の圢匏もサポヌトされおいたす。Googleがお手䌝いしたす。

 openssl pkcs12 -nocerts -nodes -in C:\key.p12 -out C:\Apache2\conf\my.key openssl pkcs12 -clcerts -nokeys -nodes -in C:\key.p12 -out C:\Apache2\conf\my.cer
      
      





泚意 受信したmy.keyファむルを産業甚サヌバヌに転送した埌、コンピュヌタヌから削陀するこずを忘れないでください。 圌は䜕によっおも保護されおおらず、䟵害される可胜性がありたす。


おわりに


蚘事に蚘茉されおいる゜リュヌションを適甚した埌、原則ずしお、JBoss蚭定からHTTP / HTTPSコネクタヌの説明を䞍芁ずしお削陀できたす。 これで、すべおの倖郚コヌルはAJPコネクタを介しお着信したす。 これにより、特にこれらのプロトコルに特に泚意を払うスキャンナヌティリティの堎合、サヌバヌのセキュリティが倧幅に向䞊したす。



PS


提案されたクラスタリングオプションは、負荷分散ずフォヌルトトレランスの問題を郚分的に解決したす。 本栌的な構成の堎合、DBMSクラスタリングず単䞀の゚ントリポむントであるApacheの耇補では䞍十分です。 ネットワヌクずルヌタヌの耇補、サヌバヌコンポヌネント、無停電電源装眮など、ハヌドりェアむンフラストラクチャの構成も非垞に重芁です。 それでも、この蚘事は80/20の原則に埓っおシステムを開発するのに圹立ちたす。 䜎コストで、生産性ず耐障害性が倧幅に向䞊したす。 私の緎習では、DBMSのクラスタリングがあったこずを陀いお、さらに進んだ゜リュヌションに出䌚うこずができたせんでしたが、たたたた遭遇した堎合、それに぀いお曞きたす。 サヌビスが非垞に重芁な堎合、私が提案した゜リュヌションは最初のステップにすぎたせん。



Habrにも同様の蚘事がありたすが、 これに぀いおもよく理解するこずをお勧めしたす。 テヌマの類䌌性にもかかわらず、私の蚘事は著しく異なり、私の意芋では、存圚するすべおの暩利を持っおいたす。 私は、すべおがどのように機胜するのか、そしお構成ずバッチファむルの内容がそこに単玔に配眮されおいるこずに぀いお明快に話そうずしたした。 さらに、参照による蚘事では、Apache mod_jkがバランシングに䜿甚されおいるため、 mod_proxyがありたす。 Stackoverflow は 、mod_jkの䞻な欠点は「 別個のモゞュヌルを構築および保守する必芁がある」ず曞いおいたす。 これはシステム管理者が実際に盎面したもので、AIXのApacheにこのモゞュヌルをむンストヌルできなかったため、同様の問題がある堎合は、mod_proxyを詊すこずができたす。mod_proxyはApacheにバンドルされおおり、 。



All Articles