Бүгін мен сіздермен әлемдегі ең көп қолданылатын веб-қызметтердің бірі: веб-сервер туралы тағы бір рет сөйлесуге келдім Apache2.
Бұл бірнеше рет талқыланған тақырып, бірақ енді мен сізге осы қызметте ескеретін тағы бір мүмкіндік туралы айтуға келдім: Бір уақытта қосылудың шегі. Бізде өте қарапайым немесе i7 процессоры мен 32 ГБ қошқар бар ғарыш кемесінің болуы маңызды емес ...
Егер біз тиісті шараларды қолданбасақ, бір мезгілде қосылудың шегі әрқашан бірдей болады, демек, егер біз бір уақытта көптеген адамдар қосылғымыз келсе, біз жақсы жабдықты ғана емес, сонымен қатар жақсы конфигурацияны қажет етеміз.
Бұл жағдайда ештеңе орнатудың қажеті жоқ, барлығы қарапайым тұжырымдамаларға негізделген, олар apache-ді конфигурациялау үшін ескерілуі керек; кез-келген өзгеріс енгізгіңіз келмес бұрын өте айқын болуы керек тұжырымдамалар.
Алдымен ойланатын нәрсе: менің командамның мүмкіндігі қандай? Мен мүмкіндігінше мәжбүрлейтін болсам, менің жабдықтарым бір уақытта қанша қосылысты қолдай алады? Мұның бәрі бір факторға байланысты; ЖЖҚ (жедел жад).
ЖЖҚ неғұрлым көп болса, онда байланыс мәні көбірек болады, бірақ тіркелген мән болмаса да (яғни әрбір X ram үшін X клиент), сондықтан ең алдымен веб-серверімізде кішігірім есептеулер жүргізу қажет біздің шектеулерімізді білу үшін.
Сіз білетін бірінші нәрсе - бұл Apache-ге қосылыстың орташа есеппен қанша жадты жұмсайтындығын білу керек, өйткені орнатылған әрбір байланыс жүйеде жедел жадтың белгілі бір шығынын болжайды ... Әрине, барлық қосылыстар бірдей қошқарды тұтына алмайды, онымен жасауға тура келеді. бұқаралық ақпарат құралы ... Мұның бәрін келесі пәрмен арқылы алуға болады:
ps -ylC apache2 - сұрыптау: rss | awk '{SUM + = $ 8; I + = 1} END {print SUM / I / 1024} '
Алынған нәтиже мегабайтпен ұсынылатын болады және белсенді қосылыстардың санына, қол жетімді беттердің түріне және т.б. байланысты өзгеруі мүмкін ... Сондықтан тестті әр түрлі қойындылармен ашық өткізген жөн; мүмкіндігінше әрқайсысы әртүрлі мазмұнды көрсетеді. Менің жағдайымда, мысалы, нәтиже 9.5458 болды, егер біз оны жоғары деңгейге көтерсек 10 МБ Бір қосылым үшін орташа есеппен ЖЖҚ жұмсалады.
Жүйеде белсенді процестердің қалған бөлігі қанша RAM-ті тұтынатынын білу де маңызды, өйткені веб-қызмет тек операциялық жүйеде жұмыс істемейді және оны орындау үшін серверде жедел жад қалдыру қажет қалған тапсырмалар. Мұны төменде көрсетілген пәрмен арқылы алуға болады:
ps -N -ylC apache2 - сұрыптау: rss | awk '{SUM + = $ 8} END {SUM / 1024} басып шығару'
Алынған нәтиже мегабайтпен ұсынылатын болады және бұл бізге қалған процестерге жұмсалатын ЖЖҚ мөлшерін дәл көрсете алады; менің жағдайда 800 МБ. Осы ақпаратпен біз бір уақытта болатын байланыстардың жалпы есебін жасай алдық; Біз өте қарапайым операция арқылы аламыз деп есептеймін.
(RAMTOTAL - RAM_RESTOPROCESOS) / RAM_POR_CONNEXIÓN
Осы формуланы қолданып, бізде 4 Гбайт жедел жады бар компьютер, яғни 4096 Мбайт және компьютеріміз жоғарыда көрсетілген нәтижелерді көрсетті деп елестетіп көрейік; есептеу:
(4096 - 800) / 10 = 329 бір уақытта қосылу
Бұл есептеуге қатысты мәселе өте тез, өйткені ол барлық жедел жадты (серверді свопты қолданады) тұтынады, сонымен қатар MySQL немесе басқа кез келген деректер базасы болған жағдайда, онымен байланыстар да жұмсалады ЖЖҚ, сондықтан алынған санды утопиялық санға жатқызуға болады. Сондықтан, мүмкін қосымша процестер үшін жадыны босату үшін, сонымен қатар мәліметтер базасына қосылыстардың орындалу мүмкіндігін қарастыру үшін, біз байланыстар санын азайтатын едік 250.
Енді бізде бір уақытта қосылудың максималды саны бар, біз Apache-ді осы нөмірді алуға дайындауға тура келеді, бұл осы қоңыраудың конфигурация файлында жасалады apache2.conf, онда орналасқан / etc / apache2.
Қарастырылып отырған файл негізделген құрылымға сәйкес келеді модульдер, әрқайсысы сәйкесінше атымен, бірақ біз олардың біреуіне ғана қызығушылық танытар едік, оның аты mpm_prefork_модуль. Қарастырылып отырған модульде әдепкі бойынша келесі деректер бар:
StartServers 5 MinSpareServers 5 MaxSpareServers 10 MaxClients 150 MaxRequestsPerChild 0
Бұл модульде бірқатар маңызды параметрлер бар, дегенмен олардың ішінде бізді ерекше қызықтыратын біреуі бар MaxClients. Бұл параметр бір уақытта қосылудың максималды санын анықтайды және оны өзгерту керек 250.
Есте ұстайтын бір жайт, егер бұл параметрде әдепкіден басқа мән көрсетілгенде, осыдан бұрын тағы біреуін қосу керек. Бұл параметр деп аталады Сервер шегі және ол сервер шегінен тыс болған кезде де «ұстай алатын» қосылыстардың шегін белгілейді.
ServerLimit параметрі әрқашан MaxClients-тен сәл жоғары болуы керек, өйткені маневр жасауға мүмкіндік аз, шегі 270. Бұл модульді келесідей етеді:
StartServers 5 MinSpareServers 5 MaxSpareServers 10 ServerLimit 270 MaxClients 250 MaxRequestsPerChild 0
Енді Apache қызметін келесі пәрменді қолдану арқылы қайта бастау қажет болады:
/etc/init.d/apache2 қайта іске қосу
Осы арқылы біз оңтайландырылған веб-серверден ләззат ала аламыз.
Құттықтаулар.
21 пікір, өз пікіріңізді қалдырыңыз
Пост үшін рақмет!
Сізге бұл пайдалы болғанына қуаныштымын.
Құттықтаулар.
Apache мен екі серверлерді кластерге бөлудің әдісі бар, оның қалай жұмыс істейтінін түсіндіріп бере аласыз ба?
Мен бұл туралы біраз теория оқығанмен, оны ешқашан тәжірибеде қолданған емеспін. Солай бола тұрса да, мүмкін, бұл мақала сізге осыған қатысты біраз нұсқаулар бере алады, дегенмен, мен оны іс жүзінде қолдануға мүмкіндігім болмады:
http://www.muspells.net/blog/2011/04/alta-disponibilidad-con-apache2-y-heartbeat-en-debian-squeeze/
Сіз ұзақ уақыт сұрадыңыз, егер шешпесеңіз; Менде файлдық жүйе ретінде жұмыс жасайтын үшінші тараппен теңдестіру схемасы бар, сіз var / www / html / (менің жағдайда) қалталарын файлдық жүйеге бағыттайсыз, сондықтан олар бірдей ақпаратпен бөліседі, және сіз мүмкін жауап беретін және апахтардың IP-іне бағыттайтын виртуалды ipді қажет етеді, бұл үшін сіз гапроксиді иелене аласыз, егер сіз оны жоғары қол жетімділікте алғыңыз келсе, біреу құлап кетсе, екіншісі жауап беруді жалғастырады, егер сізде бар болса қосымшаның домені, сіз фунтпен теңгерім жасай аласыз, екі серверге де, мысалы, көңіл-күй немесе mysql-де дерекқорға қосылатын кейбір қосымшалар сияқты белгілі бір жағдайларда, сол дерекқорды көрсететін қолданба серверіне пайдаланушы жасауыңыз керек .
Пост үшін үлкен рахмет, сіз өте дұрыс айттыңыз, қошқар негізгі есептеу болып табылады, дегенмен мен біздің процессорымыз өңдей алатын процестердің максималды санын есептейміз деп ойлаймын (әрине, алдымен негізгі жадыны есептеуді жүргіземіз) және дискінің қалай бөлінетіндігін қатты (мысалы, бөлімдер / var = 1TR).
Сіздікі жөн; бәрі маңызды, мысалы, температураны бақылау, басқалармен қатар. Әрине, қуатты процессор үлкен тапсырмаларды бір уақытта үлкен тиімділікпен орындай алады, бірақ бұл хабарламаның мақсаты жедел жадының бір уақытта қосылулар санына қатысты маңыздылығын түсіндіру болды.
Осы факторлардың барлығын бақылаудың және біздің процессордың қанықпағанын немесе бізде аз жедел жады бар-жоғын білудің сценарийін қолданудың жақсы әдісі болар еді. Мүмкін бұл туралы бірнеше күн бұрын жазған постым сіз үшін қызықты, оны келесі сілтемеде қалдырамын; Бұл жаһандық мониторинг, бірақ ол үшін қызықты болуы мүмкін:
http://bytelearning.blogspot.com.es/2015/07/controlando-la-salud-del-equipo-con-bash.html
тілекпен
Өте жақсы жазба, көп рахмет!
Көп рақмет! Сіз бұл мүмкіндікті пайдалана алдыңыз деп үміттенемін.
Мен жынды болғым келмейді ...
… Бірақ қосылымдар санын көбейту арқылы сіз DDoS шабуылына осал болып қалмайсыз ба?
Бұл кретин туралы тыныш сұрақ емес. Шындық бір уақытта қосылулар санын көбейту арқылы біз Apache-ді DDOS шабуылдарынан ішінара күшейтеміз, өйткені сіз серверде орнатылған максималды бір уақытта қосылулардың саны максималды қосылыстардың саны болатындығын ескеруіңіз керек жалғыз пайдаланушы. Сонымен, басында біз бір уақытта 150 қосылысты ғана қолдай алатын болдық (олар заңды көздің байланысы бола ма, жоқ па), енді біздің сервер қанша қолдайды, сол уақытта қосылулардың көбірек санын талап етеді, олар қызмет көрсетусіз қалады. Байланыстардың максималды санын көбейту шабуылдың осы түрінен қорғанудың әдісі емес, керісінше, брандмауэр саясатын іске асыру керек. Егер сіз, мысалы, орналастырғыңыз келетін веб-қызмет интернетке қосылатын болса, қауіпсіздік шарасы орындалуы мүмкін, бұл біздің желіаралық қалқанға қосылуы мүмкін:
iptables -A INPUT -p tcp –syn –port 80 -m connlimit –conllimit-up to 10 -m state – state NEW -j ҚАБЫЛДАУ
iptables -A INPUT -p tcp –dport 80 -m state-state ESTABLISHED, RELATEDED -j ҚАБЫЛДАУ
iptables -A INPUT -p tcp –dport 80 -j DROP
DDoS шабуылдарының сипаттамаларының бірі - шабуылдаушы бірнеше түрлі бағыттардан пакеттерді жіберу үшін пайда болуы мүмкін, бұл дестелер ағынының тек бір бағыттан келуіне жол бермейді.
Мен орнатқан брандмауэр DDOS шабуылына қарсы өте тиімді емес деген мағынада дұрыс айтасыз, өйткені ол әр түрлі көздерден шыққан. Сонда да, бұл дереккөздердің әрқайсысы үшін байланыс санын 10-мен шектеген дұрыс емес, керісінше, әр дереккөз жүз немесе одан да көп байланыс орната алады.
Қалай болғанда да, сұрақтың жинағы - сервер неғұрлым бір мезгілде қосылуларды қолдайтын болса, оны DDOS шабуылымен құлату соғұрлым қиын болады, бұл бетті шабуылдаушының құлатуын қиындатады.
Құттықтаулар.
Жақсы. Қазір менде бар VPS-ті азаптамау үшін NGINX-ті өз сайтымда жалғастырамын.
Жақсы пост @Drassill!
Мен конфигурациядан гөрі статистикалық нәрсе қосқым келді.
Тұтыну параметрін есептеудің ең оңай және жылдам тәсілі орташа мәнге ие болғанымен, біз қатаңырақ болып, «орташа» орнына «медиананы» қолданар едік. Бізді не құтқарады? Егер байланыс көп жадты жоятын болса, сандар пайда болады. Мысалы, өздері қалаған жад бірлігінде (КБ, МБ, МиБ және т.с.с.) келесі мәндерді тұтынатын келесі клиенттерді алайық:
10, 15, 150, 5, 7, 10, 11, 12
Орташа шамасы ~ 30 шамасын береді
Бұл бізде өте үлкен экстремал болғандықтан (150) және есептеулер ақылға қонымсыз. Медиана осы деректерге тапсырыс беріп, үлгілер санын 2-ге бөліп (біздің орталық), содан кейін сол позицияның санын алудан тұрады. Осымен бізде бір нәрсе болар еді
5, 7, 10, 10, 11, 12, 15, 150
Демек, біздің орташа мәні: 8/2 = 4, яғни ~ 10 болады
Мұнда экстремал қаншалықты ессіз болса да, бұл әрқашан бізге шынайы мән беретінін көруге болады. Егер біз 200 тұтынатын тұтынушыны қосатын болсақ, онда біздің медианамыз 11-ге тең болады, ал орташа мән …… деңгейіне жетуі мүмкін.
Бұл тек үлес, және бұл өте пікірталас тудырады, өйткені байланыстармен ол бұралмайды.
Линуксераны құшақтаңыз
Сәлеметсіз бе, мен өзімнің арнайы серверімде қиындыққа тап болдым, яғни Google Analytics деректері бойынша онлайн режимінде шамамен 250 адам жақындаған сайын, менің серверім құлап кетеді және байланыс үзілмейінше байланыс баяу болады. веб-сайтқа жүктейді және ешқашан желідегі пайдаланушылар санынан көп жүктемейді, бірақ мен 8gb ram-ге арналған арнайы сервердің өнімділігін көргенде, бұл 10% пайдалануды көрсетеді, CPU: 5% және қатты диск: 1.99% пайдалану.
Сен маған көмектесе аласың ба? Мен не істеу керектігін таба алмай отырмын, осы әрекеттерді орындау шешім бола ма?
Жақсы Карлос.
Сіз сипаттайтын мәселе сервер дұрыс дайындалмаған кезде өте жиі кездеседі. Сіздің серверіңіз бір уақытта қосылудың анағұрлым аз санын қабылдайтын шығар және 250 байланысқа жеткенде ол істен шығады. Нұсқаулыққа сүйене отырып, сіз мәселені шеше білуіңіз керек, бірақ егер сізде бұл серверде мәліметтер базасы болса, сіз де сол мәліметтер базасын оңтайландыруыңыз керек.
Құттықтаулар.
Драссилл, мен сіз айтқан конфигурацияны жасадым және ол қанағаттанарлық болды, кеше мен желідегі 280 пайдаланушыға жеттім, ал сервер істен шыққан жоқ, мен бұл нәтижеге өте қуаныштымын, және мен сізге мәліметтер базасын оңтайландыру туралы айтқыңыз келетін басқа нәрсені жасағым келеді, ¿ Мен бұған қалай қол жеткіземін?
Деректер базасының тұжырымдамасы жеткілікті ашық; mysql-ді пайдалану постгрмен бірдей емес (мысалы). Мен барлық мәліметтер базасын білмейтінім анық; Мен mysql мен postgres-ті қолданып көрдім, және олардағы бір мезгілде қосылымдардың жоғарылауы max байланыстар параметріне негізделеді; mysql оңтайландыру /etc/my.conf ішінде жасалады және max Connection параметрін өзгерту керек (басқалармен қатар). Оның орнына postgres үшін менің блогымда сізге пайдалы болуы мүмкін немесе оны деректер базасына сілтеме ретінде пайдалануға болатын оңтайландыруды түсіндіретін мақала бар:
http://bytelearning.blogspot.com.es/2016/02/postgresql-una-alternativa-mysql-en.html
Құттықтаулар.
Сәлеметсіз бе, мен бірінші команданы жібергенде, ол маған 0 мәнін көрсетеді. Бұл қандай болуы мүмкін?
Осы хабарлама үшін рахмет.