Monthly Archives: March 2013

Limitarea utilizarii procesorului de catre un proces sub Linux

 

cpulimit este un mic program scris in C, care permite pentru a limitarea utilizarii procesorului prin un  proces Linux. Limita specificata este in procente astfel incat putem evita incarcarea maxima ca procesorului generata de script-uri, programe sau procese.

Am gasit destul de util folosirea cpulimit , pentru scripturile de crontab , de exemplu putand sa fac backup peste noapte si astfel pentru arhivarea unui fisier de 50GB folosind gzip nu va folosi toate resursele CPU si va ramane si celorlalte procese timp de CPU.

In cele mai multe distributii Linux , cpulimit este disponibil, astfel incat puteti sa folositi instala folosind comenziile:

sudo apt-get install cpulimit

sau

sudo yum install cpulimit

In cazul in care nu este disponibil dumneavoastra , atunci puteti sa-l compilati foarte usor:

cd / usr / src /
 wget - nu-check-certificat de https:// github.com / opsengine / cpulimit / arhiva / master-O cpulimit.tar
 tar-xvf cpulimit.tar
 CD-opsengine cpulimit-9df7758
 face
 ln-s cpulimit / usr / sbin / cpulimit

Din acest moment puteti rula cpulimit pentru a limita utilizare procesorului de catre un proces prin procentaj , exemplul de mai jos executa arhivarea cu gzip fara a trece de folosirea a 10% din CPU:

/usr/sbin/cpulimit --limit=10 /bin/gzip vzdump-openvz-102-2012_06_26-19_01_11.tar

Puteti verifica cat foloseste gzip in timp real prin comanda :

ps axu | grep [g] zip

sau

top

Prima comanda contine “grep [g] zip”  pentru a evita afisarea obisnuita a ultimei linii:


root    896448  10.0  3.1 159524  3528 ?        S    13:12   0:00 /usr/sbin/cpulimit --limit=10 /bin/gzip vzdump-openvz-102-2012_06_26-19_01_11.tar
root       26490  0.0  0.0   6364   708 pts/0    S+   15:24   0:00 grep gzip

Utilizand cpulimit puteti limita un proces care ruleaza deja , exemplu de mai jos aloca o limita de 20% la procesul cu PID 2342 :
 /usr/sbin/cpulimit -p 2342 -l 20
Deasemenea este posibila specificarea executabilului in locul PID-ului:
 /usr/sbin/cpulimit -P /usr/sbin/nginx -l 30


        

Failover şi load balancing cu HAProxy

 

HAProxy este un proxy open source care poate fi folosit pentru a avea o mai mare disponibilitate  şi “load balancing” pentru tot felul de aplicaţii web. Acesta a fost conceput special pentru proiecte care necesită o disponibilitate mare , deci este foarte rapid şi previzibil, HAProxy se bazează pe un singur model de proces.

în acest post voi descrie configurarea  HAProxy: cererile utilizatorilor sunt trimise  în “load balancing”  între două servere de web Web1 și Web1, în cazul în care unul dintre ele se opreste sau devine indisponibil, toate cererile vor fi  prelucrate de către serverul disponibil, o dată ce serverul indisponibil işi revine  se va aplica “load balancing”  din nou . A se vedea topologia de mai jos.

haproxy1

Instalare

 

HAProxy este  inclus în majoritatea distribuţiilor Linux  , în cazul în care folosiţi Centos , Redhat sau Fedora tastaţi urmatoarea comandă:

yum install haproxy

 

Dacă foloseşti Ubuntu, Debian , Linux Mint sau distribuţii derivate din Debian sau Ubuntu comanda este următoarea :

 

apt-get install haproxy

 

Configurare

 

După ce instalarea HAProxy s-a terminat trebuie  să  editaţi fişierul de configurare , care de obicei , este în /etc/haproxy/haproxy.cfg . Documentaţia oficială pentru HAProxy 1.4 (stable) o găsiţi aici .

 

 

Fişierul de configurare care pune în aplicare topologia prezentată în diagrama de mai sus :

global
        user daemon
        group daemon
        daemon
        log 127.0.0.1 daemon

listen http
        bind 1.2.3.4:80
        mode http
        option tcplog

        log global
        option dontlognull

        balance roundrobin
        clitimeout 60000
        srvtimeout 60000
        contimeout 5000
        retries 3
        server web1 web1.example.com:80 check
        server web2 web2.example.com:80 check
        cookie web1 insert nocache
        cookie web2 insert nocache

 

Să ne oprim puţin asupra celor mai importante părţi a acestui config. Secţiunea „global” specifică userul şi grupul care va fi folosit de haproxy pentru a rula ( daemon în exemplul nostru). Linia „daemon” face ca HAProxy să ruleze în background , log  127.0.0.1 daemon  specifică unde HAProxy să trimită log-urile  si unde să logheze.

Secţiunea „listen http” conţine linia „bind 1.2.3.4:80” care specifică ce adresă  IP şi port să primească cereri (cererile vor fi distribuite  în „load balancing” între Web1 şi Web2).  Linia „mode http” arată ca HAProxy va filtra cererile de HTTP şi va face „load balancing” pe protocolul HTTP.

Linia „balance roundrobin” specifică algoritmul de „load balancing” şi conform acestui algoritm va trimite cererile  către fiecare server web bazându-se pe ce  weight au fiecare în configul de mai sus fiind egal.

Liniile  server web1 … si server web2…                specifică serverele web disponibile  pentru „load balancing” si „failover”, în cazul nostru ele sunt echilibrate in conformitate cu algoritmul „round robin” şi au aceeaşi prioritate.

Ultimele două linii ale configuraţiei sunt optionale , acestea fac  posibilă folosirea cookie-urile , astfel încât în cazul exemplului nostru dacă suntem logaţi într-o aplicaţie web pe serverul Web1 şi mai facem o  cerere prin HAProxy şi acesta ne trimite cererea  către Web2 să rămânem logaţi in aceeaşi sesiune deschisă  ca şi pe Web1.

 

Tux danseaza pe melodia de la Benny Hill Show

Cum intra Tux (mascota Linux) in cladirea Microsoft

Cum poate un sistem de operare Linux based sa salveze enterprise