Денес дојдов да разговарам со вас уште еднаш за една од најкористените веб-услуги во светот: веб-серверот Apache2.
Тоа е тема за која се зборуваше многу пати, но сега дојдов да ви кажам за друга карактеристика што треба да ја земете предвид со оваа услуга: Границата на истовремени врски. Не е важно дали имаме многу основно или вселенски брод со процесор i7 и 32 GB рам ...
Границата на истовремени врски секогаш ќе биде иста освен ако не преземеме соодветни мерки, што значи дека ако сакаме да имаме многу луѓе поврзани истовремено, не само што ќе ни треба добар хардвер, туку и добра конфигурација.
Во овој случај не е потребно да се инсталира ништо, сè е засновано на едноставни концепти кои мора да се земат предвид за да се конфигурира apache; концепти кои мора да бидат многу јасни пред да сакаат да направат какви било промени.
Првото нешто што треба да се размисли е: Кој капацитет го има мојот тим? Колку истовремени врски можат да поддржат мојата опрема ако ја присилам што е можно повеќе? Сето ова зависи од еден фактор; RAM меморија (меморија за случаен пристап).
Колку е поголема RAM меморијата, толку е поголем бројот на врски, иако нема фиксна вредност (т.е. X клиенти за секој X RAM), затоа пред се е важно да направите мали пресметки на нашиот веб-сервер, со со цел да ги знаеме нашите граници.
Првото нешто што треба да знаете е колку RAM меморија троши во просек секоја врска со Apache, бидејќи секоја воспоставена врска претпоставува одредена потрошувачка на RAM меморија во системот ... Очигледно не сите конекции трошат ист овен, со кој би требало да се направи медиуми ... Сето ова може да се добие со следнава команда:
ps -ylC apache2 - сортирање: РСС | awk '{SUM + = 8 $; Јас + = 1} КРАЈ {печати СУМ / И / 1024} '
Добиениот резултат би бил претставен во мегабајти и може да варира во зависност од бројот на активни врски, видот на пристапните страници, итн ... Затоа, препорачливо е да го извршите тестот со отворени различни јазичиња; секој од нив покажува различни содржини ако е можно. Во мојот случај, на пример, резултатот е 9.5458, што ако го заокружиме на врвот, ќе биде 10 MB Потрошена RAM меморија во просек по конекција.
Исто така е важно да се знае колку RAM меморија трошат останатите процеси кои се активни во системот, бидејќи веб-услугата не е единствената што работи во оперативниот систем и потребно е да оставите бесплатна RAM меморија на серверот за да може да се изврши остатокот од задачите. Ова може да се добие со командата прикажана подолу:
ps -N -ylC apache2 - сортирање: РСС | awk '{SUM + = $ 8} END {print SUM / 1024}'
Добиениот резултат исто така ќе биде претставен во мегабајти и ќе ни ја покаже прецизно количината на RAM меморија потрошена од останатите процеси; во мојот случај 800 MB. Со оваа информација би можеле да направиме општа пресметка на бројот на истовремени врски што би можеле да ги имаме; Пресметувам дека би добиле со помош на многу едноставна операција.
(RAMTOTAL - RAM_RESTOPROCESOS) / RAM_POR_CONNEXIÓN
Со оваа формула во рака, да замислиме дека имаме компјутер со 4 GB RAM, односно 4096 MB и дека нашиот компјутер ги покажа гореспоменатите резултати; пресметката би била:
(4096 - 800) / 10 = 329 истовремени врски
Проблемот со оваа пресметка е што едниот е премногу екстремен, бидејќи би ја потрошил целата RAM меморија (правејќи го серверот да троши swap) и, исто така, во случај на база на податоци, како што е MySQL или која било друга, врските со него исто така ќе трошат RAM меморија, така што добиениот број може да се квалификува како утописки број. Затоа, со цел да ја ослободиме меморијата за можни дополнителни процеси и исто така да ја разгледаме можноста да се извршат врски со база на податоци, би го намалиле бројот на врски со 250.
Сега, кога го имаме нашиот максимален број на истовремени врски, ќе треба да го подготвиме Apache за да можеме да го добиеме овој број, што е направено во конфигурациската датотека на овој повик apache2.conf, кој е домаќин во / итн / апачи2.
Предметната датотека следи структура заснована на модули, секој со соодветното име, но ние би биле заинтересирани само за еден од нив, чие име е mpm_prefork_module. Предметниот модул ги има следниве податоци по дифолт:
StartServers 5 MinSpareServers 5 MaxSpareServers 10 MaxClients 150 MaxRequestsPerChild 0
Овој модул има низа многу важни параметри, иако постои еден од нив што особено би нè интересирал, наречен Макс клиенти. Овој параметар го специфицира максималниот број на истовремени врски и треба да се измени во 250.
Еден детал што треба да се има предвид е дека кога во наведениот параметар е одредена друга вредност освен стандардната, потребно е да додадете уште еден ПРЕД овој. Овој параметар се нарекува ServerLimit и ја поставува границата на врски што серверот може да ги „задржи“ дури и кога е надвор од границата.
Параметарот 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 на апаши, за ова можете да заземете хакрокси и ако го сакате со голема достапност може да се интегрирате во одржување во случај да падне едниот, другиот да продолжи да реагира, или исто така ако веќе имате домен за апликацијата, можете да балансирате со фунтата прави задни страни на двата сервери, за специфични случаи како што се moodle или одредени апликации што се поврзуваат со база на податоци во mysql, ќе треба да создадете корисник по сервер за апликации што покажува на истата база на податоци .
Ви благодарам многу за објавата, вие сте апсолутно во право, овенот е примарна пресметка, иако замислувам дека ние исто така го пресметуваме максималниот број на процеси со коишто може да се справи нашиот процесор (се разбира, прво правејќи ја пресметката на главната меморија) и како би бил дистрибуиран дискот тврд (Пример партиции / var = 1TR).
Во право си; сè е важно, како што е и контролата на температурата меѓу другото. Очигледно, моќен процесор може да изврши поголем број задачи истовремено со голема ефикасност, но целта на овој пост беше да ја објасни важноста на RAM меморијата во однос на бројот на истовремени врски.
Добар начин да се контролираат сите овие фактори и да се види дали нашиот процесор не е заситен или имаме малку слободна RAM меморија, ќе биде со користење на скрипта за баш. Можеби ќе ви биде интересен овој пост што го направив пред неколку дена во врска со тоа, кој ве оставам на следниот линк; Тоа е глобален мониторинг, но може да биде интересен за некого:
http://bytelearning.blogspot.com.es/2015/07/controlando-la-salud-del-equipo-con-bash.html
Со почит
Многу добра белешка, благодарам многу!
Благодарам многу! Се надевам дека успеавте да го искористите тоа.
Не сакам да бидам кретен ...
… Но, со зголемување на бројот на врски, не оставате поранливи на напад на DDoS?
Не е тивко прашање за кретин. Вистината е дека со зголемување на бројот на истовремени врски, ние делумно го зајакнуваме Apache против нападите на DDOS, затоа што треба да земете предвид дека бројот на максимални истовремени врски воспоставени на серверот е бројот на вкупни максимални врски, а не на оние што доаѓаат од еден корисник. Така, додека на почетокот можевме да поддржуваме само 150 симултани врски (без разлика дали се врски од легитимен извор или не), сега можеме да сметаме на онолку колку што поддржува нашиот сервер, барајќи поголем број врски во исто време да бидат без услуга. Очигледно, зголемувањето на максималниот број на врски не е начин да се заштитите од овој вид на напад, туку повеќе ќе треба да спроведете политика на заштитен allид. Ако, на пример, веб-услугата што сакате да ја ставите ќе биде изложена на Интернет, безбедносна мерка што може да се спроведе е додавање на овие редови на нашиот заштитен allид:
iptables -A INPUT -p tcp –syn –dport 80 -m connlimit –connlimit-up 10 -m state –state NEW --j ACCEPT
ИТПАТЛИ -А ВЛЕЗ -п tcp -дипорт 80 -м држава-држава ОСНОВАНА, ПОВРЗАНА -j ПРИФАА
iptables -A ВЛЕЗ -p tcp –port 80 -j DROP
Една од карактеристиките на DDoS нападите е дека напаѓачот може да изгледа дека испраќа пакети од неколку различни насоки, што спречува проток на пакети да доаѓа само од една насока.
Во право сте во смисла дека заштитен allид каков што јас поставив не е многу ефикасен против напад на ДДОС, бидејќи доаѓа од различни извори. Сепак, подобро е да се ограничи бројот на врски на 10 за секој од овие извори отколку да нема ограничување, со што секој извор може да воспостави сто или повеќе врски.
Во секој случај, комплетното прашање е дека колку повеќе истовремени врски поддржува серверот, толку потешко ќе биде да се сруши со напад на ДДОС, што ќе го отежне соборувањето на страницата од страна на напаѓачот.
Поздрав.
Добро За сега продолжувам со NGINX на мојата страница за да не ги измачувам VPS што ги имам.
Убав пост @Drassill!
Сакав да придонесам со нешто можеби повеќе статистичко од конфигурацијата.
Иако најлесниот и најбрзиот начин да се пресмета параметарот на потрошувачката е со средна вредност, можеби би можеле да бидеме поригорозни и да ја користиме „средната“ наместо „средната“. Што би нè спасило? Дека бројките се зголемуваат во случај врската да потроши многу меморија. На пример, да претпоставиме дека следниве клиенти кои ги трошат следните вредности, во единицата на меморија што ја сакаат (KB, MB, MiB, итн.):
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, додека просекот може да оди на.
Тоа е само придонес, и е многу дискутабилно, бидејќи со врските не се заебава.
Прегрнете луѓе linuxera
Здраво, имав проблем на мојот посветен сервер и тоа е дека секој пат кога ќе се приближи бројот на приближно 250 лица на Интернет, според аналитиката на Google во реално време, мојот сервер се распаѓа и врската станува бавна се додека не ја прекине врската на веб-страницата и никогаш не поставува повеќе од тој број на корисници на Интернет, но кога ќе ги видам перформансите на посветен сервер што е 8 GB рам, тоа покажува 10% од употребата, процесорот: 5% од употребата и тврдиот диск во: 1.99% на употреба.
Можете ли да ми помогнете? Не можам да најдам што да направам, дали решението е правењето на овие чекори?
Добар Карлос.
Проблемот што го опишувате е многу чест кога серверот не е правилно подготвен. Вашиот сервер веројатно ќе прифати многу помал број на истовремени врски и кога ќе достигне 250 конекции, тој ќе се сруши. Следејќи го упатството, треба да бидете во можност да го решите проблемот, иако ако имате база на податоци на тој сервер, ќе мора да ја оптимизирате таа база на податоци.
Поздрав.
Драсил, ја завршив конфигурацијата што ја спомна и беше задоволителна, вчера стигнав до 280 корисници преку Интернет и серверот не висеше, јас сум многу задоволен од овој резултат, и исто така сакам да направам друго што ми рече да ја оптимизирам базата на податоци, Како да го постигнам ова?
Концептот на базата на податоци е доста отворен; користењето на mysql не е исто што и postgres (на пример). Очигледно не ги знам сите бази на податоци; Пробав mysql и postgres, а зголемувањето на истовремените врски во овие би се засновало на параметарот максимум врски; оптимизацијата на mysql ќе се изврши во /etc/my.conf и ќе треба да се променат максималните параметри на параметрите (меѓу другите). За постгреси, наместо тоа, имам напис на мојот блог што објаснува како да го оптимизирате, што може да ви биде корисно или што можете да го користите како референца за вашата база на податоци:
http://bytelearning.blogspot.com.es/2016/02/postgresql-una-alternativa-mysql-en.html
Поздрав.
Здраво, кога ја фрлам првата команда, таа ми покажува вредност 0. Што може да биде тоа?
Ви благодариме за овој пост.