日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Nginx >内容正文

Nginx

Nginx+Tomcat服务器负载均衡实践方案

發布時間:2023/12/8 Nginx 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Nginx+Tomcat服务器负载均衡实践方案 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.


1.????為何選擇Nginx+Tomcat做負載均衡?

1.1.?Nginx是什么?

??????Nginx(發音同?engine x)是一款輕量級的Web?服務器/反向代理服務器及電子郵件(IMAP/POP3)代理服務器,并在一個BSD-like?協議下發行。由俄羅斯的程序設計師Igor Sysoev所開發,供俄國大型的入口網站及搜索引擎Rambler(俄文:Рамблер)使用。其特點是占有內存少,并發能力強,事實上nginx的并發能力確實在同類型的網頁服務器中表現較好,中國大陸使用nginx網站用戶有:新浪網易、?騰訊等。

1.2.?Nginx特點

?????Nginx是一款面向性能設計的HTTP服務器,相較于Apachelighttpd具有占有內存少,穩定性高等優勢。與舊版本(<=2.2)的Apache不 同,nginx不采用每客戶機一線程的設計模型,而是充分使用異步邏輯,削減了上下文調度開銷,所以并發服務能力更強。整體采用模塊化設計,有豐富的模塊 庫和第三方模塊庫,配置靈活。??在Linux操作系統下,nginx使用epoll事件模型,得益于此,nginx在Linux操作系統下效率相當高。同時Nginx在OpenBSD或FreeBSD操作系統上采用類似于epoll的高效事件模型kqueue。

1.3.?Nginx可大量平行處理

????Nginx在官方測試的結果中,能夠支持五萬個平行連接,而在實際的運作中,是可以支持二萬至四萬個平行鏈接。

1.4.?nginx?的模塊

????整體采用模塊化設計是nginx的一個重大特點,甚至http服務器核心功能也是一個模塊。要注意的是:nginx的模塊是靜態的,添加和刪除模塊都要對nginx進行重新編譯,這一點與Apache的動態模塊完全不同。

1.5.?Nginx與PHP的集成

?????自PHP-5.3.3起,PHP-FPM加入到了PHP核心,編譯時加上--enable-fpm即可提供支持。??PHP-FPM以守護進程在后臺運行,Nginx響應請求后,自行處理靜態請求,PHP請求則經過fastcgi_pass交由PHP-FPM處理,處理 完畢后返回。?Nginx和PHP-FPM的組合,是一種穩定、高效的PHP運行方式,效率要比傳統的Apache和mod_php高出不少。

????PHP-FPM不支持Windows平臺,由于沒有fastcgi進程管理器管理php-cgi.exe,因此一旦php-cgi.exe崩潰退 出,前端將失去響應,這時Nginx會返回“The page you are looking for is temporarily??unavailable. Please try again later.”的錯誤信息。??因此在Windows上用Nginx和php-cgi.exe組合來運行PHP的方式并不可靠,穩定性有待提高。

1.6.?Tomcat與Nginx性能對比

?????Tomcat?服務器作為一個?Web?服務器,其并發數在?300-500?之間,如果有超過?500的并發數便會出現?Tomcat?不能響應新的請求的情況,嚴重影響網站的運行。另外,在訪問量大的情況下,Tomcat?的線程數會不斷增加。由于Tomcat?自身對內存的占用有控制,當對內存的占用達到最大值時便會出現內存溢出,對網站的訪問嚴重超時等現象,這時便需要重新啟動?Tomcat?以釋放占用的內存,這樣做便會阻斷網站運行。所以對?Tomcat?做負載均衡便很有必要。目前可以和?Tomcat?做負載均衡的主流服務器是?Apache?,但是?Nginx?由于功能多、配置簡單等優點逐漸成為很多負載均衡服務器的首選。?Nginx?的并發數可達到50000?,所以理論上可以和Tomcat?以?1:100?的比例來配置,這樣便可以很好的解決網站并發瓶頸問題。

?

2.????Nginx+Tomcat負載均衡方案實施

2.1.?環境及軟件安裝工具準備

2.1.1.下載JDK7

?????在官網(http://www.oracle.com/us/sun/index.htm)上下載JDK即可,下載地址:

http://java.com/zh_CN/download/index.jsp

2.1.2.下載Nginx

?????根據自己的需要下載合適的系統版本,目前官方對Windows系列平臺只提供Windows 32bit的下載,下載地址:http://nginx.org/en/download.html

2.1.3.下載Tomcat7

??????Tomcat需要JDK運行環境支持,由于我們下載的是JDK7所以選擇對應的Tomcat也是7。建議下載最新的Tomcat7版本,下載地址:http://tomcat.apache.org/download-70.cgi

注:下載Binary版本,沒有必要下載Resource版本。

2.2.?安裝JDK并設置Tomcat和Nginx

2.2.1.安裝JDK

????下載完成后,系統會自動彈出安裝文件提示用戶安裝。直接點擊“同意協議”,然后直接默認安裝JDK路徑,點“下一步”知道完成為止(對于JDK安裝這個沒多大的技術難度,JDK怎么安裝已經在多處文檔中寫過了,故不再詳述),記得驗證安裝是否成功。??參見文檔:《WEB應用打包部署》。

2.2.2.解壓Tomcat

???將下載的Tomcat服務器包解壓到任意路徑下,如:D:\BALANCE_TOMCAT__NGINX由于我已經下載Tomcat7,就用我本機的apache-tomcat-7.0.47作為示例。解壓兩個Tomcat分別命名為apache-tomcat-7.0.47-1何apache-tomcat-7.0.47-2.解壓后如圖所示:

2.2.3.啟動Nginx

?????之所以不以安裝為名是因為Nginx本身是控制臺程序而并未做出Windows服務;將下載的Nginx1.6.0解壓至與Tomcat相同的D:\BALANCE_TOMCAT__NGINX路徑下。切換文件夾路徑找到D:\BALANCE_TOMCAT__NGINX\nginx-1.6.0:

在控制臺“cmd”,執行“start nginx”命令啟動上圖中的exe程序。

啟動后會看到控制臺閃一下;這時查看系統進程中有兩個nginx.exe的進程,說明啟動完成。

2.2.4.負載均衡設置

2.2.4.1.???????修改Tomcat設置

這里需要修改兩個Tomcat的server.xml文件:

?

apache-tomcat-7.0.47-1配置:

?

1、<Server port="18080" shutdown="SHUTDOWN">

?

2、?<Connector port="18080" protocol="HTTP/1.1"

???????????????connectionTimeout="20000"

???????????????redirectPort="18443" />

?

3、?<Connector port="18009" protocol="AJP/1.3" redirectPort="18443" />

?

4、??<Engine name="Catalina" defaultHost="localhost"?jvmRoute="tomcat1">

5、?另外<Host>中添加<Content>設置:

??<Context path="/nginx" reloadable="false" docBase="D:/DEVELOPER_WORKSPACE_AJX/workspace/nginx/WebRoot"> </Context>

注:docBase是項目物理路徑。

?

apache-tomcat-7.0.47-2配置:

?

2、<Server port="28080" shutdown="SHUTDOWN">

?

2、?<Connector port="28080" protocol="HTTP/1.1"

???????????????connectionTimeout="20000"

???????????????redirectPort="28443" />

?

6、?<Connector port="28009" protocol="AJP/1.3" redirectPort="28443" />

?

7、??<Engine name="Catalina" defaultHost="localhost"?jvmRoute="tomcat2">

8、?另外<Host>中添加<Content>設置:

??<Context path="/nginx" reloadable="false" docBase="D:/DEVELOPER_WORKSPACE_AJX/workspace/nginx/WebRoot"> </Context>

注:docBase是項目物理路徑。

?

2.2.4.2.???????修改Nginx設置

?????打開Nginx1.6.0/conf/nginx.conf進行修改,nginx.conf內容如下:

?

#user nobody; #此參數修改為與CPU個數一致 worker_processes 1; #error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info;pid logs/nginx.pid;#后添的 worker_rlimit_nofile 51200;events {worker_connections 51200; }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;server_names_hash_bucket_size 128;client_header_buffer_size 32k; large_client_header_buffers 4 32k;sendfile on;#tcp_nopush on;#keepalive_timeout 0;keepalive_timeout 60;tcp_nodelay on;#gzip on;upstream abc.tomcats.com {#ip_hash;server 192.168.1.147:18080 weight=1;server 192.168.1.147:28080 weight=2;}server {listen 80;server_name abc.tomcats.com;proxy_redirect off;access_log logs/abc.tomcats.com.log combined;#charset koi8-r;#access_log logs/host.access.log main;#充許客戶端請求的最大單個文件字節數 client_max_body_size 10m;client_body_buffer_size 128k;#跟后端服務器連接的超時時間 proxy_connect_timeout 600;#連接成功后等候后端服務器響應時間 proxy_read_timeout 600;#后端服務器數據回傳時間 proxy_send_timeout 600;#代理請求緩存區 proxy_buffer_size 8k;#同上,保存用幾個buffer每個最大空間是多少 proxy_buffers 4 32k;#如果系統很忙時可以申請更大的proxy_buffers,官方推薦*2 proxy_busy_buffers_size 64k;#緩存臨時文件的大小 proxy_temp_file_write_size 64k;location / {root html;index index.html index.htm;proxy_pass http://abc.tomcats.com;proxy_set_header Host $host;proxy_set_header X-Real-Ip $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;}location /status{stub_status on;access_log off;auth_basic "NginxStatus";auth_basic_user_file htpasswd;}location ~ \.jsp$ {proxy_pass http://abc.tomcats.com;} location ~ \.(html|js|css|png|gif)$ {root html;proxy_pass http://abc.tomcats.com;}#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;# server_name localhost;# ssl on;# ssl_certificate cert.pem;# ssl_certificate_key cert.key;# ssl_session_timeout 5m;# ssl_protocols SSLv2 SSLv3 TLSv1;# ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;# ssl_prefer_server_ciphers on;# location / {# root html;# index index.html index.htm;# }#}}

然后使用“Nginx -s reload”命令重新加載Nginx的設置。

2.2.5.項目部署及啟動

2.2.5.1.???????部署web項目

????將J2EE項目打包成war包分別放置到apache-tomcat-7.0.47-1和apache-tomcat-7.0.47-2的webapps目錄下,然后分別啟動Tomcat就行了。

注:webapps下放置的war版本要一致,這是兩個相同的程序服務器部署。

2.2.5.2.???????啟動Tomcat和Nginx

????2個Tomcat隨便啟動無先后順序,并且Nginx與Tomcat啟動也無先后順序。如果修改了nginx.conf只需要執行“Nginx -s reload”命令重新加載Nginx的設置。而如果修改了Tomcat的配置則需要重新啟動Tomcat和Nginx。

?

2.3.?啟動測試負載均衡實施效果

2.3.1.導航到服務器默認界面

在瀏覽器輸入輸入localhost即可看到如下界面:

2.3.2.訪問靜態html文件

注:不一定用localhost,你也可以通過ip地址訪問。

2.3.3.訪問JSP動態頁面

2.4.?配置Memcached?實現session共享

2.4.1.下載Memcached

?????你可以從這里下載對應系統版本的Memcached:http://pecl.php.net/package/memcache

Memcached與Nginx相似,安裝這里就不再說了。

2.4.2.Windows Memcached常用命令

????以下是?memcached?在?Windows?系統下的?x86/x64?版本的安裝方法。命令提示符下運行如下,

-----------------------------------------安裝--------------------:

memcached -d install

memcached -d start

net start "Memcached Server"

?

----------------------------------------卸載-------------------:

memcached -d stop

memcached -d remove

sc delete "Memcached Server"

?

-------------------------------memcached的基本設置:

-p?監聽的端口

-l?連接的IP地址,?默認是本機

-d start?啟動memcached服務

-d restart?重起memcached服務

-d stop|shutdown?關閉正在運行的memcached服務

-d install?安裝memcached服務

-d uninstall?卸載memcached服務

-u?以的身份運行?(僅在以root運行的時候有效)

-m?最大內存使用,單位MB。默認64MB

-M?內存耗盡時返回錯誤,而不是刪除項

-c?最大同時連接數,默認是1024

-f?塊大小增長因子,默認是1.25

-n?最小分配空間,key+value+flags默認是48

-h?顯示幫助

2.4.3.設置Tomcat的Memcached

下載如下jar包 (這些jar不能缺失,否則會出現問題)全部拷貝進TOMCAT/lib中全部的tomcat:然后修改?conf/context.xml添加如下代碼:????

<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager" sticky="false" memcachedNodes="n1:localhost:11211" failoverNodes="" lockingMode="all" requestUriIgnorePattern=".*\.(png|gif|jpg|css|js|ico)$" sessionBackupAsync="false"sessionBackupTimeout="100" transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory" />

因為支持memcached分布式??如果有多臺memcached在memcachedNodes="nx:IP:port"?即可。

注意:這里的端口號要和啟動的設置的端口一致

???打開cmd?進入nginx?的解壓目錄 輸入?nginx -s -stop??輸入?nginx start??重新啟動nginx依次啟動三臺tomcat。在TOMCAT \webapps\ROOT?下新增一張頁面demo.jsp:

<%@ page contentType="text/html; charset=UTF-8" %> <%@ page import="java.util.*" %> <html> <head><title>Cluster Test</title></head> <body> <% HttpSession sess = request.getSession(true); System.out.println(sess.getId()); out.println("<br> SESSION ID:" + sess.getId()+"<br>"); // 如果有新的請求,則添加session屬性 String name = request.getParameter("name"); if (name != null && name.length() > 0) { String value = request.getParameter("value"); sess.setAttribute(name, value); } out.print("<b>Session List:</b>"); Enumeration<String> names = sess.getAttributeNames(); while (names.hasMoreElements()) { String sname = names.nextElement(); String value = sess.getAttribute(sname).toString(); out.println( sname + " = " + value+"<br>"); System.out.println( sname + " = " + value); } %>jvm1 </body> </html>

JVM?分別是?1 2 3?分別放進?t1 t2 t3?中 然后打開瀏覽器http://localhost/demo.jsp?多次刷新看到不同的jvm?相同的session?表示成功nginx + tomcat + memcached?環境就搭建好了。

?

?

總結

以上是生活随笔為你收集整理的Nginx+Tomcat服务器负载均衡实践方案的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。