久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

nginx+tomcat負(fù)載均衡策略

 KILLKISS 2014-06-17

測試環(huán)境均為本地,測試軟件為:

nginx-1.6.0,,apache-tomcat-7.0.42-1,,apache-tomcat-7.0.42-2,apache-tomcat-7.0.42-3

利用nginx做負(fù)載均衡,,三臺tomcat做WEB具體業(yè)務(wù)處理,。

nginx配置nginx.conf:

#Nginx所用用戶和組,window下不指定  
#user  niumd niumd;  
#user  nobody;

#工作的子進(jìn)程數(shù)量(通常等于CPU數(shù)量或者2倍于CPU)
worker_processes  2;

#錯(cuò)誤日志存放路徑
#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#指定pid存放文件
#pid		logs/nginx.pid;


events {
  #使用網(wǎng)絡(luò)IO模型linux建議epoll,,F(xiàn)reeBSD建議采用kqueue,,window下不指定。  
  #use epoll;  
    
  #允許最大連接數(shù)
  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;
  access_log  logs/access.log;  
  
  client_header_timeout  3m;  
  client_body_timeout	3m;  
  send_timeout		   3m;  
   
  client_header_buffer_size	1k;  
  large_client_header_buffers  4 4k;  
 
 

  sendfile		on;
  tcp_nopush	 on;
  tcp_nodelay	 on;  

  #keepalive_timeout  0;
  keepalive_timeout  65;

  #gzip  on;
  include	gzip.conf;  

  upstream localhost {  
    #根據(jù)ip計(jì)算將請求分配各那個(gè)后端tomcat,,許多人誤認(rèn)為可以解決session問題,,其實(shí)并不能。  
    #同一機(jī)器在多網(wǎng)情況下,,路由切換,,ip可能不同  
    
    server localhost:18081;  
    server localhost:18082;  
    server localhost:18083; 
    #根據(jù)IP做分配策略
    ip_hash; 
   }  
   #down 表示單前的server暫時(shí)不參與負(fù)載
   #weight  默認(rèn)為1.weight越大,負(fù)載的權(quán)重就越大,。
   #max_fails :允許請求失敗的次數(shù)默認(rèn)為1.當(dāng)超過最大次數(shù)時(shí),,返回proxy_next_upstream 模塊定義的錯(cuò)誤
   #fail_timeout:max_fails 次失敗后,暫停的時(shí)間,。
   #backup: 其它所有的非backup機(jī)器down或者忙的時(shí)候,,請求backup機(jī)器,。所以這臺機(jī)器壓力會最輕。

  #nginx 的 upstream目前支持 4 種方式的分配 
  #1),、輪詢(默認(rèn)) 每個(gè)請求按時(shí)間順序逐一分配到不同的后端服務(wù)器,,如果后端服務(wù)器down掉,能自動剔除,。 
  #2),、weight 指定輪詢幾率,weight和訪問比率成正比,,用于后端服務(wù)器性能不均的情況,。 
  #2)、ip_hash 每個(gè)請求按訪問ip的hash結(jié)果分配,,這樣每個(gè)訪客固定訪問一個(gè)后端服務(wù)器,,可以解決session的問題。  
  #3),、fair(第三方)按后端服務(wù)器的響應(yīng)時(shí)間來分配請求,,響應(yīng)時(shí)間短的優(yōu)先分配。  
  #4),、url_hash(第三方)
  server {
    listen	   80;
    server_name  localhost;

    #charset koi8-r;

    #access_log  logs/host.access.log  main;

    location / { 
      proxy_pass http://localhost;  
      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;	#允許客戶端請求的最大單文件字節(jié)數(shù)  
      client_body_buffer_size	 128k;	#緩沖區(qū)代理緩沖用戶端請求的最大字節(jié)數(shù),,  
      proxy_connect_timeout	   90;	#nginx跟后端服務(wù)器連接超時(shí)時(shí)間(代理連接超時(shí))  
      proxy_send_timeout		  90;	#后端服務(wù)器數(shù)據(jù)回傳時(shí)間(代理發(fā)送超時(shí))  
      proxy_read_timeout		  90;	#連接成功后,后端服務(wù)器響應(yīng)時(shí)間(代理接收超時(shí))  
      proxy_buffer_size		   4k;	#設(shè)置代理服務(wù)器(nginx)保存用戶頭信息的緩沖區(qū)大小
      proxy_buffers			   4 32k;	#proxy_buffers緩沖區(qū),,網(wǎng)頁平均在32k以下的話,這樣設(shè)置  
      proxy_busy_buffers_size	 64k;	#高負(fù)荷下緩沖大?。╬roxy_buffers*2)  
      proxy_temp_file_write_size  64k;	#設(shè)定緩存文件夾大小,,大于這個(gè)值,將從upstream服務(wù)器傳  
    }

    #error_page  404			  /404.html;

    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
      root   html;
    }

    # proxy the PHP scripts to Apache listening on 127.0.0.1:80
    #
    #location ~ \.php$ {
    #	proxy_pass   http://127.0.0.1;
    #}

    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    #
    #location ~ \.php$ {
    #	root		   html;
    #	fastcgi_pass   127.0.0.1:9000;
    #	fastcgi_index  index.php;
    #	fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
    #	include		fastcgi_params;
    #}

    # deny access to .htaccess files, if Apache's document root
    # concurs with nginx's one
    #
    #location ~ /\.ht {
    #	deny  all;
    #}
  }


  # another virtual host using mix of IP-, name-, and port-based configuration
  #
  #server {
  #	listen	   8000;
  #	listen	   somename:8080;
  #	server_name  somename  alias  another.alias;

  #	location / {
  #		root   html;
  #		index  index.html index.htm;
  #	}
  #}


  # HTTPS server
  #
  #server {
  #	listen	   443 ssl;
  #	server_name  localhost;

  #	ssl_certificate	  cert.pem;
  #	ssl_certificate_key  cert.key;

  #	ssl_session_cache	shared:SSL:1m;
  #	ssl_session_timeout  5m;

  #	ssl_ciphers  HIGH:!aNULL:!MD5;
  #	ssl_prefer_server_ciphers  on;

  #	location / {
  #		root   html;
  #		index  index.html index.htm;
  #	}
  #}

}
Tomcat1配置server.xml:
<?xml version='1.0' encoding='utf-8'?>

<Server port="18001" shutdown="SHUTDOWN">
 <Connector port="18081" protocol="HTTP/1.1"  connectionTimeout="20000"  redirectPort="18441" />
    <Connector port="18021" protocol="AJP/1.3" redirectPort="18441" />
    <Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat1">
  </Service>
</Server>
Tomcat1配置server.xml:
<?xml version='1.0' encoding='utf-8'?>

<Server port="18002" shutdown="SHUTDOWN">
 <Connector port="18082" protocol="HTTP/1.1"  connectionTimeout="20000"  redirectPort="18442" />
    <Connector port="18022" protocol="AJP/1.3" redirectPort="18442" />
    <Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat1">
  </Service>
</Server>
Tomcat3配置server.xml:
<?xml version='1.0' encoding='utf-8'?>

<Server port="18003" shutdown="SHUTDOWN">
 <Connector port="18083" protocol="HTTP/1.1"  connectionTimeout="20000"  redirectPort="18443" />
    <Connector port="18023" protocol="AJP/1.3" redirectPort="18443" />
    <Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat1">
  </Service>
</Server>

分別啟動三臺tomcat,,訪問到地址依次是:http://localhost:18081,;http://localhost:18082;http://localhost:18083

然后啟動nginx,,訪問地址是:http://localhost

(cmd下面運(yùn)行nginx.exe,,關(guān)閉cmd下面運(yùn)行nginx -s stop)

這樣子根據(jù)客戶端IP做負(fù)載均衡的同步策略已基本可滿足需求,但是考慮到客戶端多網(wǎng)卡或者客戶端訪問不同的服務(wù)器時(shí)產(chǎn)生session不同步的問題,,需要使用memcached做session同步策略,,后續(xù)我會跟上配置文檔。

附:以下是來自于互聯(lián)網(wǎng)的三中方法:
1,、不用session,,通過cookie等方式繞過session 。
      貌似這種方式還是會存在問題,,假如客戶端禁用cookie怎么辦,。
2,、應(yīng)用服務(wù)器自行實(shí)現(xiàn)共享
    如單點(diǎn)登錄,采用中央認(rèn)證服務(wù)器,;或者memcache來存放后端服務(wù)器需要使用的公共數(shù)據(jù),。我曾經(jīng)就有程序采用本地ehcache+memcache來緩存數(shù)據(jù),其中ehcache緩存一些與他機(jī)無關(guān)的數(shù)據(jù),,memcache緩存一些公共數(shù)據(jù),,但這樣往往也容易出現(xiàn)問題。
3,、ip_hash方式解決session共享  
        nginx中的ip_hash技術(shù)能夠?qū)⒛硞€(gè)ip的請求定向到同一臺后端,,這樣一來這個(gè)ip下的某個(gè)客戶端和某個(gè)后端就能建立起穩(wěn)固的session,ip_hash是在upstream配置中定義的,, 配置方式樣例:
upstream backend {  
  server 127.0.0.1:8080 ;  
  server 127.0.0.1:9090 ;  
   ip_hash;  
}  
 ip_hash是容易理解的,,但是因?yàn)閮H僅能用ip這個(gè)因子來分配后端,因此ip_hash是有缺陷的,,不能在一些情況下使用:
     (1)/ nginx不是最前端的服務(wù)器,。ip_hash要求nginx一定是最前端的服務(wù)器,否則nginx得不到正確ip,,就不能根據(jù)ip作hash,。譬如使用 的是squid為最前端,那么nginx取ip時(shí)只能得到squid的服務(wù)器ip地址,,用這個(gè)地址來作分流是肯定錯(cuò)亂的,。
      (2)/ nginx的后端還有其它方式的負(fù)載均衡。假如nginx后端又有其它負(fù)載均衡,,將請求又通過另外的方式分流了,,那么某個(gè)客戶端的請求肯定不能定位到同一 臺session應(yīng)用服務(wù)器上。這么算起來,,nginx后端只能直接指向應(yīng)用服務(wù)器,,或者再搭一個(gè)squid,然后指向應(yīng)用服務(wù)器,。最好的辦法是用 location作一次分流,,將需要session的部分請求通過ip_hash分流,剩下的走其它后端去,。
      ( 3) upstream_hash(這種方式?jīng)]有嘗試過)  

下面是從網(wǎng)絡(luò)上整理的關(guān)于nginx與apache的對比:

1,、nginx與apache優(yōu)缺點(diǎn)對比

nginx相對于apache的優(yōu)點(diǎn): 
(1)輕量級,同樣起web 服務(wù),,比apache占用更少的內(nèi)存及資源 
(2)抗并發(fā),,nginx 處理請求是異步非阻塞的,而apache 則是阻塞型的,在高并發(fā)下nginx 能保持低資源低消耗高性能 
(3)高度模塊化的設(shè)計(jì),,編寫模塊相對簡單 
(4)社區(qū)活躍,,各種高性能模塊出品迅速啊 
apache 相對于nginx 的優(yōu)點(diǎn): 
(1)rewrite:比nginx 的rewrite 強(qiáng)大 
(2)動態(tài)頁面:模塊超多,基本想到的都可以找到 
(3)少bug ,,nginx 的bug 相對較多 
(4)超穩(wěn)定 
存在就是理由,,一般來說,需要性能的web 服務(wù),,用nginx ,。如果不需要性能只求穩(wěn)定,那就apache 吧,。 后者的各種功能模塊實(shí)現(xiàn)得比前者,,例如ssl 的模塊就比前者好,可配置項(xiàng)多,。這里要注意一點(diǎn),,epoll(freebsd 上是 kqueue )網(wǎng)絡(luò) IO 模型是nginx 處理性能高的根本理由,但并不是所有的情況下都是epoll 大獲全勝的,,如果本身提供靜態(tài)服務(wù)的就只有寥寥幾個(gè)文 件,,apache 的select 模型或許比epoll 更高性能。當(dāng)然,,這只是根據(jù)網(wǎng)絡(luò)IO 模型的原理作的一個(gè)假設(shè),,真正的應(yīng)用還是需要實(shí)測了再說 的。 
2,、作為 Web 服務(wù)器:相比 Apache,,Nginx 使用更少的資源,支持更多的并發(fā)連接,,體現(xiàn)更高的效率,,這點(diǎn) 使 Nginx 尤其受到虛擬主機(jī)提供商的歡迎。在高連接并發(fā)的情況下,,Nginx是Apache服務(wù)器不錯(cuò)的替代品: Nginx在美國是做虛擬主機(jī)生 意的老板們經(jīng)常選擇的軟件平臺之一. 能夠支持高達(dá) 50,000 個(gè)并發(fā)連接數(shù)的響應(yīng), 感謝Nginx為我們選擇了 epoll and kqueue 作為開發(fā)模型. Nginx 作為負(fù)載均衡服務(wù)器: Nginx 既可以在內(nèi)部直接支持 Rails 和 PHP 程序?qū)ν膺M(jìn)行服務(wù), 也可以支持作為 HTTP代理 服務(wù)器對外進(jìn)行服務(wù). Nginx采用C進(jìn)行編寫, 不論是系統(tǒng)資源開銷還是CPU使用效率都比 Perlbal 要好很多. 
作為郵件代理服務(wù)器: Nginx 同時(shí)也是一個(gè)非常優(yōu)秀的郵件代理服務(wù)器(最早開發(fā)這個(gè)產(chǎn)品的目的之一也是作為郵件代理服務(wù)器), Last.fm 描述了成功并且美妙的使用經(jīng)驗(yàn). Nginx 是 一個(gè)安裝非常的簡單 , 配置文件非常簡潔(還能夠支持perl語法), Bugs 非常少的服務(wù)器: Nginx 啟動特別容易, 并且?guī)缀蹩梢宰龅?7*24不間斷運(yùn)行,即使運(yùn)行數(shù)個(gè)月也不需要重新啟動. 你還能夠不間斷服務(wù)的情況下進(jìn)行軟件版本的升級 . 
3,、Nginx 配置簡潔, Apache 復(fù)雜 
Nginx 靜態(tài)處理性能比 Apache 高 3倍以上 
Apache 對 PHP 支持比較簡單,,Nginx 需要配合其他后端用 
Apache 的組件比 Nginx 多 
現(xiàn)在 Nginx 才是 Web 服務(wù)器的首選 
4、最核心的區(qū)別在于apache是同步多進(jìn)程模型,,一個(gè)連接對應(yīng)一個(gè)進(jìn)程,;nginx是異步的,多個(gè)連接(萬級別)可以對應(yīng)一個(gè)進(jìn)程 
5,、nginx處理靜態(tài)文件好,耗費(fèi)內(nèi)存少.但無疑apache仍然是目前的主流,有很多豐富的特性.所以還需要搭配著來.當(dāng)然如果能確定nginx就適合需求,那么使用nginx會是更經(jīng)濟(jì)的方式. 
apache有先天不支持多核心處理負(fù)載雞肋的缺點(diǎn),,建議使用nginx做前端,後端用apache,。大型網(wǎng)站建議用nginx自代的集群功能
6,、 從個(gè)人過往的使用情況來看,,nginx的負(fù)載能力比apache高很多。最新的服務(wù)器也改用nginx了,。而且nginx改完配置能-t測試一下配置有沒有問題,,apache重啟的時(shí)候發(fā)現(xiàn)配置出錯(cuò)了,會很崩潰,,改的時(shí)候都會非常小心翼翼現(xiàn)在看有好多集群站,,前端nginx抗并發(fā),后端apache集群,, 配合的也不錯(cuò),。
7、nginx處理動態(tài)請求是雞肋,,一般動態(tài)請求要apache去做,,nginx只適合靜態(tài)和反向。 
8,、從我個(gè)人的經(jīng)驗(yàn)來看,,nginx是很不錯(cuò)的前端服務(wù)器,負(fù)載性能很好,,在老奔上開nginx,,用webbench模擬10000個(gè)靜態(tài)文件請求毫不吃力。apache對php等語言的支持很好,,此外apache有強(qiáng)大的支持網(wǎng)路,,發(fā)展時(shí)間相對nginx更久.
9、 Nginx優(yōu)于apache的主要兩點(diǎn):
(1).Nginx本身就是一個(gè)反向代理服務(wù)器 
(2).Nginx支持7層負(fù)載均衡,;其他的當(dāng)然,,Nginx可能會比 apache支持更高的并發(fā),但是根據(jù)NetCraft的統(tǒng)計(jì),2011年4月的統(tǒng)計(jì)數(shù)據(jù),,Apache依然占有62.71%,,而Nginx是 7.35%,因此總得來說,,Aapche依然是大部分公司的首先,,因?yàn)槠涑墒斓募夹g(shù)和開發(fā)社區(qū)已經(jīng)也是非常不錯(cuò)的性能。 
10,、你對web server的需求決定你的選擇,。大 部分情況下nginx都優(yōu)于APACHE,比如說靜態(tài)文件處理,、PHP-CGI的支持,、反向代理功能、前端Cache、維持連接等等,。在 Apache+PHP(prefork)模式下,,如果PHP處理慢或者前端壓力很大的情況下,很容易出現(xiàn)Apache進(jìn)程數(shù)飆升,,從而拒絕服務(wù)的現(xiàn)象,。 
11、可以看一下nginx lua模塊:https://github.com/chaoslaw...apache比nginx多的模塊,,可直接用lua實(shí)現(xiàn)apache是最流行的,,why?大多數(shù)人懶得更新到nginx或者學(xué)新事物 
12,、對于nginx,,我喜歡它配置文件寫的很簡潔,正則配置讓很多事情變得簡單運(yùn)行效率高,,占用資源少,,代理功能強(qiáng)大,很適合做前端響應(yīng)服務(wù)器 
13,、Apache在處理動態(tài)有優(yōu)勢,,Nginx并發(fā)性比較好,CPU內(nèi)存占用低,,如果rewrite頻繁,,那還是Apache吧

    本站是提供個(gè)人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點(diǎn),。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào),。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多