English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Implementazione di separazione dinamica e statica e bilanciamento del carico tra Nginx e Tomcat

Questo articolo introduce la separazione dinamica e statica e il bilanciamento del carico tra Nginx e Tomcat, dove la separazione dinamica e statica significa gestire le richieste di file statici come immagini e html tramite nginx (o apache e altri), mentre Tomcat (o WebLogic) gestisce i file dinamici come jsp e do, raggiungendo così l'obiettivo di gestire le pagine dinamiche e statiche attraverso diversi contenitori.

Primo: Introduzione a Nginx:

Nginx è un server HTTP e proxy inverso ad alta performance, con alta stabilità e supporta l'hot deployment e l'estensione dei moduli è anche molto facile. Quando si incontrano picchi di accesso o qualcuno lancia connessioni lente maliziosamente, potrebbe anche portare alla esaurimento della memoria fisica del server e scambio frequente, perdendo la risposta, e l'unica soluzione è riavviare il server, Nginx ha adottato la tecnologia di assegnazione di risorse in fasi, accelerando la gestione dei file statici e il proxy inverso senza cache, realizzando il bilanciamento del carico e l'errore di tolleranza, e può sopportare il trattamento ad alta concentrazione di accessi in questo scenario di alta concentrazione di accessi.

Secondo: Installazione e configurazione di Nginx

Primo passo: Scaricare il pacchetto di installazione di Nginx   http://nginx.org/en/download.html

Secondo passo: Installare Nginx su Linux

#tar zxvf nginx-1.7.8.tar.gz // Estrarre
#cd nginx-1.7.8
#./configure --with-http_stub_status_module --with-http_ssl_module // Abilitare la pagina di stato del server e il modulo https

Verrà segnalato un errore di mancanza della libreria PCRE, come illustrato nell'immagine:

In questo caso, esegui prima il passo 3 per installare PCRE, quindi esegui il passo 3, questo è sufficiente

4. make && make install // Compilare ed installare

5. Verifica se l'installazione e la configurazione sono corrette, Nginx è installato in /usr/local/nginx

#/usr/local/nginx/sbin/nginx -t, come illustrato nell'immagine:

Terzo passo: Installare PCRE su Linux

#tar zxvf pcre-8.10.tar.gz // Estrarre
cd pcre-8.10
./configure
make && make install // Compilare ed installare

Terzo: Implementazione di Nginx + Tomcat per la separazione dinamica e statica

 La separazione dinamica e statica significa che Nginx gestisce le pagine statiche (pagine html) o immagini richieste dal client, mentre Tomcat gestisce le pagine dinamiche (pagine jsp) richieste dal client, poiché l'efficienza di elaborazione delle pagine statiche di Nginx è superiore a quella di Tomcat.

Primo passo: dobbiamo configurare il file Nginx

 #vi /usr/local/nginx/conf/nginx.conf

 #user nobody; 
worker_processes 1; 
error_log logs/error.log; 
pid logs/nginx.pid; 
events { 
  use epoll; 
  worker_connections 1024; 
} 
http { 
  include mime.types; 
  default_type application/octet-stream; 
  log_format main '$remote_addr - $remote_user [$time_local] "$request" ' 
           '$status $body_bytes_sent "$http_referer" ' 
           '"$http_user_agent" "$http_x_forwarded_for"'; 
  access_log logs/access.log main; 
  sendfile on; 
keepalive_timeout 65; 
gzip on;  
gzip_min_length 1k;  
gzip_buffers 4 16k;  
gzip_http_version 1.0;  
gzip_comp_level 2;  
gzip_types text/plain application/x-javascript text/css application/xml;  
gzip_vary on;  
  server { 
    listen 80 default; 
    server_name localhost; 
    <span style="color:#ff0000;">location ~ .*\.(html|htm|gif|jpg|jpeg|bmp|png|ico|txt|js|css)$ // static pages handled by nginx</span> 
       {  
         root /usr/tomcat/apache-tomcat-8081/webapps/ROOT;  
          expires 30d; // cache to client for 30 days 
        }  
    error_page 404       /404.html; 
    #reindirizzare le pagine di errore del server al pagina statica /50x.html 
    error_page  500 502 503 504 /50x.html; 
    location = /50x.html { 
      root  html; 
    } 
     <span style="color:#ff0000;">location ~ \.(jsp|do)$ { //Tutti le richieste dinamiche di jsp vengono gestite da Tomcat </span> 
      <span style="color:#ff0000;"> proxy_pass http://192.168.74.129:8081; // Requests with jsp or do suffixes are handled by Tomcat</span> 
      proxy_redirect off; 
      proxy_set_header Host $host;  //il server web backend può ottenere l'IP reale dell'utente tramite X-Forwarded-For 
      proxy_set_header X-Real-IP $remote_addr; 
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
      client_max_body_size 10m;  //dimensione massima del file singolo richiesto dal client 
      client_body_buffer_size 128k; //dimensione massima del buffer di buffer dell'agente per la richiesta dell'utente finale 
       proxy_connect_timeout 90;  //tempo di scadenza della connessione del nginx con il server backend 
       proxy_read_timeout 90;   //tempo di risposta del server backend dopo che la connessione è stata stabilita 
       proxy_buffer_size 4k;   //impostare la dimensione del buffer di conservazione delle informazioni di intestazione utente del server proxy (nginx) 
       proxy_buffers 6 32k;    //buffer di proxy_buffers, se la pagina web è al di sotto di 32k, impostare così 
      proxy_busy_buffers_size 64k;//dimensione dei buffer di alta attività (proxy_buffers*2) 
      proxy_temp_file_write_size 64k; //impostare la dimensione della cartella di cache, se supera questo valore, verrà trasmesso dal server di upstream 
    } 
  }  
}

Second step: Create a static index.html page under webapps/ROOT in Tomcat, as shown in the figure:

Third step: Start the Nginx service

 #sbin/nginx As shown in the figure:

Fourth step: We access the pagehttp://192.168.74.129/index.html It can display the content normally as shown in the figure:

Fifth step: Test how Nginx and Tomcat handle the performance of static pages under high concurrency?

We use the Linux ab website stress test command to test the performance

1. Test the performance of Nginx in handling static pages

ab -c 100 -n 1000 http://192.168.74.129/index.html

 This indicates that 100 requests are handled simultaneously and 1000 times the index.html file are run, as shown in the figure:

2. Test the performance of Tomcat in handling static pages

ab -c 100 -n 1000 http://192.168.74.129:8081/index.html

This indicates that 100 requests are handled simultaneously and 1000 times the index.html file are run, as shown in the figure:

The same static file handling, the static performance of Nginx is better than that of Tomcat. Nginx can handle 5388 requests per second, while Tomcat can only handle 2609 requests.

Summary: In the Nginx configuration file, we configure static content to be handled by Nginx and dynamic requests to be handled by Tomcat, providing performance.

Four. Nginx + Tomcat Load Balancing and Fault Tolerance

Under high concurrency, in order to improve the performance of the server, we have reduced the concurrency pressure on a single server and adopted cluster deployment, which can also solve the fault tolerance problem to avoid the situation where a single server fails and the service cannot be accessed.

 First step: We have deployed two Tomcat servers on this side, 192.168.74.129:8081 and 192.168.74.129:8082

 Second step: Nginx acts as a proxy server, when the client requests the server, it uses load balancing to handle it, so that the client requests can be evenly distributed to each server every day, thus reducing the pressure on the server side. Configure the nginx.conf file under Nginx.

  #vi /usr/local/nginx/conf/nginx.conf

 

 #user nobody; 
worker_processes 1; 
error_log logs/error.log; 
pid logs/nginx.pid; 
events { 
  use epoll; 
  worker_connections 1024; 
} 
http { 
  include mime.types; 
  default_type application/octet-stream; 
  log_format main '$remote_addr - $remote_user [$time_local] "$request" ' 
           '$status $body_bytes_sent "$http_referer" ' 
           '"$http_user_agent" "$http_x_forwarded_for"'; 
  access_log logs/access.log main; 
  sendfile on; 
keepalive_timeout 65; 
gzip on;  
gzip_min_length 1k;  
gzip_buffers 4 16k;  
gzip_http_version 1.0;  
gzip_comp_level 2;  
gzip_types text/plain application/x-javascript text/css application/xml;  
gzip_vary on;  
<span style="color:#ff0000;">upstream localhost_server { 
    ip_hash; 
    server 192.168.74.129:8081; 
    server 192.168.74.129:8082; 
  </span> 
  server { 
    listen 80 default; 
    server_name localhost; 
    <span style="color:#ff0000;">location ~ .*\.(html|htm|gif|jpg|jpeg|bmp|png|ico|txt|js|css)$ // static pages handled by nginx</span> 
       {  
         root /usr/tomcat/apache-tomcat-8081/webapps/ROOT;  
          expires 30d; // cache to client for 30 days 
        }  
    error_page 404       /404.html; 
    #reindirizzare le pagine di errore del server al pagina statica /50x.html 
    error_page  500 502 503 504 /50x.html; 
    location = /50x.html { 
      root  html; 
    } 
     <span style="color:#ff0000;">location ~ \.(jsp|do)$ { //delegare tutte le richieste dinamiche jsp al server Tomcat</span> 
      <span style="color:#ff0000;">proxy_pass http://localhost_server; //delegare le richieste con suffisso jsp o do al server tomcat</span> 
      proxy_redirect off; 
      proxy_set_header Host $host;  //il server web backend può ottenere l'IP reale dell'utente tramite X-Forwarded-For 
      proxy_set_header X-Real-IP $remote_addr; 
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
      client_max_body_size 10m;  //dimensione massima del file singolo richiesto dal client 
      client_body_buffer_size 128k; //dimensione massima del buffer di buffer dell'agente per la richiesta dell'utente finale 
       proxy_connect_timeout 90;  //tempo di scadenza della connessione del nginx con il server backend 
       proxy_read_timeout 90;   //tempo di risposta del server backend dopo che la connessione è stata stabilita 
       proxy_buffer_size 4k;   //impostare la dimensione del buffer di conservazione delle informazioni di intestazione utente del server proxy (nginx) 
       proxy_buffers 6 32k;    //buffer di proxy_buffers, se la pagina web è al di sotto di 32k, impostare così 
      proxy_busy_buffers_size 64k;//dimensione dei buffer di alta attività (proxy_buffers*2) 
      proxy_temp_file_write_size 64k; //impostare la dimensione della cartella di cache, se supera questo valore, verrà trasmesso dal server di upstream 
    } 
  }  
}

Spiegazione:

1) server in upstream indica l'indirizzo IP (dominio) e la porta del server, può anche avere altri parametri

1) weight: imposta il peso di inoltro del server, il valore predefinito è 1.

2) max_fails: viene utilizzato insieme a fail_timeout, indica che se il numero di volte di inoltro fallito del server supera il valore impostato da max_fails, questo server non è utilizzabile, il valore predefinito di max_fails è 1

3) fail_timeout: indica il numero di volte di inoltro fallito entro questo periodo di tempo, se questo server non è utilizzabile.

4) down: indica che questo server non è utilizzabile.

 5) backup: indica che l'impostazione ip_hash per questo server è inefficace, la richiesta viene inoltrata al server solo dopo che tutti i server non di backup sono inattivi.

 2) impostazione ip_hash: nell'ambiente del cluster dei server, se la stessa richiesta del client viene reindirizzata a più server, ogni server potrebbe memorizzare la stessa informazione, il che potrebbe causare uno spreco di risorse. L'impostazione ip_hash reindirizzerà la richiesta della seconda volta del client con la stessa informazione al server della prima richiesta. Ma ip_hash non può essere utilizzato contemporaneamente con weight.

Questo è tutto il contenuto dell'articolo, speriamo che possa aiutare la tua apprendimento, e speriamo che tutti possano sostenere il tutorial urla.

Dichiarazione: il contenuto di questo articolo è stato tratto da Internet, il diritto d'autore è proprietà del rispettivo proprietario, il contenuto è stato contribuito autonomamente dagli utenti di Internet e caricato autonomamente, il sito web non possiede il diritto di proprietà, non è stato editato manualmente e non assume responsabilità legali correlate. Se trovi contenuti sospetti di violazione del copyright, ti preghiamo di inviare un'e-mail a: notice#oldtoolbag.com (al momento dell'invio dell'e-mail, sostituisci # con @) per segnalare, fornendo prove pertinenti. Una volta verificata, il sito web eliminerà immediatamente i contenuti sospetti di violazione del copyright.

Ti potrebbe interessare