2012-02-22 20 views
14

मुझे चिपचिपा सत्रों के बारे में अपाचे mod_proxy_balancer के साथ कुछ समस्याएं आ रही हैं।अपाचे + टॉमकैट - चिपचिपा सत्रों और लोड संतुलन के साथ समस्याएं

हमने जावा में एक आरामदायक webservice विकसित किया है, जो टोमकैट पर चल रहा है। वास्तविक बैकएंड Auth Basic प्रमाणीकरण के साथ, Acegi सुरक्षा का उपयोग कर रहा है।

वास्तुकला है (खेद मैं एक नया उपयोगकर्ता, मैं छवियों पोस्ट नहीं कर सकते कर रहा हूँ):

 -------------------- 
    |Java Reverse Proxy| 
    -------------------- 
      | 
    -------------------- 
    |Apache load balancer| 
    --------------------    
      | 
    --------|-------- 
    |    | 
--------  --------  
|tomcat1|  |tomcat2| 
--------  --------  

हम इस "जावा रिवर्स प्रॉक्सी" विभिन्न व्यावसायिक चीजों को करने के लिए किया है। यह टोमकैट (टॉमकैट 1, टॉमकैट 2) पर बेसिक ऑथ प्रमाणीकरण भी करता है। http:?

अंतिम-उपयोगकर्ता की तरह यूआरएल कॉल /// a/b उपयोगकर्ता नाम = foo & पासवर्ड = बार & सत्र = xxx

रिवर्स प्रॉक्सी तो, अपाचे के लिए अनुरोध प्रॉक्सी साख साथ भेजने बेसिक ऑथ टोकन के रूप में।

http://<java reverse proxy domain>/service1 
http://<java reverse proxy domain>/service2 
http://<java reverse proxy domain>/service3 

केवल Service1 और Service2 Acegi के माध्यम से संरक्षित कर रहे हैं:

अंतिम-उपयोगकर्ता तीन अलग अलग यूआरएल है। सेवा 3 गुमनाम रूप से सुलभ है (यह एक आवश्यकता है)।

हम अपाचे में निम्नलिखित विन्यास लोड संतुलन को करने के लिए है: Service1 करने के लिए पहली कॉल पर

<Proxy balancer://cluster> 
    Header set Cache-Control no-cache 
    Header set Pragma no-cache 
    BalancerMember http://xxx:9671 route=server1 
    BalancerMember http://xxx:9672 route=server2 
</Proxy> 

ProxyPreserveHost On 
ProxyPass/balancer://cluster/ stickysession=JSESSIONID 
ProxyPassReverse/balancer://cluster/ stickysession=JSESSIONID 

, तो jsessionid उपयोगकर्ता के लिए दिया जाता है, और फिर वह भाग के रूप में इस सत्र जानकारी भेजता है अनुरोध (क्वेरी स्ट्रिंग, सत्र पैरामीटर में)

बैकएंड टॉमकैट्स (टोमकैट 1, टोमकैट 2) में सत्रों को बनाए रखने के लिए, जावा रिवर्स प्रॉक्सी क्वेरी स्ट्रिंग से सत्र प्राप्त करता है और इसे प्रॉक्सी टॉमकैट्स में भेजता है JSESSIONID कुकी।

सब कुछ यूआरएलएस के लिए पूरी तरह से ठीक काम करता है जो मूलभूत संरक्षित हैं। लेकिन फिर जब उपयोगकर्ता तीसरा यूआरएल (जो सार्वजनिक रूप से उपलब्ध है) को कॉल करता है, तो अपाचे लोड संतुलन को सही ढंग से निष्पादित नहीं करता है।

[Wed Feb 22 10:48:52 2012] [debug] mod_proxy_balancer.c(280): proxy: BALANCER: Found value "3FB8F8135173BBBE78E5E4BBD6F5C8FB" for stickysession JSESSIONID 
[Wed Feb 22 10:48:52 2012] [debug] mod_proxy_balancer.c(1003): proxy: Entering byrequests for BALANCER (balancer://cluster) 
[Wed Feb 22 10:48:52 2012] [debug] mod_proxy_balancer.c(1046): proxy: byrequests selected worker "http://xxx:9672" : busy 0 : lbstatus 1 

कौन सा बिल्कुल ठीक है, के रूप में अनुरोध tomcat2 को लक्षित करने के लिए है:

उदाहरण के लिए, जब मैं सेवा 1 या 2 कहते हैं, मैं निम्नलिखित अपाचे लॉग मिलता है।

लेकिन तब जब मैं service3 कहते हैं, मैं:

[Wed Feb 22 10:49:27 2012] [debug] mod_proxy_balancer.c(280): proxy: BALANCER: Found value "3FB8F8135173BBBE78E5E4BBD6F5C8FB" for stickysession JSESSIONID 
[Wed Feb 22 10:49:27 2012] [debug] mod_proxy_balancer.c(1003): proxy: Entering byrequests for BALANCER (balancer://cluster) 
[Wed Feb 22 10:49:27 2012] [debug] mod_proxy_balancer.c(1046): proxy: byrequests selected worker "http://xxx:9671" : busy 0 : lbstatus 0 

आप देख सकते हैं, भले ही jsessionid कुकी एक ही है, अपाचे गलत बिल्ला को अनुरोध भेजता है (यहाँ tomcat1)।

क्या यह तथ्य हो सकता है कि सेवा 3 के लिए यूआरएल को ऑथ बेसिक प्रमाणीकरण की आवश्यकता नहीं है, जहां सेवा 1 और सेवा 2 है?

मुझे पूरा यकीन है कि मैंने कुछ गलत किया है, लेकिन मैं लंबे समय से चारों ओर देख रहा हूं, और मैं इसे काम नहीं कर सकता।

आपकी सहायता बहुत सराहना की है।

धन्यवाद

उत्तर

5

मैं अपने jsessionid पर एक jvmRoute प्रत्यय नहीं दिख रहा। mod_proxy आपके टॉमकैट उदाहरणों में चिपचिपा सत्रों को सही तरीके से रूट करने के लिए jvmRoute का उपयोग करता है। jvmRoute अपने बिल्ला सर्वर विन्यास (जहां प्रत्येक सर्वर उदाहरण की अपनी अनूठी jvmRoute पहचानकर्ता है में घोषित किया जाता है

+0

यही सच है, उदाहरण मैं प्रदान की मैं jvmRoute भूल गया पर। लेकिन इसे server.xml में भी सेट करने से समस्या ठीक नहीं हुई। –

+0

अपने सर्वर एक्सएमएल पोस्ट करने का प्रयास करें –

0

शायद Tis में मदद मिलेगी यह एक वेब सर्वर पर मेरी config है:।।

server.xml में
<Proxy balancer://hybriscluster> 
BalancerMember ajp://tomcatServer1:8009 route=tomcat1 keepalive=On ping=5 max=200 ttl=120 
BalancerMember ajp://tomcatServer2:8009 route=tomcat2 keepalive=On ping=5 max=200 ttl=120 
ProxySet stickysession=JSESSIONID|jsessionid lbmethod=byrequests timeout=60 
</Proxy> 

कॉन्फ़िग बिल्ला सर्वर 1 के:

<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat1"}"> 
1

मैं एक ही मुद्दे का सामना करना पड़ रहा था और नीचे लाइन को संशोधित करके इसे हल -

ProxyPass /test balancer://mycluster stickysession=JSESSIONID|jsessionid scolonpathdelim=On 
<Proxy balancer://mycluster> 
BalancerMember http://192.168.1.2:80 route=node1 
BalancerMember http://192.168.1.3:80 route=node2 
</Proxy> 

ध्यान दें विन्यास scolonpathdelim = संदर्भ पर कृपया - http://httpd.apache.org/docs/2.2/mod/mod_proxy_balancer.html

संबंधित मुद्दे