######### nginx+tomcat+memcache ############
實驗環境
rhel6.5
3臺主機iptables防火牆關閉
實驗主機
172.25.8.2 nginx
172.25.8.3 tomcat memcached
172.25.8.4 tomcat memcached
實驗原理
nginx在前端接受客戶端請求進行負載均衡
Tomcat-1(T1)將session存儲在memcached-2(T2)上。只有當M2不可用時,T1纔將session存儲在memcached-1上(M1是T1的failoverNode故障轉移點)。使用這種配置的好處是,當T1 和M1同時崩潰時也不會丟失 session 會話,避免單點故障。
###########安裝tomcat###########
在172.25.8.3和172.25.8.4主機上進行安裝
1.安裝包
apache-tomcat-7.0.37.tar.gz ##tomcat安裝包
jdk-7u79-linux-x64.tar.gz ##jdk是java語言的軟件開發工具包
2.安裝過程
tar zxf apache-tomcat-7.0.37.tar.gz -C /usr/local
mv /usr/local/apache-tomcat-7.0.8 /usr/local/tomcat
tar zxf jdk-7u79-linux-x64.tar.gz -C /usr/local
mv /usr/local/jdk1.7.0_79 /usr/local/jdk
3.配置環境變量
vim /etc/profile ##在文件末尾添加下列參數。用於設置環境變量必須指定否則tomcat無法啓動
export JAVA_HOME=/usr/local/jdk
export CLASSPATH=:$JAVA_HOME/lib
export PATH=$PATH:$JAVA_HOME/bin
source /etc/profile ##刷新
echo $JAVA_HOME ;echo $PATH ##查看環境變量是否生效
java -version ##命令檢查java版本
4.測試
/usr/local/tomcat/bin/startup.sh ##啓動腳本。關閉的腳本是此目錄下shutdown.sh
Using CATALINA_BASE: /usr/local/tomcat
Using CATALINA_HOME: /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME: /usr/local/jdk
Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
5.瀏覽器訪問http://172.25.8.3:8080可以看到貓網頁
6.直接同步到172.25.8.4主機,完成tomcat的安裝
1)scp -r /usr/local/jdk /usr/local/tomcat/ [email protected]:/usr/local
##將172.25.8.3的jdk和tomcat目錄直接發送到172.25.8.4主機
2)scp /etc/profile [email protected]:/etc/profile ##同步環境變量
souce /etc/profile
3)/usr/local/tomcat/bin/startup.sh ##啓動腳本
######## memcached ###########
在172.25.8.3和172.25.8.4主機上進行安裝
1.安裝並開啓
yum install memcached -y
/etc/init.d/memcached star ##開啓memcached
######### session的序列化方案設置############
在172.25.8.3和172.25.8.4主機
1.關閉tomcat
/usr/local/tomcat/bin/shundown.sh
2.把如下軟件包放置到/usr/local/tomcat/lib 目錄中
kryo-1.04.jar
kryo-serializers-0.10.jar
memcached-session-manager-1.6.3.jar
memcached-session-manager-tc7-1.6.3.jar
msm-kryo-serializer-1.6.3.jar
reflectasm-1.01.jar
minlog-1.2.jar
spymemcached-2.7.3.jar
2.編輯context.xml ##用於T1-m2,T2-m1之間可以緩存
vim /usr/local/tomcat/conf/context.xml
<Context>
......
<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
memcachedNodes="m1:172.25.8.3:11211,m2:172.25.8.4:11211"
failoverNodes="m1" #在 node2 上此項設置爲“m2”
requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"
/>
3.session的序列化方案介紹官方推薦的有4種
1). java serialization
2). msm-kryo-serializer
3). msm-javolution-serializer
4). msm-xstream-serializer
其中性能最好的序列化方案是 Kryo,這次實驗採用 kryo 方式。
############# nginx安裝 ######################
在172.25.8.2主機上安裝nginx
1.安裝包
nginx-1.10.1.tar.gz
nginx-sticky-module-1.0.tar.gz
2.安裝過程
1)yum install -y pcre-devel openssl-devel gcc
tar zxf nginx-1.10.1.tar.gz
tar zxf nginx-goodies-nginx-sticky-module-ng-c78b7dd79d0d.tar.gz -C nginx-1.10.1
##nginx-sticky-module爲nginx的第三方模塊,使 nginx 支持sticky模式,所謂sticky模式就是指同一個用戶的訪問請求都被髮送到同一個tomcat實例上處理。
useradd -s /sbin/nologin nginx
cd nginx-1.10.1
./configure --user=nginx --group=nginx --prefix=/usr/local/nginx --with-http_ssl_module --with-http_stub_status_module --add-module=nginx-goodies-nginx-sticky-module-ng-c78b7dd79d0d/ ##./configure過程缺什麼補什麼
make;make install
/usr/local/nginx/sbin/nginx ##開啓ngixn
瀏覽器訪問http//172.25.8.2 ##測試nginx安裝是否成功
/usr/local/nginx/sbin/nginx -s stop ##關閉nginx
vim /usr/local/nginx/conf/nginx.conf ##編輯nginx配置文件
http {
upstream www.example.com { ##設置負載均衡模塊
sticky; ##sticky模式
server 172.25.8.3:8080;
server 172.25.8.4:8080;
}
server { ##在server段添加location段
location ~ \.jsp$ { ##所有jsp頁面交給 tomcat 處理,動靜分離
proxy_pass http://www.example.com;
}
######測試 tomacat+memcache 效果######
在172.25.8.3和172.25.8.4主機上
1.##編輯測試網頁
vim /usr/local/tomcat/webapps/ROOT/test.jsp
測試網頁代碼
<%@ 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>
2.瀏覽器訪問172.25.8.3:8080/test.jsp和172.25.8.38080/test.jsp可以看到
Server Info: 172.25.8.3 : 8080 ##對應主機
ID BEF1A4C679665595EA5180210933026F-m2 ##memcached的存儲位置,T1緩存到m2
Session list 123 = 321 ##已經傳的內容
name ##要上傳的name
key ##要上傳的keynamekey隨意編輯
Submit Query ##上傳按鍵
3.效果查看
1)在172.25.8.3主機上查看Tomcat默認生成的日誌文件catalina.out
tail -n5 /usr/local/tomcat/logs/catalina.out
返回內容123 = 321 ##172.25.8.3本地儲存上傳過的123=321記錄
2)在172.25.8.4主機上查看由T1-m2的緩存記錄
telnet localhost 11211 ##11211是memcached默認端口連接查看本地的緩存記錄
get BEF1A4C679665595EA5180210933026F-m2 ##get命令在telnet進入之後使用B..F-m1是剛瀏覽器中顯示的ID
返回內容..省略..123321 ##m2中有緩存記錄
quit ##quit命令退出
telnet 172.25.8.4 11211 ##telnet IP 11211也可以進行查看
3)正常模式下T1緩存到m2T2緩存到m1
當m2被關閉之後在瀏覽器訪問會看到已經切換到m1
##########測試nginx負載均衡的效果############
vim /etc.hosts ##在哪個機子測試就編輯/etc.hosts
172.25.8.2 www.example.com
【注意關閉防火強】
小結訪問 http://www.example.com/test.jsp
1)不同的主機訪問時會調度到不同的tomcat實例上處理
2)來自同一主機的請求會交給同一個tomcat實例處理
3)若down掉當前正在響應的tomcat實例,nginx會自動把用戶的請求調度到另一個tomcat 實例上,同時session也沒有丟掉。
nginx+tomcat+memcached
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章
apache反代tomcat出現的問題
隨風上升
2019-02-23 13:57:35
Tomcat虛擬主機配置
心碎小胖子
2019-02-23 13:34:47
windowXP上的jsp環境設置
爪哇
2019-02-23 13:12:07
Nginx 安裝與配置規則入門
Lmagic16
2019-02-24 22:13:58
nginx+php執行請求的工作原理
xavier
2019-02-24 15:52:41
配置Nginx支持php,出現No input file specified錯誤的解決方法
lvqingpu
2019-02-24 13:15:35
深入 Nginx 之架構篇
jeffrey_up
2019-02-23 19:23:46
tcpdump查看Nginx長連接還是短連接
ouyangbro
2019-02-23 15:52:48
Nginx使用安裝(一)
flashhand
2019-02-23 13:58:28
nginx中gzip模塊
小紅帽子
2019-02-23 13:37:48
nginx+keepalived配置高可用HTTP羣集
小紅帽子
2019-02-23 13:37:48
Nginx服務之防盜鏈功能
兩袖春風
2019-02-23 13:28:22
寶塔面板 + Rancher + 阿里雲鏡像倉庫 + Docker + Kubernetes,添加集羣、部署 web 應用
燕小范
2019-02-23 13:20:14
nginx添加系統服務
braoshan
2019-02-23 13:15:21
Nginx簡易實用的php域名配置
wx5c6f5798d627c
2019-02-23 13:07:16