日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關咨詢
選擇下列產品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關閉右側工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
Debian下怎么搭建Nginx和Tomcat服務器實現(xiàn)負載均衡

這篇文章主要介紹了Debian下怎么搭建Nginx和Tomcat服務器實現(xiàn)負載均衡的相關知識,內容詳細易懂,操作簡單快捷,具有一定借鑒價值,相信大家閱讀完這篇Debian下怎么搭建Nginx和Tomcat服務器實現(xiàn)負載均衡文章都會有所收獲,下面我們一起來看看吧。

創(chuàng)新互聯(lián)公司專注于網(wǎng)站建設|成都網(wǎng)站維護公司|優(yōu)化|托管以及網(wǎng)絡推廣,積累了大量的網(wǎng)站設計與制作經(jīng)驗,為許多企業(yè)提供了網(wǎng)站定制設計服務,案例作品覆蓋發(fā)電機租賃等行業(yè)。能根據(jù)企業(yè)所處的行業(yè)與銷售的產品,結合品牌形象的塑造,量身開發(fā)品質網(wǎng)站。

負載均衡的基本概念

負載平衡(load balancing)是一種計算機網(wǎng)絡技術,用來在多個計算機(計算機集群)、網(wǎng)絡連接、cpu、磁盤驅動器或其他資源中分配負載,以達到最佳化資源使用、最大化吞吐率、最小化響應時間、同時避免過載的目的。

使用帶有負載平衡的多個服務器組件,取代單一的組件,可以通過冗余提高可靠性。負載平衡服務通常是由專用軟體和硬件來完成。

負載平衡最重要的一個應用是利用多臺服務器提供單一服務,這種方案有時也稱之為服務器農場。通常,負載平衡主要應用于web網(wǎng)站,大型的internet relay chat網(wǎng)絡,高流量的文件下載網(wǎng)站,nntp(network news transfer protocol)服務和DNS服務?,F(xiàn)在負載平衡器也開始支持數(shù)據(jù)庫服務,稱之為數(shù)據(jù)庫負載平衡器。

對于互聯(lián)網(wǎng)服務,負載平衡器通常是一個軟體程序,這個程序偵聽一個外部端口,互聯(lián)網(wǎng)用戶可以通過這個端口來訪問服務,而作為負載平衡器的軟體會將用戶的請求轉發(fā)給后臺內網(wǎng)服務器,內網(wǎng)服務器將請求的響應返回給負載平衡器,負載平衡器再將響應發(fā)送到用戶,這樣就向互聯(lián)網(wǎng)用戶隱藏了內網(wǎng)結構,阻止了用戶直接訪問后臺(內網(wǎng))服務器,使得服務器更加安全,可以阻止對核心網(wǎng)絡棧和運行在其它端口服務的攻擊。

當所有后臺服務器出現(xiàn)故障時,有些負載平衡器會提供一些特殊的功能來處理這種情況。例如轉發(fā)請求到一個備用的負載平衡器、顯示一條關于服務中斷的消息等。負載平衡器使得it團隊可以顯著提高容錯能力。它可以自動提供大量的容量以處理任何應用程序流量的增加或減少。

0.前期準備

使用debian環(huán)境。安裝nginx(默認安裝),一個web項目,安裝tomcat(默認安裝)等。

1.一份nginx.conf配置文件

# 定義nginx運行的用戶 和 用戶組 如果對應服務器暴露在外面的話建議使用權限較小的用戶 防止被入侵
# user www www;
#nginx進程數(shù), 建議設置為等于cpu總核心數(shù)
worker_processes 8;
#開啟全局錯誤日志類型
error_log /var/log/nginx/error.log info;
#進程文件
pid /var/run/nginx.pid;
#一個nginx進程打開的最多文件描述數(shù)目 建議與ulimit -n一致
#如果面對高并發(fā)時 注意修改該值 ulimit -n 還有部分系統(tǒng)參數(shù) 而并非這個單獨確定
worker_rlimit_nofile 65535;
events{
 #使用epoll模型提高性能
 use epoll;
 #單個進程最大連接數(shù)
 worker_connections 65535;
}
http{
 #擴展名與文件類型映射表
 include mime.types;
 #默認類型
 default_type application/octet-stream;
 sendfile on;
 tcp_nopush on;
 tcp_nodelay on;
 keepalive_timeout 65;
 types_hash_max_size 2048;
 #日志
 access_log /var/log/nginx/access.log;
 error_log /var/log/nginx/error.log;
 #gzip 壓縮傳輸
 gzip on;
 gzip_min_length 1k; #最小1k
 gzip_buffers 16 64k;
 gzip_http_version 1.1;
 gzip_comp_level 6;
 gzip_types text/plain application/x-javascript text/css application/xml application/javascript;
 gzip_vary on;
 #負載均衡組
 #靜態(tài)服務器組
 upstream static.zh-jieli.com {
 server 127.0.0.1:808 weight=1;
 }
 #動態(tài)服務器組
 upstream zh-jieli.com {
 server 127.0.0.1:8080;
 #server 192.168.8.203:8080;
 }
 #配置代理參數(shù)
 proxy_redirect off;
 proxy_set_header host $host;
 proxy_set_header x-real-ip $remote_addr;
 proxy_set_header x-forwarded-for $proxy_add_x_forwarded_for;
 client_max_body_size 10m;
 client_body_buffer_size 128k;
 proxy_connect_timeout 65;
 proxy_send_timeout 65;
 proxy_read_timeout 65;
 proxy_buffer_size 4k;
 proxy_buffers 4 32k;
 proxy_busy_buffers_size 64k;
 #緩存配置
 proxy_cache_key '$host:$server_port$request_uri';
 proxy_temp_file_write_size 64k;
 proxy_temp_path /dev/shm/jielierp/proxy_temp_path;
 proxy_cache_path /dev/shm/jielierp/proxy_cache_path levels=1:2 keys_zone=cache_one:200m inactive=5d max_size=1g;
 proxy_ignore_headers x-accel-expires expires cache-control set-cookie;
server{
 listen 80;
 server_name erp.zh-jieli.com;
 location / {
 index index; #默認主頁為 /index
 #proxy_pass http://jieli;
 }
 location ~ .*\.(js|css|ico|png|jpg|eot|svg|ttf|woff) {
 proxy_cache cache_one;
 proxy_cache_valid 200 304 302 5d;
 proxy_cache_valid any 5d;
 proxy_cache_key '$host:$server_port$request_uri';
 add_header x-cache '$upstream_cache_status from $host';
 proxy_pass http:
//static.zh-jieli.com;
 #所有靜態(tài)文件直接讀取硬盤
 # root /var/lib/tomcat7/webapps/jielierp/web-inf ;
 expires 30d; #緩存30天
 }
 #其他頁面反向代理到tomcat容器
 location ~ .*$ {
 index index;
 proxy_pass http:
//zh-jieli.com;
 }
 }
 server{
 listen 808;
 server_name static;
 location / {
}
 location ~ .*\.(js|css|ico|png|jpg|eot|svg|ttf|woff) {
 #所有靜態(tài)文件直接讀取硬盤
 root /var/lib/tomcat7/webapps/jielierp/web-inf ;
 expires 30d; #緩存30天
 }
 }
}

基本配置這個文件,就可以實現(xiàn)負載了。但是里面的各種關系要了解就比較麻煩了。

2.基礎講解

現(xiàn)在假使有一臺電腦192.168.8.203這臺電腦,上面部署了tomcat,里面8080端口有j2ee的服務,通過瀏覽器可以正常瀏覽網(wǎng)頁?,F(xiàn)在有一個問題tomcat是一個比較全面的web容器,對靜態(tài)網(wǎng)頁的處理,應該是比較費資源的,特別是每次都要從磁盤讀取靜態(tài)頁面,然后返回。這中間會消耗tomcat的資源,可能會使那些動態(tài)頁面解析性能影響。秉承l(wèi)inux哲學,一個軟件只做一件事的原則。tomcat就應該只處理jsp動態(tài)頁面。這里就用到以前了解的nginx來進行反向代理。第一步代理,實現(xiàn)動靜網(wǎng)頁分離。這個很簡單的。

worker_processes 8;
 
 pid /var/run/nginx.pid;
 
 worker_rlimit_nofile 65535;
 
 events{
 use epoll;
 worker_connections 65535;
 }
 
 http{
 include mime.types;
 default_type application/octet-stream;
 sendfile on;
 tcp_nopush on;
 tcp_nodelay on;
 keepalive_timeout 65;
 types_hash_max_size 2048;
proxy_redirect off;
 proxy_set_header host $host;
 proxy_set_header x-real-ip $remote_addr;
 proxy_set_header x-forwarded-for $proxy_add_x_forwarded_for;
 client_max_body_size 10m;
 client_body_buffer_size 128k;
 proxy_connect_timeout 65;
 proxy_send_timeout 65;
 proxy_read_timeout 65;
 proxy_buffer_size 4k;
 proxy_buffers 4 32k;
 proxy_busy_buffers_size 64k;
 
 server{
 listen 80;
 server_name xxx.com;
 location / {
 index index; 
 }
 location ~ .*\.(js|css|ico|png|jpg|eot|svg|ttf|woff) {
 proxy_pass http:
//192.168.8.203:8080;
 expires 30d; 
 }
 location ~ .*$ {
 index index;
 proxy_pass http:
//192.168.8.203:8080;
 }
 }
 }

worker_processes 8;
pid /var/run/nginx.pid;
worker_rlimit_nofile 65535;
events{
 use epoll;
 worker_connections 65535;
 }
http{
 include mime.types;
 default_type application/octet-stream;
 sendfile on;
 tcp_nopush on;
 tcp_nodelay on;
 keepalive_timeout 65;
 types_hash_max_size 2048;
proxy_redirect off;
 proxy_set_header host $host;
 proxy_set_header x-real-ip $remote_addr;
 proxy_set_header x-forwarded-for $proxy_add_x_forwarded_for;
 client_max_body_size 10m;
 client_body_buffer_size 128k;
 proxy_connect_timeout 65;
 proxy_send_timeout 65;
 proxy_read_timeout 65;
 proxy_buffer_size 4k;
 proxy_buffers 4 32k;
 proxy_busy_buffers_size 64k;
server{
 listen 80;
 server_name xxx.com;
 location / {
 index index;
 }
 location ~ .*\.(js|css|ico|png|jpg|eot|svg|ttf|woff) {
 proxy_pass http:
//192.168.8.203:8080;
 expires 30d;
 }
 location ~ .*$ {
 index index;
 proxy_pass http:
//192.168.8.203:8080;
 }
 }
 }

修改nginx的配置文件 /etc/nginx/nginx.conf 默認有個配置文件的。其實大部分都差不多,關鍵還是server段的設置。這里我設置server段如上所示,其他段復制就可以了。server段里面的解釋如下:第35行為監(jiān)聽本機80端口。37-39行表示默認主頁,這里的默認主頁我是index.jsp 對應到我項目中是一個index。 這里根據(jù)需要可以改為

index index.jsp index.html index.htm index.php

具體可參考其他文章。 關鍵的第40行,這個是正則匹配,網(wǎng)上也有很多介紹。這里匹配我項目中用到的所有靜態(tài)網(wǎng)頁后綴。第41行是代理地址。這里我代理到我的web應用中。expires 30d緩存為30天,這里的緩存是對應到前端頁面,用戶的cache-control字段,

Debian下怎么搭建Nginx和Tomcat服務器實現(xiàn)負載均衡

第44行中那個正則是匹配無后綴的頁面。我項目中jsp頁面是無后綴的。這里可以根據(jù)需要進行修改。同樣代理到192.168.8.203:8080這里。到這里你可能會問,我艸,這有毛意思???當然不是這樣了。簡單的實現(xiàn)靜動分離,我們可以把第41行進行修改,改為

root  /var/lib/tomcat7/webapps/jielierp/web-inf

表示不代理,直接從本地磁盤拿。通過查tomcat日志可以看到靜態(tài)頁面是沒有訪問到的。但這樣又有一個問題。這樣的靈活性不好,對下面要講到的內存緩存和集群部署來說都是不友好的,所以又有了下面的這種寫法。再寫一個server段。

server{
 listen 808;
 server_name static;
 location / {
}
location ~ .*\.(js|css|ico|png|jpg|eot|svg|ttf|woff) {
 #所有靜態(tài)文件直接讀取硬盤
 root /var/lib/tomcat7/webapps/jielierp/web-inf ;
 expires 30d; #緩存30天
 }
 }

這次監(jiān)聽808端口,然后上上面的代碼41行就可以修改為 proxy_pass http://192.168.8.203:808了,到這里就實現(xiàn)了動靜分離了。如果多臺服務器,就修改對應的ip就可以了。如果發(fā)現(xiàn)連接不上的,要檢查一下防火墻,權限等外部問題,這個配置是這樣的。

如果單純這樣的話,我們會發(fā)現(xiàn)頁面直接傳輸過于占用帶寬。對應web的優(yōu)化,這里想到的是通過對頁面進行gzip壓縮,然后傳到用戶那里,再解壓,這樣可以有效的減少帶寬。這里就會用到nginx 的gzip模塊了。默認的nginx是集成有gzip模塊的。只需在http段增加下面配置即可。

gzip on;
 gzip_min_length 1k; #最小1k
 gzip_buffers 16 64k;
 gzip_http_version 1.1;
 gzip_comp_level 6;
 gzip_types text/plain application/x-javascript text/css application/xml application/javascript;
 gzip_vary on;

給個首頁看看效果

Debian下怎么搭建Nginx和Tomcat服務器實現(xiàn)負載均衡

不要在意請求數(shù)不一樣,那兩個請求是谷歌插件來的。不用覺得我在騙你。

作為假使有很多人訪問的網(wǎng)站來說,緩存肯定是很重要的東西了。一開始是想通過插件,讓nginx和redis進行合成,然后nginx使用redis來緩存的,但是發(fā)現(xiàn)配置起來很麻煩,還要自己下載插件,重新編譯nginx,比較麻煩,所以這里覺得用nginx自帶的緩存也是不錯的選擇。雖然效率比不上redis,但是有還是比沒有好。nginx默認的緩存是磁盤文件系統(tǒng)的緩存,而不是像redis那樣的內存級別的緩存。一開始我以為nginx就只有這樣。后來查了寫資料,才知道是我太天真了,對linux不是很了解導致的。linux的一切皆文件。原來我們可以把文件緩存到內存對應的linux文件系統(tǒng)中。我說的可能比較難以理解,請自行搜索/dev/shm 這個文件目錄。我們把文件緩存到這個文件目錄里,其實就相當與內存的緩存了。只不過還是靠文件系統(tǒng)管理。所以比不上自定義格式的redis那樣的內存緩存。

在http段進行基本配置

#緩存配置
proxy_cache_key '$host:$server_port$request_uri';
proxy_temp_file_write_size 64k;
proxy_temp_path /dev/shm/jielierp/proxy_temp_path;
proxy_cache_path /dev/shm/jielierp/proxy_cache_path levels=1:2 keys_zone=cache_one:200m inactive=5d max_size=1g;
proxy_ignore_headers x-accel-expires expires cache-control set-cookie;

location ~ .*\.(js|css|ico|png|jpg|eot|svg|ttf|woff) {
 proxy_cache cache_one;
 proxy_cache_valid 200 304 302 5d;
 proxy_cache_valid any 5d;
 proxy_cache_key '$host:$server_port$request_uri';
 add_header x-cache '$upstream_cache_status from $host';
 proxy_pass http:
//192.168.8.203:808;
expires 30d; #緩存30天
 }

經(jīng)過這兩個的配置就基本能實現(xiàn)了,這里說幾個注意項,也是困擾我很久的問題。上面第一段代碼第6行,proxy_ignore_headers 如果web項目中的html的head頭里面指定



這些不緩存的話,就要加上proxy_ignore_headers的配置項了。還有一點就是/dev/shm下面的文件系統(tǒng)權限默認只給root用戶,所以要chmod 777 -r /dev/shm 這樣不是很安全的做法,如果實際上線可以給定某個用戶組,關于用戶組的設置是配置的第一行

user www www;

上面第二段代碼的第6行是增加一個header字段方便查看是否擊中緩存。

我們rm -rf /dev/shm/jielierp/proxy_* 下面的所有文件(注意這里如果是進行多次測試的話要nginx -s reload 重新讀取配置或重啟服務,因為你rm -rf只是刪除了緩存文件,但是緩存的結構信息還在nginx進程里面,結構還在,如果不重啟的話,是會出現(xiàn)訪問不到的)

Debian下怎么搭建Nginx和Tomcat服務器實現(xiàn)負載均衡

所以要記得重啟哦。下面是運行效果

第一次訪問

Debian下怎么搭建Nginx和Tomcat服務器實現(xiàn)負載均衡

第二次訪問,在瀏覽器中ctrl+shift+r 強制刷新

Debian下怎么搭建Nginx和Tomcat服務器實現(xiàn)負載均衡

到這里就可以看到效果了。我們查看一下/dev/shm這個里面

Debian下怎么搭建Nginx和Tomcat服務器實現(xiàn)負載均衡

到這里已經(jīng)快結束了。最后也是比較關鍵的一個技術點,就是集群,集群,集群。這個就要用到upstream了,看到最開頭的配置文件了嗎,就是那個

#負載均衡組
#靜態(tài)服務器組
upstream static {
 server 127.0.0.1:808 weight=1;
 server 192.168.8.203:808 weight=1;
}

#動態(tài)服務器組
upstream dynamic {
 server 127.0.0.1:8080;
 #server 192.168.8.203:8080;
}

上面那個就是集群組了。upstream是關鍵字,static 和 dynamic是兩個服務器集群組的名稱。以第一個為例,server 127.0.0.1:808 是服務器地址,后面的weight=1 是權重。有多個就寫多個。親測試過,集群中的一個壞了,不影響系統(tǒng)運行。至于更多的輪詢規(guī)則,可以參考網(wǎng)上更多的資料。這里不多說。至于怎么使用呢? proxy_pass http://192.168.8.203:808 改為 proxy_pass http://static; 這樣即可實現(xiàn)均衡。

到這里就結束了。把上面各個部分根據(jù)自己需求配置起來就可以實現(xiàn)單機房負載均衡了。 上面這種做法有一個缺點就是在前面的那一臺nginx如果當機,后面所以機器就失去了被訪問的能力了,所以需要在前面實現(xiàn)多個nginx多機房的負載。關于這個就是另外一個話題了。目前還沒有研究。以后有機會再說了。

上面動態(tài)服務器組如果是那種需要保存用戶狀態(tài)的話,會有問題,就是session問題,比如我在server1進行登錄后,下一次動態(tài)服務器組進行輪詢后可能分配到server2,就會造成要重新登錄。治標的辦法是,配置輪詢規(guī)則,根據(jù)用戶請求的ip進行hash,然后分配對應的服務器。具體配置如下:

upstream dynamic{
ip_hash;
server 127.0.0.1:8080;
server 192.168.0.203:8080;
}

這樣就可以實現(xiàn)一個用戶對應一個服務器節(jié)點。這樣就不會有重復登錄的問題。另一種治本的辦法是,利用緩存系統(tǒng)進行session的統(tǒng)一存儲管理。

關于“Debian下怎么搭建Nginx和Tomcat服務器實現(xiàn)負載均衡”這篇文章的內容就介紹到這里,感謝各位的閱讀!相信大家對“Debian下怎么搭建Nginx和Tomcat服務器實現(xiàn)負載均衡”知識都有一定的了解,大家如果還想學習更多知識,歡迎關注創(chuàng)新互聯(lián)行業(yè)資訊頻道。


新聞名稱:Debian下怎么搭建Nginx和Tomcat服務器實現(xiàn)負載均衡
本文來源:http://www.dlmjj.cn/article/jghcgo.html