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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > Nginx >内容正文

Nginx

Tomcat+Nginx+Memcached集群部署

發(fā)布時間:2024/9/21 Nginx 76 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Tomcat+Nginx+Memcached集群部署 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

主機(jī)環(huán)境 redhat6.5 64位

實驗環(huán)境 服務(wù)端1 ip172.25.29.1?? nginx

服務(wù)端2 ip 172.25.29.2??? tomcat+memcached

服務(wù)端3 ip 172.25.29.3??? tomcat+memcached

安裝包? jdk-7u79-linux-x64.tar.gz

?apache-tomcat-7.0.37.tar.gz

?nginx-goodies-nginx-sticky-module-ng-c78b7dd79d0d.tar.gz

?asm-3.2.jar

?kryo-1.04.jar

?kryo-serializers-0.10.jar

?memcached-session-manager-1.6.3.jar

?memcached-session-manager-tc7-1.6.3.jar

?minlog-1.2.jar

?msm-kryo-serializer-1.6.3.jar

?reflectasm-1.01.jar

?spymemcached-2.7.3.jar

防火墻狀態(tài) 關(guān)閉

?

1.jdk安裝、環(huán)境配置及測試服務(wù)端2

1.解壓、作軟鏈接

[root@server2mnt]# tar zxf jdk-7u79-linux-x64.tar.gz -C /usr/local/? #解壓jdk

[root@server2mnt]# cd /usr/local/ ? ? ?#切換到解壓目錄

[root@server2local]# ls

bin? etc?games? include? jdk1.7.0_79?lib? lib64? libexec?sbin? share? src

[root@server2local]# ln -s jdk1.7.0_79/ java????? #作軟鏈接

[root@server2local]# ll

total44

drwxr-xr-x.2 root root 4096 Jun 28? 2011 bin

drwxr-xr-x.2 root root 4096 Jun 28? 2011 etc

drwxr-xr-x.2 root root 4096 Jun 28? 2011 games

drwxr-xr-x.2 root root 4096 Jun 28? 2011 include

lrwxrwxrwx.1 root root?? 12 Sep 24 10:50 java ->jdk1.7.0_79/??? #查看

drwxr-xr-x.8 uucp? 143 4096 Apr 11? 2015 jdk1.7.0_79

drwxr-xr-x.2 root root 4096 Jun 28? 2011 lib

drwxr-xr-x.2 root root 4096 Jun 28? 2011 lib64

drwxr-xr-x.2 root root 4096 Jun 28? 2011 libexec

drwxr-xr-x.2 root root 4096 Jun 28? 2011 sbin

drwxr-xr-x.5 root root 4096 Aug? 8 21:38 share

drwxr-xr-x.2 root root 4096 Jun 28? 2011 src

2.將jdk添加到環(huán)境變量

[root@server2local]# vim /etc/profile???

?79 export JAVA_HOME=/usr/local/java

?80 exportCLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib

?81 export PATH=$PATH:$JAVA_HOME/bin

[root@server2local]# source /etc/profile

3.測試

[root@server2local]# echo $JAVA_HOME??? #測試添加環(huán)境變量是否成功

/usr/local/java

[root@server2local]# echo $CLASSPATH

.:/usr/local/java/lib:/usr/local/java/jre/lib

[root@server2local]# echo $JAVA_HOME ????

/usr/local/java

[root@server2local]# cd java?????? #測試java的環(huán)境是否配置成功

[root@server2java]# vim test.java??? #寫個簡單的測試頁

? 1 public class test{

? 2????????public static void main(String[] args)

? 3????????{

? 4???????????????? System.out.println("Helloworld!");

? 5????????}

? 6 }

[root@server2java]# javac test.java??? #鏈接生成test.class文件

[root@server2mnt]# java test??? #執(zhí)行

Helloworld!

?

2.tomcat的安裝服務(wù)端2

1.解壓、作軟鏈接

[root@server2mnt]# tar zxf apache-tomcat-7.0.8.tar.gz -C /usr/local/? #解壓

[root@server2mnt]# cd /usr/local/

[root@server2local]# ls

apache-tomcat-7.0.8? etc???include? jdk1.7.0_79? lib64???sbin?? src

bin????????????????? games? java????lib????????? libexec? share

[root@server2local]# ln -s apache-tomcat-7.0.8/ tomcat???#作軟鏈接

[root@server2local]# ll

total48

drwxr-xr-x.9 root root 4096 Sep 24 11:11 apache-tomcat-7.0.8

drwxr-xr-x.2 root root 4096 Jun 28? 2011 bin

drwxr-xr-x.2 root root 4096 Jun 28? 2011 etc

drwxr-xr-x.2 root root 4096 Jun 28? 2011 games

drwxr-xr-x.2 root root 4096 Jun 28? 2011 include

lrwxrwxrwx.1 root root?? 12 Sep 24 10:50 java ->jdk1.7.0_79/

drwxr-xr-x.8 uucp? 143 4096 Sep 24 11:02 jdk1.7.0_79

drwxr-xr-x.2 root root 4096 Jun 28? 2011 lib

drwxr-xr-x.2 root root 4096 Jun 28? 2011 lib64

drwxr-xr-x.2 root root 4096 Jun 28? 2011 libexec

drwxr-xr-x.2 root root 4096 Jun 28? 2011 sbin

drwxr-xr-x.5 root root 4096 Aug? 8 21:38 share

drwxr-xr-x.2 root root 4096 Jun 28? 2011 src

lrwxrwxrwx.1 root root?? 20 Sep 24 11:12 tomcat-> apache-tomcat-7.0.8/???? #查看

[root@server2local]# cd tomcat/bin

[root@server2bin]# ./startup.sh???? #開啟tomcat

?

2.測試

[root@server2bin]#cd ..

[root@server2tomcat]# vim webapps/ROOT/test.jsp??? #寫測試儀頁

? 1 server2-The Time is <%=newjava.util.Date()%>

#測試 172.25.29.2:8080

172.25.29.2:8080/test.jsp

在服務(wù)端3上進(jìn)行同樣的配置也可以用scp把服務(wù)端2上java和tomcat目錄傳過去如下

[root@server2local]# scp -r java/ tomcat/ 172.25.29.3:/usr/local/

在進(jìn)行系統(tǒng)環(huán)境里加上java的配置啟動tomcat即可

?

3.Nginx添加sticky? (服務(wù)端1)

1.nginx負(fù)載均衡已經(jīng)配置好了

在前面的博客里已經(jīng)寫過nginx源碼安裝這里就不再重復(fù)了也可以參考前面的博客

[root@server1~]# cd /usr/local/lnmp/nginx/conf??

[root@server1conf]# vim nginx.conf

?20????upstream wen {

?21?????????????? ??server 172.25.29.2:8080;??? #輪詢機(jī)制

?22???????????????? server 172.25.29.3:8080;

?23????????}

?49????????location / {

?50????????????root?? html;

?51????????????index? index.html index.jspindex.php index.htm;?? #默認(rèn)發(fā)布目錄

?52????????}

?

?68????????location ~ \.jsp$ {

?69????????????proxy_pass?? http://wen;

?70????????}

[root@server1conf]# nginx -t??? #檢測

nginx:the configuration file /usr/local/lnmp/nginx/conf/nginx.conf syntax is ok

nginx:configuration file /usr/local/lnmp/nginx/conf/nginx.conf test is successful

[root@server1conf]# nginx -s reload??? #刷新

測試 172.25.29.1

?

172.25.29.1/test.jsp

刷新之后

也就是server2 和server3相互交替

?

2.改變負(fù)載均衡機(jī)制為sticky

由于nginx是輪詢機(jī)制如果在訪問頁面如填寫信息時突然卡住刷新之后就會跳到另一個server上就得重新開始填寫。但是Nginx里有很多算法其中的ip_hash也可以防止這些問題。使用ip_hash有一個問題是當(dāng)客戶端和服務(wù)器之間使用cdn內(nèi)容分發(fā)系統(tǒng)高速緩存時客戶端的訪問到達(dá)cdn由cdn訪問服務(wù)器識別的ip是cdn的ip那么將集中于訪問后臺的一臺服務(wù)器(x相當(dāng)于DDOS***)會加速服務(wù)器的損壞。那么為了防止這些問題就有用下面的算法sticky不是nginx里自帶的nginx-sticky-module為 nginx 的第三方模塊,使 nginx 支持 sticky 模式,所以需要將包加入配置、重新編譯、安裝nginx

?

1.重新源碼安裝nginx添加一個模塊

[root@server1local]# nginx -s stop ? ? ?#關(guān)閉nginx

[root@server1mnt]# tar zxf nginx-goodies-nginx-sticky-module-ng-c78b7dd79d0d.tar.gz #解壓

[root@server1mnt]# ls

nginx-1.8.1.tar.gz

nginx-goodies-nginx-sticky-module-ng-c78b7dd79d0d

nginx-goodies-nginx-sticky-module-ng-c78b7dd79d0d.tar.gz

?

[root@server1nginx-1.8.1]# make clean??? #清除上一次的緩存文件

rm-rf Makefile objs

[root@server1nginx-1.10.1]# ./configure --prefix=/usr/local/lnmp/nginx?? #重新配置--with-http_ssl_module--with-http_stub_status_module--add-module=/mnt/nginx-goodies-nginx-sticky-module-ng-c78b7dd79d0d

[root@server1nginx-1.8.1]# make???? #編譯、鏈接

[root@server1nginx-1.8.1]# make install?? #安裝

[root@server1nginx-1.8.1]#cd /usr/local/lnmp/nginx/conf

[root@server1conf]# vim nginx.conf

?18????????upstream westos{

?19???????????????? sticky;???? #使用sticky

?20???????????????? server 172.25.29.2:8080;

?21???????????????? server 172.25.29.3:8080;

[root@server1local]# nginx -t?? #檢測nginx文件里是否有錯誤

nginx:the configuration file /usr/local/lnmp/nginx/conf/nginx.conf syntax is ok

nginx:configuration file /usr/local/lnmp/nginx/conf/nginx.conf test is successful

[root@server1local]# nginx?? #啟動

2.測試

測試 172.25.29.1/test.jsp

刷新之后結(jié)果不變還是

?

4交叉存儲避免單點故障添加memcached服務(wù)端2

配置好之后如果一臺服務(wù)器宕機(jī)了那么這臺服務(wù)器正在運行的業(yè)務(wù)將直接結(jié)束正在存儲的數(shù)據(jù)丟失。為了防止這些問題Tomcat1將session存儲到Tomcat2的memcached中當(dāng)Tomcat2的memcached不可用時Tomcat1將session存儲到自己的memcached上Tomcat2則正好相反。使用這種配置就避免了單點故障。

1.安裝、開啟memcached、寫測試頁

[root@server2ROOT]# yum install -y memcached????? #安裝memcached

[root@server2ROOT]# /etc/init.d/memcached start????? #開啟memcached

Startingmemcached:??????????????????????????????????????? [? OK? ]

[root@server2tomcat]# bin/shutdown.sh?? #關(guān)閉Tomcat

[root@server2ROOT]# vim test.jsp??? #寫一個jsp的測試頁面

? 1 <%@ page contentType="text/html;charset=GBK" %>

? 2 <%@ page import="java.util.*"%>

? 3<html><head><title>Cluster AppTest</title></head>

? 4 <body>

? 5 Server Info:

? 6 <%

? 7 out.println(request.getLocalAddr() + ": " + request.getLocalPort()+"<br>");%??? >

? 8 <%

? 9 out.println("<br> ID " + session.getId()+"<br>");

?10 String dataName =request.getParameter("dataName");

?11 if (dataName != null &&dataName.length() > 0) {

?12 String dataValue =request.getParameter("dataValue");

?13 session.setAttribute(dataName, dataValue);

?14 }

?15 out.print("<b>Sessionlist</b>");

?16 Enumeration e =session.getAttributeNames();

?17 while (e.hasMoreElements()) {

?18 String name = (String)e.nextElement();

?19 String value =session.getAttribute(name).toString();

?20 out.println( name + " = " +value+"<br>");

?21 System.out.println( name + " = "+ value);

?22 }

?23 %>

?24 <form action="test.jsp"method="POST">

?25 name:<input type=text size=20name="dataName">

?26 <br>

?27 key:<input type=text size=20name="dataValue">

?28 <br>

?29 <input type=submit>

?30 </form>

?31 </body>

?32 </html>


[root@server2ROOT]# cd /usr/local/tomcat/lib

[root@server2mnt]# ls /mnt/update/????? #先前下載好的包

asm-3.2.jar????????????????????????????? minlog-1.2.jar

kryo-1.04.jar???????????????????????????msm-kryo-serializer-1.6.3.jar

kryo-serializers-0.10.jar??????????????? reflectasm-1.01.jar

memcached-session-manager-1.6.3.jar????? spymemcached-2.7.3.jar

memcached-session-manager-tc7-1.6.3.jar

[root@server2mnt]# cd /usr/local/tomcat/lib/

[root@server2lib]# mv /mnt/update/* . ???#將包移動到指定路徑

[root@server2lib]# ls

annotations-api.jar?????????????????memcached-session-manager-tc7-1.6.3.jar

asm-3.2.jar????????????????????????? minlog-1.2.jar

catalina-ant.jar????????????????????msm-kryo-serializer-1.6.3.jar

catalina-ha.jar????????????????????? reflectasm-1.01.jar

catalina.jar???????????????????????? servlet-api.jar

catalina-tribes.jar????????????????? spymemcached-2.7.3.jar

ecj-4.2.1.jar??????????????????????? tomcat-api.jar

el-api.jar?????????????????????????? tomcat-coyote.jar

jasper-el.jar??????????????????????? tomcat-dbcp.jar

jasper.jar?????????????????????????? tomcat-i18n-es.jar

jsp-api.jar????????????????????????? tomcat-i18n-fr.jar

kryo-1.04.jar??????????????????????? tomcat-i18n-ja.jar

kryo-serializers-0.10.jar??????????? tomcat-jdbc.jar

memcached-session-manager-1.6.3.jar? tomcat-util.jar

[root@server2lib]# cd ..

UsingCATALINA_BASE:?? /usr/local/tomcat

UsingCATALINA_HOME:?? /usr/local/tomcat

UsingCATALINA_TMPDIR: /usr/local/tomcat/temp

UsingJRE_HOME:??????? /usr/local/java

UsingCLASSPATH:?????? /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar

[root@server2tomcat]# vim conf/context.xml??? #添加節(jié)點及節(jié)點失效后該怎么存儲

?34 <ManagerclassName="de.javakaffee.web.msm.MemcachedBackupSessionManager"

?35memcachedNodes="n1:172.25.29.2:11211,n2:172.25.29.3:11211"? ???#結(jié)點

?36 failoverNodes="n1"?????????? #當(dāng)n2失效時存儲到n1上

?37requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"

?38transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderF??? actory"

?39 />

[root@server2tomcat]# bin/startup.sh?? #開啟Tomcat

服務(wù)端3和服務(wù)端2的配置基本相同唯一不同的是上面提到的/usr/local/tomcat/conf/context.xml里的36行把“n1”改成“n2”可以用scp傳過去再做修改。

?

2.測試

測試 172.25.29.1/test.jsp

添加用戶

添加完成

添加3個用戶

??????????????????????????? ??

[root@server2tomcat]# tail -f logs/catalina.out ??? ?#查看日志

Sep28, 2016 11:39:53 PM de.javakaffee.web.msm.serializer.kryo.KryoTranscoder<init>

INFO:Starting with initialBufferSize 102400 and maxBufferSize 2048000

Sep28, 2016 11:39:53 PM de.javakaffee.web.msm.MemcachedSessionServicestartInternal

INFO:MemcachedSessionService finished initialization, sticky true, operation timeout1000, with node ids [n2] and failover node ids [n1]

Sep28, 2016 11:39:53 PM org.apache.coyote.AbstractProtocol start

INFO:Starting ProtocolHandler ["http-bio-8080"]

Sep28, 2016 11:39:53 PM org.apache.coyote.AbstractProtocol start

INFO:Starting ProtocolHandler ["ajp-bio-8009"]

Sep28, 2016 11:39:53 PM org.apache.catalina.startup.Catalina start

INFO:Server startup in 1921 ms

user1= 111

user2= 222

user1= 111?? ??? ??? #上面創(chuàng)建的用戶

user2= 222

user1= 111

user3= 333

^C

[root@server2tomcat]# telnet 172.25.29.3 11211? #遠(yuǎn)程登陸服務(wù)端3查看是否是否寫進(jìn)入11211是memcached的端口號

Trying172.25.29.3...

Connectedto 172.25.29.3.

Escapecharacter is '^]'.

get50B9BAB1CBB21C9BF884CC3613560752-n2?? #get后面的是上面截圖里的ID

VALUE50B9BAB1CBB21C9BF884CC3613560752-n2 2048 125

[1]WWqt2Wqt01WqtWqt#50B9BAB1CBB21C9BF884CC3613560752-n2

user2

222user1

111user3

333?????? #大概可以看出來添加的用戶

END

quit

Connectionclosed by foreign host.

?

[root@server2tomcat]# bin/shutdown.sh? #關(guān)閉Tomcat1

UsingCATALINA_BASE:?? /usr/local/tomcat

UsingCATALINA_HOME:?? /usr/local/tomcat

UsingCATALINA_TMPDIR: /usr/local/tomcat/temp

UsingJRE_HOME:??????? /usr/local/java

UsingCLASSPATH:??????/usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar

?

當(dāng)關(guān)閉Tomcat1續(xù)輸入數(shù)據(jù)時并沒有中斷而是跳到Tomcat2上且數(shù)據(jù)并未丟失

[root@server2tomcat]# telnet 172.25.29.3 11211???? #遠(yuǎn)程登陸服務(wù)端3

Trying172.25.29.3...

Connectedto 172.25.29.3.

Escapecharacter is '^]'.

get50B9BAB1CBB21C9BF884CC3613560752-n2

VALUE50B9BAB1CBB21C9BF884CC3613560752-n2 2048 137

[1]WWqt2Wqu01WquWqu4#50B9BAB1CBB21C9BF884CC3613560752-n2


user2 ?222user1 ?111user4 ?444user3 ?333?? #大概可以看到數(shù)據(jù)還是寫入服務(wù)端3

END

quit

Connectionclosed by foreign host.

轉(zhuǎn)載于:https://blog.51cto.com/12087746/1857864

總結(jié)

以上是生活随笔為你收集整理的Tomcat+Nginx+Memcached集群部署的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。