WEB开发网      濠电姷鏁告慨鐑藉极閸涘﹥鍙忛柣鎴f閺嬩線鏌涘☉姗堝姛缂佺娀绠栭弻宥堫檨闁告挻姘ㄩ幑銏犫槈濞嗘劕顎撻梺鍛婂姇瀵爼骞栭幇顔炬/闁告挆鍕畬闂佸疇顫夐崹鍧楀箖閳哄啠鍋撻崷顓炐㈡い銉︾箞濮婂搫效閸パ€鍋撳Δ鍛;闁规崘顕ф闂佸憡娲﹂崹鎵不濞戙垺鐓曟い鎰剁稻缁€鍐┿亜鎼达紕效婵﹨娅g划娆忊枎閹冨闂備礁鎽滄慨鐢稿礉濞嗘劒绻嗛柣銏⑶圭粈瀣亜閺嶃劏澹橀柛鐐姂濮婃椽妫冨ù銈嗙⊕閹峰懘骞撻幒宥咁棜闂備礁婀遍崕銈夈€冮崱娑樼厱闁圭儤顨嗛悡鏇㈡煛閸ャ儱濡煎ù婊勭矋閵囧嫯绠涢敐鍛睄闂佸搫澶囬埀顒€纾弳鍡涙倵閿濆骸澧伴柡鍡欏█閺屟勫濞嗘垵鍩岄梺闈涙鐢帡锝炲┑瀣亗閹艰揪绲奸悽鑽ょ磽娴h娈曢柛銊ョ仢椤繒绱掑Ο璇差€撶紓浣圭☉椤戝懎鈻撻鐐╂斀妞ゆ梹鏋婚崗顒傜磼閻樿櫕宕岄柕鍡曠椤繈骞囨担鍏夋瀸濠电姷鏁告慨顓㈠磻閹捐秮褰掓晲閸モ斂鈧﹪鏌¢埀顒佺鐎n偆鍘藉┑鈽嗗灡椤戞瑩宕电€n兘鍋撶憴鍕仩闁稿氦绮鹃悘鍐⒑缂佹◤顏勵嚕閸洖鐤柣鎰暩绾惧ジ鏌涚仦鐐殤閺佸牓鎮楃憴鍕缂侇喖绻樿棟閻庨潧鎽滃Λ顖炴煙椤栧棔绀佹禒顕€鎮楀▓鍨灈闁绘牜鍘ч悾鐑芥偂鎼存ɑ顫嶅┑鈽嗗灟鐠€锕傛倵瀹曞洨纾介柛灞剧懅閸斿秵銇勯妸銉︻棞闁伙絾绻堥獮鏍ㄦ媴濮濆本鎲伴梻浣虹帛濡啴藟閹捐姹查悗锝庡枟閻撶喐淇婇妶鍌氫壕闂佺粯顨呭Λ妤呭煝閹炬緞鏃堝川椤旇瀚奸梺鑽ゅТ濞茬娀鍩€椤掑啯鐝柣蹇婂亾闂傚倷绀侀幖顐﹀箠閹邦厽鍙忛柟缁㈠枟閸嬧晠鏌i妶搴$仜濞存粌缍婇弻鐔兼倻濡偐鐣洪梺鍝勬噺缁诲牆顫忓ú顏咁棃婵炴垶鑹鹃。鍝勨攽閳藉棗浜濋柣鐔叉櫊閵嗕礁鈻庨幒鏃傛澑闂佸搫鍟崐濠氭儊閸儲鈷戞慨鐟版搐閻忓弶绻涙担鍐插椤╃兘鏌ㄩ弴鐐测偓褰掓偂閺囥垺鐓忓┑鐐茬仢閸斻倝鏌涢埡瀣ɑ妞ゃ劊鍎甸幃娆撳级閹存繍娼氭俊銈囧Х閸嬬偤鏁冮姀銈冣偓浣糕枎閹炬潙娈愰梺鍐叉惈椤戝洭鐛姀銈嗏拻闁稿本鐟︾粊鐗堛亜椤愩埄妲搁柣锝呭槻铻i柤娴嬫櫇閻撳顪冮妶鍡橆梿闁跨喆鍎茬粋宥堛亹閹烘挾鍘甸梺缁樺灦钃遍悘蹇e幖闇夋繝濠傚暟缁夌儤鎱ㄦ繝鍛仩缂佽鲸甯掕灒闁惧繘鈧稒顢橀梻鍌欑劍鐎笛兠哄澶婄柧婵炴垶绮庢禍閬嶆⒒娴e憡鍟炴繛璇х畵瀹曞綊鏌嗗鍛幈闂佺鎻梽鍕偂濞嗘挻鐓犳繛鏉戭儐濞呭懎霉閻樺磭鐭婇柍瑙勫灴閸ㄩ箖鎮欓挊澶夊垝闂備浇顕栭崰妤呫€冮崨鏉戠叀濠㈣埖鍔曠粻鎶芥煙閹屽殶鐟滄澘娲ㄧ槐鎾诲磼濞嗘垼绐楅梺鍝ュУ閻楃娀銆侀弽顓炲窛闁圭⒈鍘介弲锝夋⒑缁嬭法绠抽柛妯犲懏顐介柣鎰節缁诲棙銇勯弽銊х煂閻㈩垱绋掔换娑㈠川椤撶喎鏋犲┑顔硷功缁垶骞忛崨瀛樺仭闂侇叏绠戝▓婵堢磽閸屾瑦绁版い鏇嗗洤纾归柛顭戝櫘閸ゆ洜绱撴担璐細缂佲檧鍋撻梻浣规偠閸庮垶宕濆鍛瀺闁搞儺鍓氶埛鎴犵磼鐎n偄顕滄繝鈧幍顔剧<閻庯綆鍋呭畷宀€鈧娲忛崹浠嬪箖娴犲宸濆┑鐘插楠炴姊洪悷鏉挎倯闁伙綆浜畷瑙勭節濮橆剛鍘愰梺鍝勬储閸ㄦ椽鎮¢妷锔藉弿婵☆垰鐏濋悡鎰版煟閹捐泛鏋涢柣鎿冨亰瀹曞爼濡烽妷銉バ戠紓鍌欑椤戝牆鐣烽悽鍨潟闁圭儤姊荤壕鍏间繆椤栨繂浜归柣锝堟缁辨挻鎷呴搹鐟扮缂備浇顕ч悧鍡涙偩瀹勯偊娼ㄩ柍褜鍓氭穱濠傤潰瀹€濠冃ㄧ紓鍌欐祰妞村摜鎹㈤崼婵愭綎缂備焦蓱婵绱掑☉姗嗗剰婵炲牊鍔欏娲箹閻愭彃顬嗛梺鍛婎殔閸熷潡鎮鹃悜绛嬫晬闁绘劘灏欐鍥⒑閻熼偊鍤熷┑顕€娼ч埢鎾淬偅閸愨斁鎷虹紓鍌欑劍钃遍柍閿嬪浮閺屽秴鐣¢幍顔尖叺閻庢鍣崑濠傜暦閹烘鍊烽悗鐢登归獮鍫ユ⒒娴g懓鈻曢柡渚囧櫍瀹曟垿骞樼紒妯煎幐闂佸憡渚楅崰姘跺箠閸涱喕绻嗛柛娆忣槸婵洭鎽堕敐澶嬪仩婵炴垶甯掓晶鏌ユ煛閸屾浜鹃梻鍌氬€烽懗鍓佸垝椤栫偛绀夐柡鍥╁€i悢鍝ョ瘈闁搞儜鍐╁劒闂備胶绮弻銊╂儍濠靛缁╅柤鎭掑劘娴滄粓鏌¢崘銊﹀妞ゃ儱顦甸弻娑㈠棘鐠囨祴鍋撳┑瀣闁割偅娲橀崐鐑芥煟閹寸偍缂氶柛姗€浜跺娲传閸曨剙鍋嶉梺鍛婃煥閺堫剟寮查崼鏇ㄦ晬闁绘劕顕崢鍗炩攽閻愬弶顥滅紒缁樺笧缁粯绻濆顓犲幐闁诲繒鍋熼弲顐f櫏闁诲氦顫夊ú锕傚磻婵犲倻鏆﹂柣鏃傗拡閺佸棝鏌嶈閸撴瑩鍩㈠澶嬫櫜闁搞儮鏅濋敍婵囩箾鏉堝墽绋荤憸鏉垮暞缁傚秹鎮欓鍌滅槇闂侀潧楠忕徊鍓ф兜閻愵兙浜滈柟瀛樼箖瀹告繄绱掗鍓у笡闁靛牞缍佸畷姗€鍩¢崘銊ョ闂備浇顕х€涒晝绮欓幒鎴犲箵閻犳亽鍔庢稉宥嗘叏濡炶浜鹃梺鍝勮閸斿矂鍩ユ径濞㈢喐寰勯惂鍝ョɑ闁靛洤瀚版俊鎼佹晲閸涱厼袝闂備浇顕栭崰妤呮偡閳哄懌鈧線寮崼婵堫槹濡炪倖鎸荤换鍕矆閸曨垱鈷掗柛灞剧懄缁佺増銇勯弴鐔哄⒌鐎规洑鍗冲浠嬵敃閵堝浂妲稿┑鐘垫暩婵挳宕愭繝姘辈闁挎洖鍊归悡娆愩亜閺嶎偄浠滃ù婊呭娣囧﹪鎳犳0婵嗘闂佸疇顫夐崹鍧楀春閸曨垰绀冮柕濞у懌鍋″┑锛勫亼閸娿倝宕㈡ィ鍐ㄧ婵☆垯璀﹂崵鏇㈡偣閸ャ劎銈存俊鎻掔墦閺屾洝绠涢弴鐑嗘綌闂佸啿鎼幊蹇涙偂韫囨搩鐔嗛悹楦挎婢ф洟鏌涢弮鈧幐鎶藉蓟濞戙垹妫樻繛鍡欏亾妤旂紓鍌欐祰妞存悂骞愭繝姘闁告侗鍨抽惌娆撳箹鐎涙ɑ灏ù婊堢畺閺屾稑鈹戦崟顐㈠Б闂佹椿鍘介幐楣冨箟閹间焦鍋嬮柛顐g箘閻熴劑姊洪崫鍕靛剮缂佽埖宀稿濠氭偄閻撳海顦悷婊冪箳閺侇喖鈽夐姀锛勫幐闂佸憡渚楅崰妤呭磹閹扮増鐓涢悘鐐额嚙婵倿鏌熼鍝勨偓婵嗙暦閹烘垟妲堟慨妤€妫旂槐锟� ---闂傚倸鍊搁崐鎼佸磹閹间礁纾归柟闂寸绾惧綊鏌i幋锝呅撻柛濠傛健閺屻劑寮崼鐔告闂佺ǹ顑嗛幐鍓у垝椤撶偐妲堟俊顖氭惈缁犺鈹戦悙鍙夆枙濞存粍绮撻幃鈥斥槈閵忥紕鍘卞┑鐐村灥瀹曨剟鐛Ο姹囦簻闁哄倹瀵чˉ銏℃叏婵犲懏顏犻柟鐟板婵℃悂濡烽敂鎯х稈闂傚倷鑳堕幊鎾诲吹閺嶎厼绠柨鐕傛嫹
开发学院WEB开发Jsp apache+Tomcat负载平衡设置详解 阅读

apache+Tomcat负载平衡设置详解

 2008-01-05 10:05:46 来源:WEB开发网 闂傚倸鍊搁崐鎼佸磹閹间礁纾归柟闂寸绾剧懓顪冪€n亜顒㈡い鎰Г閹便劌顫滈崱妤€骞婄紓鍌氬€瑰銊╁箟缁嬫鍚嬮柛顐線缂冩洟姊婚崒娆戭槮婵犫偓闁秵鎯為幖娣妼缁愭鏌″搴′簽濞戞挸绉甸妵鍕冀椤愵澀娌梺缁樻尪閸庣敻寮婚敐澶婂嵆闁绘劖绁撮崑鎾诲捶椤撴稑浜炬慨妯煎亾鐎氾拷闂傚倸鍊搁崐鎼佸磹閹间礁纾归柟闂寸绾剧懓顪冪€n亝鎹i柣顓炴閵嗘帒顫濋敐鍛婵°倗濮烽崑娑⑺囬悽绋挎瀬闁瑰墽绮崑鎰版煙缂佹ê绗ч柍褜鍓﹂崣鍐潖閸濆嫅褔宕惰娴犲ジ姊虹拠鑼闁煎綊绠栭幃楣冩倻閽樺鎽曢梺闈涱檧婵″洭宕㈤悽鍛娾拺閻熸瑥瀚烽崯蹇涙煕閻樺磭澧甸柕鍡楀€圭缓浠嬪川婵犲嫬骞堥梺纭呭閹活亞妲愰弴鐔哄ⅰ闂傚倷绶氬ḿ褍煤閵堝洠鍋撳顐㈠祮闁绘侗鍣i獮鎺懳旈埀顒傜不閿濆棛绡€闂傚牊绋戦弳娆徝瑰⿰鍫㈢暫闁哄矉缍佹慨鈧柍鎯版硾濠€杈ㄧ珶閺囩喓绡€婵﹩鍘鹃崢鐢告⒑缂佹ê濮﹂柛鎾村哺閹ɑ娼忛妸銈囩畾闂佸湱绮敮鐐存櫠濞戞氨纾肩紓浣贯缚濞插鈧娲栧畷顒冪亙闂佸憡鍔曢崯鐘诲礈濠靛牊宕叉繛鎴炨缚閺嗗棗鈹戦悩杈厡闁轰焦鐗滅槐鎾存媴娴犲鎽甸梺鍦嚀濞层倝鎮鹃悜钘夌闁规惌鍘介崓鐢告⒑閻熸澘鎮侀柣鎺炵畵閹骞栨担鍏夋嫽婵炶揪绲块崕銈夊吹閳ь剟姊洪幖鐐测偓鏍偋閻樿崵宓侀煫鍥ㄧ⊕閺呮悂鏌ㄩ悤鍌涘濠电姷鏁告慨鐑藉极閸涘﹥鍙忛柣鎴f閺嬩線鏌涘☉姗堟敾闁告瑥绻戦妵鍕箻閸楃偟浠肩紓浣哄閸ㄥ爼寮诲☉銏犵疀闂傚牊绋掗悘鍫ユ倵閻熺増鍟炵紒璇插暣婵$敻宕熼姘鳖啋闁诲酣娼ч幗婊堟偩婵傚憡鈷戠痪顓炴媼濞兼劖绻涢懠顒€鏋庢い顐㈢箳缁辨帒螣閼测晜鍤岄梻渚€鈧偛鑻晶顔肩暆閿濆牆鍔垫い锔界叀閹繝濡舵径瀣帾闂佸壊鍋呯换鍐磻椤忓懐绠剧€瑰壊鍠曠花濠氬箚閻斿吋鈷戦悗鍦У閵嗗啴鏌ら崘鑼煟鐎规洘绻堥弫鍐焵椤掑嫧鈧棃宕橀鍢壯囨煕閳╁喚娈橀柣鐔稿姍濮婃椽鎮℃惔鈩冩瘣闂佺粯鐗曢妶绋跨暦閻戞ḿ绡€闁搞儜鍐ㄧギ闂備線娼ф蹇曟閺囥垹鍌ㄦい蹇撶墛閳锋垿鏌熼懖鈺佷粶闁告梹顨婇弻锟犲川椤旈敮濮囩紓浣稿€圭敮鐔妓囩€靛摜纾奸弶鍫涘妼缁楁碍绻涢悡搴g闁糕斁鍓濋幏鍛存煥鐎e灚缍楅梻鍌氬€峰ù鍥ь浖閵娾晜鍊块柨鏇炲€哥粻鏌ユ煕閵夘喖澧柡瀣╃窔閺岀喖宕滆鐢盯鏌¢崨顔藉€愰柡灞诲姂閹倝宕掑☉姗嗕紦闂傚倸鍊搁崐鎼佸磹閹间礁纾归柟闂寸绾剧懓顪冪€n亜顒㈡い鎰Г閹便劌顫滈崱妤€骞婄紓鍌氬€瑰銊╁箟缁嬫鍚嬮柛顐線缂冩洟姊婚崒娆戭槮婵犫偓闁秵鎯為幖娣妼缁愭鏌″搴′簽濞戞挸绉甸妵鍕冀椤愵澀娌梺缁樻尪閸庣敻寮婚敐澶婂嵆闁绘劖绁撮崑鎾诲捶椤撴稑浜炬慨妯煎亾鐎氾拷  闂傚倸鍊搁崐鎼佸磹閹间礁纾归柟闂寸绾惧綊鏌i幋锝呅撻柛銈呭閺屻倝宕妷锔芥瘎婵炲濮靛銊ф閹捐纾兼繛鍡樺笒閸橈紕绱撴笟鍥ф珮闁搞劌鐖兼俊鎾礃椤旂厧绐涢梺鍝勵槹閸ㄥ綊宕㈠ú顏呭€垫鐐茬仢閸旀碍銇勯敂璇茬仸鐎规洩绻濋獮搴ㄦ嚍閵壯冨妇闂傚⿴鍋勫ú锕€煤閺嶃劎澧¢梻鍌欐祰椤曆呪偓鍨浮瀹曟粓鎮㈡總澶嬬稁闂佹儳绻愬﹢杈╁閸忛棿绻嗘い鏍ㄧ閹牊銇勯銏㈢劯婵﹨娅i幏鐘绘嚑椤掑偆鍞规繝娈垮枟鑿ч柛鏃€鍨垮畷娲焵椤掍降浜滈柟鍝勭Ф椤︼箓鏌涢妶搴″⒋闁哄本鐩獮妯兼崉閻戞ḿ鈧顪冮妶搴′簻缂佺粯鍔楅崣鍛渻閵堝懐绠伴悗姘煎墴閹顢橀悜鍡樺瘜闂侀潧鐗嗗Λ娆戠矆閳ь剟姊洪悷鏉挎毐闂佸府绲介悾宄扳堪閸曨偒鍤ら柣搴㈢⊕鑿ら柟閿嬫そ濮婄粯绗熼崶褌绨介梺绋款儐閻╊垶骞婇悢纰辨晬婵炴垶鐟﹂悵宄邦渻閵堝棙鐓ュ褏鏅竟鏇㈡偂鎼搭喚鍞甸柣鐘烘鐏忋劑宕濋悢铏圭<濠㈣泛瀛╅鐘绘煃瑜滈崜姘额敊閺嶎厼绐楅柡宥庡幐閳ь剨绠撻弻銊р偓锝傛櫇缁犳艾鈹戦鐣岀畵闁活厼鐗嗗嵄闁绘垼濮ら埛鎴犵磼鐎n偒鍎ラ柛搴㈠姍閺岀喖鎮烽悧鍫熸倷闁捐崵鍋ら弻娑㈠箛閳轰礁唯濠碘剝褰冮悧濠勬崲濞戙垹骞㈡俊銈呭暟椤斿鈹戦悙鑼闁挎洏鍨归~蹇曠磼濡顎撴俊鐐差儏缁ㄨ偐鎲伴崱娆戠=闁稿本姘ㄨⅵ闂佺ǹ顑嗛幐鑽ゆ崲濞戞埃鍋撳☉娆嬬細闁活厹鍊濋弻娑㈠箻鐠虹儤鐏堥悗瑙勬礃濡炰粙宕洪埀顒併亜閹哄秹妾峰ù婊勭矒閺岀喖鎮滃Ο铏逛淮闂侀€炲苯澧紓宥咃工椤曪綁骞庣粵瀣櫌闂佸憡娲﹂崜娑㈠储闁秵鐓熼幖鎼灣缁夐潧霉濠婂懎鍘撮柣鎿冨墴椤㈡宕掑Δ鈧禍楣冩偡濞嗗繐顏痪鎯ь煼閺屾稑螖閳ь剟宕崸妤婃晪闁挎繂顦壕褰掓煟閺囨氨鍔嶉棄瀣⒒閸屾瑧顦﹂柟纰卞亜铻為悗闈涙憸娑撳秹鏌熼幑鎰靛殭闁藉啰鍠栭弻鏇熺箾閻愵剚鐝曢梺绋款儏濡繈寮诲☉姘勃闁告挆鈧Σ鍫濐渻閵堝懘鐛滈柟鍑ゆ嫹
核心提示:一、简介:每个Tomcat worker是一个服务于web server、等待执行servlet的Tomcat实例,例如我们经常使用像Apache之类的web server转发sevlet请求给位于其后面的一个Tomcat进程(也就是前面所说的worker),apache+Tomcat负载平衡设置详解,本文具体介绍了如

  一、简介:
  
  每个Tomcat worker是一个服务于web server、等待执行servlet的Tomcat实例。例如我们经常使用像Apache之类的web server转发sevlet请求给位于其后面的一个Tomcat进程(也就是前面所说的worker)。本文具体介绍了如何配置各种类型worker和loadbalance,并说明了各种类型worker的特性和loadbalance配置的原理。
  
  二、为什么使用Tomcat workers:
  
  上文描述了一个非常简单的结构,事实上能够配置多个Tomcat workers来处理web server转发的servlet请求。而这样配置的理由不外乎以下几种假想环境:
  
  * 我们在开发环境中发布不同的Tomcat workers为各自不同的应用服务。当然在开发环境中的开发者共享同一个web server,但是每个Tomcat worke服务于拥有它的开发者。
  
  * 我们在不同的Tomcat进程上定义各自的虚拟主机,这样不同的公司可以使用各自的web site,从而使他们的web site得到了合理的分割。
  
  * 我们提供负载平衡的web site,也就意味着同时使用多个Tomcat workers,而每个Tomcat worker具有独立的主机并且在workers之间要分配通过web server转发来的请求。
  
  当然,这些假想情况也许并不能涵盖使用多个workers的所有状况。
  
  三、workers.PRoperties配置说明:
  
  定义Tomcat workers的方法是在apache的conf目录下编写一个名为“workers.properties”的属性文件。本文将具体解释如何进行配置的:
  
  1.定义Workers列表:
  
  定义workers的方法就是在apache的conf目录下编写一个workers.properties文件,使其作为apache的插件来发挥作用。
  
  定义workers列表的格式:
  
  worker.list =<使用“,”分割的worker 名字列表>
  
  例如:
  
  worker.list= worker1, worker2
  
  当apache启动时,workers.properties作为插件将初始化出现在worker.list列表中的workers。
  
  2.定义Workers的类型:
  
  每个被命名的worker都应有一些关于其自身的附加信息。这些信息包括了worker的类型和其它相关信息。这里讨论的是JK1.2.5中定义的workers类型。
  
  定义worker类型的格式:
  
  worker . worker名字. type =<worker类型>
  
  worker名字的命名最好遵循java的命名规范。
  
  worker类型取值于下面的表格:
  
  定义一个名为“local”的worker,其使用ajpv12协议与Tomcat 进程通讯:
  
  worker.local.type=ajp12
  
  定义一个名为“remote”的worker,其使用ajpv13协议与Tomcat 进程通讯:
  
  worker.remote.type=ajp13
  
  定义一个名为“fast”的worker,其使用JNI的方式与Tomcat 进程通讯:
  
  worker.fast.type=jni
  
  定义一个名为“loadbalancer”的worker,其作为对多个Tomcat 进程的负载平衡使用:
  
  worker.loadbalancer.type=lb
  
  各个类型具有不同的行为,我们在下文中会具体解释。
  
  3.设置Worker属性:
  
  在定义worker之后,还需要提供各个worker的属性,这些属性的定义使用下面的方式:
  
  worker.<worker名字>.<属性>=<属性值>
  
  3-1 ajp12类型的Worker属性:.
  
  ajp12类型的worker工作时使用基于TCP/ip socket的ajpv12协议转发请求给“进程外”Tomcat worker。
  
  ajp12 worker属性如下:
  
  host:
  
  侦听ajp12请求的Tomcat worker主机。
  
  port:
  
  Tomcat worker主机的侦听端口。
  
  lbfactor:
  
  当此Tomcat worker被用于一个负载平衡worker使用时,此属性将被使用。它定义了此worker的负载平衡权值。
  
  例如:下面的“worker1”定义了一个位于www.x.com主机上的Tomcat,它使用8007端口侦听apache发来的请求,并具有2.5的负载权值
  
  worker.worker1.host=www.x.comworker.worker1.port=8007worker.worker1.lbfactor=2.5
  
  注重:在ajpv12协议中,针对每个请求都要一个连接建立、使用、关闭。其默认侦听端口为8007。
  
  3-2 ajp13类型的Worker属性:
  
  ajp13类型的worker工作时使用基于TCP/IP socket的ajpv13协议转发请求给“进程外”Tomcat worker。
  
  ajpv13协议与ajpv12协议的主要不同:
  
  * ajpv13具有更丰富的二进制协议,它使用将频繁使用的字符串编码为小整数的方式对请求数据进行压缩。
  
  * ajpv13重用打开的socket并保留这些打开的socket以处理将来的请求。这在apache与Tomcat之间具有防火墙的网络环境下是必要的。
  
  * ajpv13具有对SSL信息的处理能力,以致容器能够实现SSL的相关方法(如isSecure())。
  
  注重:ajp13当前只能用于支持“进程外”协议的Tomcat 4.0.x, 4.1.x and 5。
  
  下表描述了ajp13worker接受的属性:
  
  host:
  
  侦听ajp13请求的Tomcat worker主机。
  
  port:
  
  Tomcat worker主机的侦听端口。
  
  lbfactor:
  
  当此Tomcat worker被用于一个负载平衡worker使用时,此属性将被使用。它定义了此worker的负载平衡权值。
  
  cachesize:
  
  当在多线程的web server(例如apache2.0、IIS 、Netscape)中使用JK时,此属性是有效的。假如将cachesize的值设置为较高的值,这些支持多线程的web server将获得很好的处理能力。假如此属性不被设置,则连接cache特性将失效。
  
  cache_timeout:
  
  本属性用于声明JK在cache中保留一个打开的socket的时间,它对减少web serer的线程数有所帮助。
  
  使用cache_timeout的原因:
  
  周所周知,一个身背重负的web server(例如apache)建立childs/threads来处理负载,而当负载减少时它将销毁无用的childs/threads。每个child在转发请求给Tomcat时要打开一个ajp13连接,而在Tomcat那一端也将建立一个ajp13线程与之通讯。但是问题出现在一个ajp13连接建立完成后,child没有及时的释放那个ajp13连接,由于web server1将保持它的childs/threads运行已处理高负载,即使childs/threads处理快速的静态内容,在Tomcat端也将积累很多的无用ajp13线程。
  
  socket_keepalive:
  
  当防火墙位于web server与Tomcat之间时,防火墙将尝试断开未激活的网络连接。此属性将告诉操作系统在未激活的连接中发送KEEP_ALIVE信息(发送间隔时间依靠于操作系统的设置,一般为120秒),这样将防止防火墙切断未激活的网络连接。
  
  但此设置并不是万能钥匙,它对于某些防火墙也无能为力。
  
  socket_timeout:
  
  此属性说明连接在未激活的状况下持续多久,web server将主动切断之。这是一个使Tomcat端的陈旧线程不致过多的好方法,但是也带来了在下一次请求到来时需要重新打开socket的开销。此属性与cache_timeout有类似的功效,但是它工作在non-cache模式。
  
  connect_timeout:
  
  web server在连接建立后将一个PING请求发送到ajp13协议的连接上。 此属性说明了web server等待PONG回应的时间(以ms为单位)。此属性在jk 1.2.6版本被增加进来,以求避免Tomcat的死机,Tomcat 3.3.2+, 4.1.28+ and 5.0.13+实现了对使用ajp13的 ping/pong的支持。此属性默认为失效的。
  
  prepost_timeout:
  
  web server在转发一个请求后将一个PING请求发送到ajp13协议的连接上。此属性说明了web server等待PONG回应的时间(以ms为单位)。此属性在jk 1.2.6版本被增加进来,以求避免Tomcat的死机,Tomcat 3.3.2+, 4.1.28+ and 5.0.13+实现了对使用ajp13的 ping/pong的支持。此属性默认为失效的。
  
  reply_timeout:
  
  此属性告诉web server在接到远端的Tomcat已死并实时的切换到集群中的另外一个Tomcat的回应之前等待一段时间。默认情况下web server将永远等待。属性值为web server要等待回应的时间(以ms为单位),所以假如具有运行时间较长的servlet时设置其值要小心。此属性在jk 1.2.6版本被增加进来,以求避免Tomcat的死机和在支持ajp13的servlet引擎上发生的问题。此属性默认为失效的。
  
  recovery_options:
  
  此属性说明了web server在检测到Tomcat失败后如何进行恢复工作。默认情况下,web server将转发请求给处于负载平衡模式中的另一个Tomcat。属性值为0,说明全部恢复;属性值为1,说明假如在Tomcat接到请求后出现失败状况,则不进行恢复;属性值为2,说明假如在Tomcat发送http头给客户端后出现失败状况,则不进行恢复;属性值为3,说明假如在Tomcat接到请求后出现失败状况或者在Tomcat发送http头给客户端后出现失败状况,则不进行恢复。此属性在jk 1.2.6版本被增加进来,以求避免Tomcat的死机和在支持ajp13的servlet引擎上发生的问题。此属性默认为全部恢复。
  
  例如:一个名为“worker2”的worker的配置:
  
  worker.worker2.host=www2.x.comworker.worker2.port=8009worker.worker2.lbfactor=3.5worker.worker2.cachesize=10worker.worker2.cache_timeout=600worker.worker2.socket_keepalive=1worker "worker2" want ajp13 connection to be dropped after 5mn (timeout)worker.worker2.socket_timeout=300
  
  说明:上例中的worker要求操作系统在连接上发送KEEP-ALIVE信号。
  
  注重:在ajpv13协议中默认端口为8009。
  
  4.设置lb Worker属性:
  
  负载平衡类型的worker并不与Tomcat worker通讯,它负责治理这些Tomcat worker。
  
  其治理范围如下:
  
  * 初始化在web server的worker列表中定义的worker。
  
  * 使用worker的负载平衡权值,执行基于权值的负载平衡,将数量多的请求发送到负载平衡权值高(在web server看来就是更加健壮的)的worker。
  
  * 维护在同一个Tomcat worker上的同一个session的请求,使其发送到同一个Tomcat worker上。以达到Tomcat worker上的session一致性、持续性。
  
  * 标识已经失败的Tomcat workers,悬空发向它们的请求,在被lb worker治理的其它workers上寻找可以失败恢复的worker。
  
  被同一个lb worker治理多个worker之间的负载平衡的(基于它们的lbfactor和当前用户session),也可以尽量避免由于单一的Tomcat进程死掉而造成这个网站被“杀”的不良反应。
  
  下表说明了lb worker接受的属性:
  
  * balanced_workers:一个由“,”分割的worker列表,用来声明lb worker需要被治理的workers。这些workers不应出现在worker.list属性中。
  
  * sticky_session:表述是否将对SESSION ID的请求路由回到相同的Tomcat worker。假如属性值不为0,它将被设置为JK_TRUE,session将是粘性的,即SESSION ID的请求路由回到相同的Tomcat worker;当Tomcat正使用能够跨越多个Tomcat实例持久化session数据的Session Manager时,它将被设置为JK_FALSE。属性默认值为JK_TRUE。
  
  例如:worker balance1治理着两个workers:worker1、worker2:
  
  worker.balance1.balanced_workers=worker1, worker2
  
  5.高级lb Worker属性:
  
  JK 1.2.x版本通过增加两个新的属性:local_worker_only 和 local_worker 为lb worker增添了新的负载平衡和容错支持。
  
  下面让我们举一个实际的环境作为example:
  
  一个集群具有两个节点(worker1+worker2),一个web server与tomcat workers一前一后,一个负载平衡器(lb Worker)位于节点的前面、web server的后面。
  
  配置如下:
  
  worker.list=router# Define a 'local_worker' worker using ajp13worker.worker1.port=8009worker.worker1.host=node1.domain.orgworker.worker1.type=ajp13worker.worker1.lbfactor=1worker.worker1.local_worker=1# Define another 'local_worker' worker using ajp13worker.worker2.port=8009worker.worker2.host=node2.domain.orgworker.worker2.type=ajp13worker.worker2.lbfactor=1worker.worker2.local_worker=0# Define the LB workerworker.router.type=lbworker.router.balanced_workers=worker1,worker2worker.router.local_worker_only=1
  
  在worker1和worker2上的local_worker标志告诉lb_worker哪个连接属于本地worker。
  
  假如local_worker值为非0,则它将被设置为JK_TRUE,用来标记“local worker”,而JK_FALSE的情况则相反。假如至少一个worker被标记为local worker,则lb_worker将工作于local worker模式。这种模式下,所有的local workers将被移到在lb_worker中的内部worker列表的头部。
  
  这意味着一个带有session id的请求到达lb_worker时,相应的worker(根据权值排序,权值最大的那个worker)将被确定作为此请求的接受/处理者。假如这个worker死掉/当机,请求将被发送到处于非错误状态的第一个local worker;假如一个没有session id的请求到达lb_worker时,此请求将被路由到第一个local worker。假如所有的local worker均处于错误状态,则这时“local_worker_only”标志显得尤其重要。假如local_worker_only的属性值为非0,则它被设置为 JK_TRUE,否则被设置为 JK_FALSE。当它被设置为 JK_TRUE时,这个没有session id的请求将得到一个错误作为回应,否则lb_worker将尝试将请求路由到其它的被治理的worker上。假如其中的一个worker处于错误状态,并且恢复会话的工作并没有任何改变,local worker将查找这个没有session id的请求(因为在local worker中保存有这个请求的session),而其它的worker只能查找带有session id的请求。
  
  注重:local_worker默认值是0,local_worker_only默认值也是0。
  
  6.为什么需要这么复杂的过程吗?
  
  因为我们对于一个关闭的节点需要一个具有灵性的维护。
  
  在节点前面的平衡器周期性的对每个节点的特定端口进行查询。假如我们从集群中移走一个节点,我们就会隐性的关闭掉这个特定的端口。由于负载平衡器不能连接它,这个节点将被标记为down。但是我们没有移动在那个关闭的节点上的session到其它的节点上。在这个环境下,假如平衡器发送一个没有session id的请求到一个端口被关掉的节点,那么一个错误将发生。假如平衡器测试到一个节点被标记为down的状态,而没有其它的节点答应发送没有session id的请求。这样这些陈旧的session请求就只有路由到那个被关闭的节点才能被接受。在一段时间后,这些陈旧的session将超时。由于所有的陈旧的session过期,那个不可达(被关闭)的节点将失去这个请求。同时也会导致我们的servlet系统发送一个没有session id的重定向回应给浏览器。
  
  但是可能被关闭的节点将会up,重新加入到集群中来,在它上面仍将保留着陈旧的session。所以在最后一个session超时后,更新节点能够为陈旧的session的恢复带来希望,而不是杀掉sessions或者把它们移到其它节点上。而且有时假如那些陈旧的session中有许多big的对象,那么移动它们也将花费许多时间。
  
  7.jni类型的Worker属性:
  
  jni worker会在web server进程中打开一个JVM,并在其中执行Tomcat,这叫做“进程内”worker。来往于JVM的消息将通过调用JNI方法被传递,这使jni worker比那些需要使用ajp消息通讯的“进程外”worker执行的更快。
  
  注重:由于JVM是多线程的,jni worker应该只被用于在支持对线程的web server(AOLServer, IIS, Netscape and Apache 2.0)上。同时还应该确认在web server上使用的线程方案是否与被使用的JK web server插件相匹配。
  
  由于jni worker 打开了一个JVM,它将接受一些属性(例如classpath等)并将其传递给JVM:
  
  worker.worker名.class_path:“进程内”的JVM要使用的classpath。它将包括所有的Tomcat的jar文件和class、配置文件等。
  
  为了获得jsp编译器的支持,我们需要将Javac添加到classpath中。当然对于Java2需要添加tools.jar到classpath,而对于JDK1.xx则要添加classes.zip到classpath。
  
  worker.worker名.class_path:用于以多行的形式声明多个classpath。JK环境将用“:”或者“;”把这些classpath;连接起来。
  
  例如:给名为“wrkjni”的worker设置classpath。
  
  worker.wrkjni.class_path=/var/tomcat3/lib/tomcat.jarworker.wrkjni.class_path=/opt/IBMJava2-131/lib/tools.jar
  
  worker.worker名.bridge:用于标识将通过JNI方式被使用的Tomcat的类型。此属性目前有两个属性值:tomcat32 or tomcat33。Tomcat 3.2.x虽然已经过时,但是被提供用于发布在一些类似iSeries系统上。此属性的默认值为tomcat33。
  
  例如:给“wrkjni”设置bridge类型为tomcat3.3。
  
  worker.wrkjni.bridge=tomcat33
  
  worker.worker名.cmd_line: 此属性提供了在Tomcat启动代码执行的命令行。使用时将命令行的命令、参数分解为多个cmd_line属性。JK环境通过在各个cmd_line属性值之间添加空格将这些cmd_line连接在一起。
  
  例如:设置“wrkjni”的cmd_line属性。
  
  worker.wrkjni.cmd_line=-configworker.wrkjni.cmd_line=/etc/tomcat3/conf/alt-server.xmlworker.wrkjni.cmd_line=-homeworker.wrkjni.cmd_line=/var/tomcat3
  
  上面例子中的第一行声明了-config参数名,而第二行声明了与之对应的参数值。第三行与第四行同理。
  
  worker.worker名.jvm_lib:用于声明JVM的实现库的完整路径。Jni worker使用这个路径动态装载JVM。
  
  例如:设置“wrkjni”的JVM shared lib (IBM SDK on linux)。
  
  worker.wrkjni.jvm_lib=/opt/IBMJava2-131/jre/bin/classic/libjvm.so
  
  例如:设置“wrkjni”的JVM shared lib (Sun SDK on Windows)。
  
  worker.wrkjni.jvm_lib=c:\JDK\1.3.1\jre\bin\classic
  
  worker.worker名.stdout:设置JVM写它的System.out的完整路径位置。
  
  例如:将“wrkjni”的JVM系统输出路径设置为/var/log/http/jk-jvm-out.log。
  
  worker.wrkjni.stdout=/var/log/http/jk-jvm-out.log
  
  worker.worker名.stderr:设置JVM写它的System.err的完整路径位置。
  
  例如:将“wrkjni”的JVM系统错误输出路径设置为/var/log/http/jk-jvm-err.log
  
  worker.wrkjni.stderr=/var/log/http/jk-jvm-out.log
  
  worker.worker名.ms:设置JVM的初始堆大小。
  
  例如:设置“wrkjni”的JVM的初始堆为64M。
  
  worker.wrkjni.ms=64
  
  worker.worker名.mx:设置JVM的最大的堆大小。
  
  例如:设置“wrkjni”的JVM堆最大为128M
  
  worker.wrkjni.mx=128
  
  worker.worker名.sysprops:设置JVM的系统属性。
  
  例如:设置“wrkjni”的JVM使用法语。
  
  worker.wrkjni.sysprops=-Duser.region=FR
  
  worker.worker名.ld_path:设置附加的动态链接库路径(类似于LD_LIBRARY_PATH)
  
  例如:添加一些动态链接库路径到“wrkjni”的java环境中。
  
  worker.wrkjni.ld_path=/opt/IBMJava2-131/jre/bin/worker.wrkjni.ld_path=/opt/IBMJava2-131/jre/bin/classic
  
  注重:在Linux下,上面的ld_path并不能更新LD_LIBRARY_PATH,所以需要在执行web server之前手动更新LD_LIBRARY_PATH,。
  
  8.属性文件宏:
  
  我们可以在属性文件中定义“宏”。这些宏让我们定义属性,并在以后使用它们来构建其它的属性文件。当我们修改Java Home、Tomcat Home、系统路径分隔符时这是很有用的。
  
  例如:定义了属性workers.tomcat_home、workers.java_home。
  
  workers.tomcat_home=d:\tomcatworkers.java_home=d:\sdk\jdk1.2.2
  
  在定义worker.inprocess.class_path时就可以使用前面定义的workers.tomcat_home。
  
  worker.inprocess.class_path=$(workers.tomcat_home)$(ps)classes
  
  9.一个简单而完整的worker.properties:
  
  文件中定义了比较完整的结构,可以做为参考模版:
  
  * 一个位于localhost的使用8007端口的ajp12 worker;
  
  * 一个位于localhost的使用8008端口的ajp13 worker;
  
  * 一个jni worker;
  
  * 一个lb worker:负责ajp12 worker、ajp13 workers的负载平衡。
  
  文件内容如下:
  
  # Define some properties
  workers.apache_log=/var/log/httpd/
  workers.tomcat_home=/var/tomcat3
  workers.java_home=/opt/IBMJava2-131/ps=/
  # Define 4 workers, 3 real workers using ajp12, ajp13, jni, the last one being a loadbalancing workerworker.list=worker1, worker2, worker3, worker4# Set properties for worker1 (ajp12)worker.worker1.type=ajp12worker.worker1.host=locahostworker.worker1.port=8007worker.worker1.lbfactor=5# Set properties for worker2 (ajp13)worker.worker2.type=ajp13worker.worker2.host=locahostworker.worker2.port=8009worker.worker2.lbfactor=50worker.worker2.cachesize=10worker.worker2.cache_timeout=600worker.worker2.socket_keepalive=1worker.worker2.socket_timeout=300# Set properties for worker3 (jni)worker.worker3.type=jni# Set worker3 bridge type, here Tomcat 3.3worker.worker3.bridge=tomcat33# Set worker3 classpathworker.worker3.class_path=$(workers.tomcat_home)$(ps)classesworker.worker3.class_path=$(workers.tomcat_home)$(ps)lib$(ps)tomcat.jar# Set worker3 tomcat command lineworker.worker3.cmd_line=-homeworker.worker3.cmd_line=$(workers.tomcat_home)# Set worker3 Tomcat/JVM settingsworker.worker3.jvm_lib=$(workers.java_home)$(ps)jre$(ps)bin$(ps)classic$(ps)libjvm.soworker.worker3.stdout=$(workers.apache_log)$(ps)inprocess.stdoutworker.worker3.stderr=$(workers.apache_log)$(ps)inprocess.stderr
  worker.worker3.sysprops=tomcat.home=$(workers.tomcat_home)# Set properties for worker4 (lb) which use worker1 and worker2worker.worker4.balanced_workers=worker1,worker2eworker.worker3.cmd_line=$(workers.tomcat_home)# Set worker3 Tomcat/JVM settingsworker.worker3.jvm_lib=$(workers.java_home)$(ps)jre$(ps)bin$(ps)classic$(ps)libjvm.soworker.worker3.stdout=$(workers.apache_log)$(ps)inprocess.stdoutworker.worker3.stderr=$(workers.apache_log)$(ps)inprocess.stderrworker.worker3.sysprops=tomcat.home=$(workers.tomcat_home)# Set properties for worker4 (lb) which use worker1 and worker2worker.worker4.balanced_workers=worker1,worker2

Tags:apache Tomcat 负载

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接