LNMP架構的擴展 - tomcat 測試,sticky粘滯,session共享

tomcat 訪問jsp頁面

tomcat和java的安裝

Tomcat 服務器是一個開源的輕量級Web應用服務器,在中小型系統和併發量小的場合下被普遍使用,是開發和調試Servlet、JSP 程序的首選。

運行tomcat 我們需要準備的基本環境是 jdk

 tar zxf apache-tomcat-7.0.99.tar.gz -C /usr/local/
 tar zxf jdk-7u79-linux-x64.tar.gz -C /usr/local/
 ln -s apache-tomcat-7.0.99/ tomcat
 ln -s jdk1.7.0_79 java
	做個軟連接方便目錄的使用

把jdk和tomcat解壓到/usr/local/ 目錄下。

當前我們沒有java的,我們需要配置環境變量。

vim /etc/profile
source /etc/profile

在這裏插入圖片描述
在這裏插入圖片描述
就可以看到我們的java的信息,就說明我們的jdk配置的是正常的。
現在我們來測試一下java
在這裏插入圖片描述
在這裏插入圖片描述
正常使用。

測試 tomcat
進入到安裝目錄下的bin目錄執行:
./startup.sh 打開tomcat
在這裏插入圖片描述
在這裏插入圖片描述
8080和8009 端口打開,
在這裏插入圖片描述訪問可以看到默認發佈頁。

但用戶不會去訪問8080端口,所以我們需要配置nginx。
在這裏插入圖片描述
訪問.jsp結尾時轉交給8080端口。
在這裏插入圖片描述

動態頁面測試

寫幾個測試動態頁面:

在這裏插入圖片描述
在這裏插入圖片描述
刷新一次時間就會變一次。

  1. 一個簡易的用戶登陸信息,會被記錄下來
<%@ page contentType="text/html; charset=GBK" %>
<%@ page import="java.util.*" %>
<html><head><title>Cluster App Test</title></head>
<body>
Server Info:
<%
out.println(request.getLocalAddr() + " : " + request.getLocalPort()+"<br>");%>
<%
out.println("<br> ID " + session.getId()+"<br>");
String dataName = request.getParameter("dataName");
if (dataName != null && dataName.length() > 0) {
String dataValue = request.getParameter("dataValue");
session.setAttribute(dataName, dataValue);
}
out.print("<b>Session list</b>");
Enumeration e = session.getAttributeNames();
while (e.hasMoreElements()) {
String name = (String)e.nextElement();
String value = session.getAttribute(name).toString();
out.println( name + " = " + value+"<br>");
System.out.println( name + " = " + value);
}
%>
<form action="test.jsp" method="POST">
name:<input type=text size=20 name="dataName">
<br>
key:<input type=text size=20 name="dataValue">
<br>
<input type=submit>
</form>
</body>
</html>

訪問:
在這裏插入圖片描述
可以看到輸入的登陸信息會保存到session list中.

我們開啓另一臺一臺同樣配置((tomcat 和 jdk , 環境變量)的虛擬機,進行負載均衡的測試。ip 爲 172.25.254.1

配置本機的nginx,定義一個上游服務:

在這裏插入圖片描述
定義接收請求的服務器組。
在這裏插入圖片描述
並更改前面設置的反向代理的地址,需要與上面的組相同。

重新加載nginx。打開新開虛擬機的tomcat。

這樣我們每次訪問的時候就會接替的訪問1和2 兩臺服務器。但是這樣不會保存用戶訪問的數據。

在這裏插入圖片描述
在這裏插入圖片描述

爲了讓用戶的每次訪問不會來回跳,我們可以做 用sticky參數做會話保持(粘滯) 。

sticky粘滯

會話保持:sticky參數。我們需要下載一個nginx-goodies/nginx-sticky-module-ng 模塊,然後重新編譯進nginx中即可生效。
在這裏插入圖片描述

./configure --prefix=/usr/local/lnmp/nginx --with-http_ssl_module --with-http_stub_status_module --user=nginx --group=nginx --add-module=/root/nginx-goodies-nginx-sticky-module-ng-08a395c66e42
make && make install

在這裏插入圖片描述
添加sticky模塊進去。
重新加載 nginx,訪問:
在這裏插入圖片描述
當前是 254.2 主機,輸入,三次後:
在這裏插入圖片描述
還會在2主機上,這就是sticky模塊的功能。

session共享

如果我們這兩臺服務器中有一臺關閉了的話,會話就會又被重置。用戶的信息又丟失了。
我們關閉server2 的tomcat;
在這裏插入圖片描述
在這裏插入圖片描述
這時輸入usr4,時就會i把我們的請求轉接到了server1上,先前保存的內容又丟失了。

這時我們需要作一個session共享(可以從github獲取jar資源)。兩臺主機都做,讓掛的那一臺服務其把用戶的信息同步給另外一臺服務器,這樣客戶就不會被重置會話了。我們需要下載一些jar包之後就會提供共享功能了,將這些包放到 **tomcat 的 lib ** 目錄下,然後配置tomcat的配置文件即可。

下載前:
在這裏插入圖片描述
下載後:
在這裏插入圖片描述

更改配置文件:/usr/local/tomcat/conf/content.xml

server2上:
<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
memcachedNodes="n1:172.25.254.1:11211,n2:172.25.254.2:11211"
failoverNodes="n2"
requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"
/>

server1上:
<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
memcachedNodes="n1:172.25.254.1:11211,n2:172.25.154.2:11211"
failoverNodes="n1"
requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"
/>

可以看到裏面的memcached-session-manager,但是數據的共享是從memcache中獲取的,所以兩臺服務器都下載memcached。

yum install memcached -y
systemctl start memcached.service        啓動
重啓tomcat

這裏要注意tomcat和session的版本需要匹配。
再次測試發現掛掉一臺服務器也不會丟失之前的內容。

這樣就避免了但典故張。它的內容時交叉存儲的,即server1的內容會存到server2上。只有當server2服務器掛掉時纔會存到本機。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章