在Win7實現Tomcat+Nginx 負載均衡配置
一、首先需要下載tomcat及nginx,然後解壓。
nginx-1.11.2
apache-tomcat-7.0.70-windows-x64.zip
然後解壓到某個文件夾裏面。
tomcat 需要有2個或者2個以上,不然體現不了集羣,所有把解壓的Tomcat複製一份,重新命名。
我是這樣的:
tom-7.0.70-1
tom-7.0.70-2
nginx-1.11.2
二、配置Tomcat
1、修改Tomcat端口
因爲Tomcat使用了端口,如果相同的端口,後啓動的tomcat會啓動不了,提示端口占用。所以先修改端口。
由於開發也需要一個Tomcat,所以我把集羣的2個Tomcat的端口都改了。
一個是:8081,對應tom-7.0.70-1
另一個是8082,對應tom-7.0.70-2
配置如下:
D:\tom-7.0.70-1\conf\server.xml
修改關閉端口
Xml代碼
- <Server port="8015" shutdown="SHUTDOWN">
修改請求端口
Xml代碼
- <Connector port="8081" protocol="HTTP/1.1"
- connectionTimeout="20000"
- redirectPort="8443" />
D:\tom-7.0.70-2\conf\server.xml
Xml代碼
- <Server port="8025" shutdown="SHUTDOWN">
Xml代碼
- <Connector port="8082" protocol="HTTP/1.1"
- connectionTimeout="20000"
- redirectPort="8443" />
2、修改 jvmRoute
同樣是在文件
D:\tom-7.0.70-1\conf\server.xml
D:\tom-7.0.70-2\conf\server.xml
找到Engine
Xml代碼
- <Engine name="Catalina" defaultHost="localhost" >
在後面加上 jvmRoute,如:
D:\tom-7.0.70-1\conf\server.xml配置下如
Xml代碼
- <Engine name="Catalina" defaultHost="localhost" jvmRoute="jvm1">
D:\tom-7.0.70-2\conf\server.xml配置如下
Xml代碼
- <Engine name="Catalina" defaultHost="localhost" jvmRoute="jvm2">
三、修改nginx配置文件nginx.conf
1、找到nginx.conf文件,我的在D:\nginx-1.11.2\conf\nginx.conf
2、在http{……}里加上upstream,如下
Xml代碼
- upstream tomcatCluster{# tomcatCluster和proxy_pass保持一樣
- #解決session的問題
- ip_hash;#加上這個,解決Session每次訪問頁面都不一樣,加上就一樣了。
- #這裏是tomcat的地址,weight越大,訪問機率越大。
- server 127.0.0.1:8081 weight=1 fail_timeout=5s max_fails=1;
- server 127.0.0.1:8082 weight=2 fail_timeout=5s max_fails=1;
- }
server:配置tomcat服務器請求的地址,2臺Tomcat服務就配置2個server
3、修改location / {……}
默認是這個的:
Xml代碼
- location / {
- root html;
- index index.html index.htm;
- }
修改成這樣:
Xml代碼
- location / {
- #root html;
- proxy_pass http://tomcatCluster;
- #index index.html index.htm;
- proxy_set_header Host $host;
- proxy_set_header X-Real-IP $remote_addr;
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
- proxy_connect_timeout 1;
- proxy_read_timeout 1;
- proxy_send_timeout 1;
- }
最簡單的配置就是:
Xml代碼
- location / {
- proxy_pass http://tomcatCluster;
- }
tomcatCluster 對應upstream後的命名。
下面的配置可以解決2個Tomcat服務器集羣,當一臺服務器掛掉(宕機)後,請求變得很慢的問題。
(Tomcat集羣一臺服務器掛掉後請求變慢解決方案)
Xml代碼
- proxy_connect_timeout 1;
- proxy_read_timeout 1;
- proxy_send_timeout 1;
四、測試
1、在Tomcat部署一個JavaWeb項目,配置一個index.jsp頁面,方便查看集羣后請求進入的是哪個Tomcat服務器。其實這步可以省略,但有更加好。
index.jsp代碼如下:
Html代碼
- <%@ page language="java" contentType="text/html; charset=UTF-8"
- pageEncoding="UTF-8"%>
- <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
- <html>
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
- <title>學習項目</title>
- </head>
- <body>
- <div style="color: red;font-weight: bold;">study項目。</div>
- <%
- //HttpSession session = request.getSession(true);
- System.out.println(session.getId());
- out.println("<br> SESSION ID:" + session.getId()+"<br>");
- %>
- </body>
- </html>
2、分別啓動2個Tomcat
分別進行D:\tom-7.0.70-1\bin、D:\tom-7.0.70-2\bin目錄,點擊startup.bat啓動Tomcat
3、啓動Nginx服務器
使用Windows命令行啓動
(1)進入D盤:d:
(2)進入D:\nginx-1.11.2目錄:cd nginx-1.11.2
(3)啓動服務:start nginx (啓動一閃而過,但打開進程管理器能看到是已經啓動的)
關閉服務的命令:nginx -s stop
重新加載的命令:nginx -s reload,修改配置文件後,可以使用該命令直接加載,不需要重啓。
4、在瀏覽器輸入地址測試
Nginx監聽的是80端口,瀏覽器直接輸入:http://localhost/
如果出現Tomcat的頁面,就證明成功。
由於我在Tomcat部署了項目,直接請求項目:http://localhost/study/
出現:
顯示的信息是前面提過的index.jsp頁面
其中後綴 jmv1,jvm2對應Tomcat配置的jvmRoute,這樣可以清晰看出請求的是哪個Tomcat服務器。
另外說明的是:
Xml代碼
- server 127.0.0.1:8081 weight=1 fail_timeout=5s max_fails=1;
裏面的weight表示權重,權重越大,請求機率越大
127.0.0.1:8081設置爲1,127.0.0.1:8082設置也爲1,請求的機率幾乎是請求完jvm1,再請求就是jvm2
127.0.0.1:8081設置爲1,127.0.0.1:8082設置爲2,請求的機率是請求2次8082纔會請求一次8081
127.0.0.1:8081設置爲1,127.0.0.1:8082設置爲5,請求的機率是幾乎所有請求都是8082
轉自:http://fanshuyao.iteye.com/,感謝作者分享