2011-01-28 15 views
5

पर बंद हो जाती है मैं टीसीपी लोड संतुलन के लिए हैप्रोक्सी की कोशिश कर रहा हूं। कनेक्शन एक ही आईपी पर बंदरगाह एक्स में आते हैं, और HAPROxy तब कनेक्शन की संख्या को बनाए रखने के लिए "कम से कम" संतुलन विधि का उपयोग करके इन कनेक्शन को बैक-एंड तक बैलेंस करता है। यह उबंटू 10.04 x64 पर है।हैप्रोक्सी टीसीपी सत्र गिनती 400

मैंने कर्नेल कॉन्फ़िगरेशन में फ़ाइल-अधिकतम को 700,000 तक बदल दिया है। मैंने प्रति-प्रक्रिया उलिमिट को लगभग 400,000 तक बदल दिया है। मैंने haproxy कॉन्फ़िगरेशन में 200,000 तक maxconn चालू कर दिया है। यह इस maxconn ठीक देखने की रिपोर्ट करता है:

show info 
Name: HAProxy 
Version: 1.3.22 
Release_date: 2009/10/14 
Nbproc: 1 
Process_num: 1 
Pid: 1355 
Uptime: 0d 4h38m46s 
Uptime_sec: 16726 
Memmax_MB: 0 
Ulimit-n: 400013 
Maxsock: 400013 
Maxconn: 200000 
Maxpipes: 0 
CurrConns: 1113 
PipesUsed: 0 
PipesFree: 0 
Tasks: 1113 
Run_queue: 1 
node: XXXXX 

यह बैक-एंड सिस्टम में यह फ्रंट-एंड लोड-बैलेंस। हालांकि, जब यह प्रति बैक-एंड 400 सत्रों तक पहुंच जाता है, तो यह केवल सादा संतुलन रोकता है, और केवल अतिरिक्त कनेक्शन का निर्धारण कर रहा है। मैं इसे "smax" stat के साथ देख सकता हूं। आप देखेंगे कि प्रत्येक पर सत्र की अधिकतम संख्या 400 है, और सत्र की कुल अधिकतम संख्या 2000 है:

show stat 
# 
pxname,svname,qcur,qmax,scur,smax,slim,stot,bin,bout,dreq,dresp,ereq,econ,eresp,wretr,wredis,status,weight,act,bck,chkfail,chkdown,lastchg,downtime,qlimit,pid,iid,sid,throttle,lbtot,tracked,type,rate,rate_lim,rate_max, 
protoa,FRONTEND,,,958,2000,2000,12624,6230219,6445523,0,0,0,,,,,OPEN,,,,,,,,,1,1,0,,,,0,0,0,406, 
protoa,XXX1672,0,0,191,400,,3222,1249403,1286659,,0,,221,0,664,0,no check,1,1,0,,,,,,1,1,1,,2559,,2,0,,198, 
protoa,XXX1674,0,0,192,400,,3106,1242103,1289247,,0,,178,0,535,0,no check,1,1,0,,,,,,1,1,2,,2572,,2,0,,171, 
protoa,XXX1707,0,0,193,400,,3043,1266305,1305311,,0,,164,0,492,0,no check,1,1,0,,,,,,1,1,3,,2551,,2,0,,161, 
protoa,XXX1782,0,0,189,400,,3046,1236790,1282690,,0,,204,0,619,0,no check,1,1,0,,,,,,1,1,4,,2429,,2,0,,190, 
protoa,XXX1851,0,0,193,400,,3060,1235618,1281616,,0,,189,0,570,0,no check,1,1,0,,,,,,1,1,5,,2490,,2,0,,180, 
protoa,BACKEND,0,0,958,2000,2000,12624,6230219,6445523,0,0,,956,0,2880,0,UP,5,5,0,,0,17645,0,,1,1,0,,12601,,1,0,,406, 
protob,FRONTEND,,,4,6,2000,28,15204,15726,0,0,0,,,,,OPEN,,,,,,,,,1,2,0,,,,0,0,0,2, 
protob,XXX1672,0,0,2,2,,5,2313,2322,,0,,0,0,0,0,no check,1,1,0,,,,,,1,2,1,,5,,2,0,,1, 
protob,XXX1674,0,0,0,2,,5,3520,3803,,0,,0,0,0,0,no check,1,1,0,,,,,,1,2,2,,5,,2,0,,1, 
protob,XXX1707,0,0,0,2,,8,3303,3214,,0,,0,0,0,0,no check,1,1,0,,,,,,1,2,3,,8,,2,0,,1, 
protob,XXX1782,0,0,1,2,,5,3529,3745,,0,,0,0,0,0,no check,1,1,0,,,,,,1,2,4,,5,,2,0,,1, 
protob,XXX1851,0,0,1,1,,5,2539,2642,,0,,0,0,0,0,no check,1,1,0,,,,,,1,2,5,,5,,2,0,,1, 
protob,BACKEND,0,0,4,6,2000,28,15204,15726,0,0,,0,0,0,0,UP,5,5,0,,0,17645,0,,1,2,0,,28,,1,0,,2, 

कहाँ इस सीमा से आ रही है? मैं वास्तव में इस haproxy उदाहरण में सैकड़ों हजारों कनेक्शन को तोड़ना चाहता हूँ। (मशीन में नेटवर्क, सीपीयू और रैम रखने के लिए है)

उत्तर

10

तो, संस्करण 1.3.x के लिए स्रोत पढ़ना, मुझे पता चला है कि: दो अधिकतम हैं। एक वैश्विक अधिकतम # कनेक्शन है, कमांड लाइन पर और वैश्विक कॉन्फ़िगरेशन में maxconn के साथ सेट है। दूसरा प्रति-प्रॉक्सी अधिकतम # कनेक्शन है, कमांड लाइन पर -N के साथ सेट है, या कॉन्फ़िगरेशन में प्रति प्रॉक्सी कॉन्फ़िगर किया गया है। विशेष रूप से, आप कमांड लाइन के अलावा प्रति प्रॉक्सी डिफ़ॉल्ट अधिकतम # कनेक्शन कॉन्फ़िगर नहीं कर सकते हैं! डिफ़ॉल्ट है ... इसके लिए प्रतीक्षा करें ... 2000! इसलिए मेरी /etc/haproxy/haproxy.cfg फ़ाइल में "सुनें" अनुभागों में से प्रत्येक को "maxconn 200000" जोड़ना इस समस्या को हल करता है।

ध्यान दें कि, दस्तावेज़ीकरण बहुत अच्छे होने के बावजूद, यह समझाने का अच्छा काम नहीं करता है। विशेष रूप से, प्रलेखन पढ़ने से, मैंने सोचा कि वैश्विक maxconn प्रत्येक प्रॉक्सी पर भी लागू किया जाएगा, लेकिन ऐसा नहीं। कनेक्शन की कुल संख्या के लिए वैश्विक maxconn लागू है, लेकिन दिए गए प्रॉक्सी फ्रंट एंड के लिए स्थानीय अधिकतम कनेक्शन को स्पष्ट रूप से निर्दिष्ट किया जाना चाहिए।

+1

मुझे लगता है कि आपका उत्तर थोड़ा उलझन में है। आप कह रहे हैं "आप कमांड लाइन के अलावा प्रति प्रॉक्सी के डिफ़ॉल्ट अधिकतम # कनेक्शन को कॉन्फ़िगर नहीं कर सकते हैं" और यह भी कि ".cfg में 'सुनने' खंडों में से प्रत्येक को 'maxconn 200000' जोड़ना समस्या हल करता है", जो विरोधाभासी प्रतीत होता है । –

+0

"प्रॉक्सी" और "सुनो" अलग हैं। दो अलग अधिकतमता हैं। वह भ्रम का पूरा स्रोत था। –

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