nginx+tomcat+memcache

简介:
nginx+tomcat+memcache

nginx支持静态页面tomcat支持动态页面如果所在的nginx服务器想要进行动态页面则需与tomcat结合此时nginx只是起到转发的作用对jsp的处理是由tomcat来处理的。

一 搭建jdk

先搭建java环境

1  tar zxf jdk-7u79-linux-x64.tar.gz -C /usr/local/    ###解压到/usr/local下###

2 ln -s jdk1.7.0_79/ java            ###软链接方便版本升级后的使用###

3 vim /etc/profile            ###/etc/profile是全局定义所有用户可以用/.bash_profile是局部定义只有某个用户启动时才能加载###

内容

export JAVA_HOME=/usr/local/java        ###使用变量$JAVA_HOME如果路径改变了修改会比较方便###

export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib    ###该环境变量是当我们再写java程序时要应用别人写好的类时要让java解释器知道到哪里去找这个类##        

export PATH=$PATH:$JAVA_HOME/bin            ###系统路径一定要先写不然系统的一些命令可能会找不到不过可以用绝对路径去执行系统和命令,设置好path对java应用程序鄂运行会比较方便比如javacjavajavah等等###

4 source /etc/profile            ###使文件生效###




测试是否搭建好

[root@server2 ~]#vim test.java

内容

public class test {
    public static void main(String[] arge){
        System.out.println("Hello World!");    


}
    }

[root@server3 ~]# javac test.java 
[root@server3 ~]# java test
Hello World!

具体过程如下
[root@server2 ~]# tar zxf jdk-7u79-linux-x64.tar.gz -C /usr/local/
[root@server2 ~]# cd /usr/local/
[root@server2 local]# ls
bin  etc  games  include  jdk1.7.0_79  lib  lib64  libexec  sbin  share  src
[root@server2 local]# ln -s jdk1.7.0_79/ java
[root@server2 local]# ll
total 44
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 Jul 22 10:00 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 Jul 18 11:24 share
drwxr-xr-x. 2 root root 4096 Jun 28  2011 src
[root@server2 local]# vim /etc/profile
[root@server2 local]# source /etc/profile
[root@server2 local]# echo $PATH
/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin:/usr/local/java/bin
[root@server2 local]# cd 
[root@server2 ~]# vim test.java
[root@server2 ~]# javac test.java 
[root@server2 ~]# java test
Hello World!




二 搭建tomcat

安装包下载可以去http//tomcat.apache.org/下载
主要是进行动态页面的处理jsp
默认发布目录/usr/local/tomcat/webapps/ROOT
默认发布网页index.jsp

1 tar  zxf apache-tomcat-7.0.37.tar.gz -C /usr/local/    ###解压到/usr/local/###

2 ln -s apache-tomcat-7.0.37/ tomcat             ###软链接方便版本升级###

3 /usr/local/tomcat/bin/startup.sh/            ###开启服务###

4 netstat -antlp            ###查看端口为8080


测试

[root@server1 ROOT]# pwd
/usr/local/tomcat/webapps/ROOT
[root@server1 ROOT]# vim test.jsp

内容

the time is:<%=new java.util.Date() %>

172.25.78.1:8080/test.jsp





三 将nginx和tomcat整合再一起


1 vim /usr/local/lnmp/nginx/conf/nginx.conf

内容

location  ~ \.jsp$ {
                proxy_pass http://172.25.38.2:8080;
        }


2 nginx -s reload

测试
访问172.25.38.1/test.jsp



####作负载均衡###

jsp的页面很消耗资源要做一个负载均衡

1 vim /usr/local/lnmp/nginx/conf/nginx.conf

内容
upstream  westos{
        server 172.25.38.2:8080;
        server 172.25.38.3:8080;
        server 127.0.0.1:8000 backup;
        }

location  ~ \.jsp$ {
                proxy_pass http://westos;
        }

2 nginx -s reload


####ip_hash###

再作负载均衡时不指定算法则默认是轮询会导致用户在提交请求时就会到另一个tomcat则就要再次提交请求原有的session就会丢失假如是一个购物车则用户加一个东西就会不见因此是不合理的就要用到ip_hash则只要是同一个ip发出的请求就不会跳到别的tomcat上

1 vim /usr/local/lnmp/nginx/conf/nginx.conf

内容:
upstream  westos{
        ip_hash;
        server 172.25.38.2:8080;
        server 172.25.38.3:8080;
        }

location  ~ \.jsp$ {
                proxy_pass http://westos;
        }


2 nginx -s reload

tomcat的发布页面

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>







####tomcat+memcache###

采用session对象存储特定用户会话所需的信息这样当用户在应用程序的web页之间跳转时存储在session对象中的变量将不会丢失而是在整个用户会话中一直存在下去
采用ip_hash虽然解决了用户请求可以保存再一个tomcat上但是如果该tomcat出现故障了就会导致session的丢失因此要再加一个额外的备份存储memcache使得tomcat故障了还能够去memcache拿到信息

Tomcat-1 (T1) 将 session 存储在 memcached-2 (T2)上。只有当 M2 不可用时,T1 才将session 存储在 memcached-1 上(M1 是 T1 failoverNode)。使用这种配置的好处是,当 T1 和 M1 同时崩溃时也不会丢失 session 会话,避免单点故障。
server2

1 yum  install  -y   memcached

2 将memcached-session-manager-tc7-1.6.3.jar等放在/usr/local/tomcat/lib

3 vim  /usr/local/tomcat/conf/context.xml

 <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
memcachedNodes="n1:172.25.78.2:11211,n2:172.25.78.3:11211"
failoverNodes="n1"        ###当n2出现故障时找n1节点###
requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"
/>
</Context>

4 /usr/local/tomcat/bin/shutdown.sh    ###关闭tomcat如果没有开启tomcat则忽略这步###

5 /usr/local/tomcat/bin/startup.sh    ###开启tomcat###

6 tail -f /usr/local/tomcat/logs/catalina.out    ###监控日志信息查看是否出错###  





server3

1 yum  install  -y   memcached


2 将memcached-session-manager-tc7-1.6.3.jar等放在/usr/local/tomcat/lib

3 vim  /usr/local/tomcat/conf/context.xml
<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
memcachedNodes="n1:172.25.78.2:11211,n2:172.25.78.3:11211"
failoverNodes="n2"    ###当n1出现故障时找n2节点###
requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"
/>
</Context>

4 /usr/local/tomcat/bin/shutdown.sh    ###关闭tomcat如果没有开启tomcat则忽略这步###

5 /usr/local/tomcat/bin/startup.sh    ###开启tomcat###

6 tail -f /usr/local/tomcat/logs/catalina.out    ###监控日志信息查看是否出错###  



测试
访问172.25.78.1/test.jsp

tge contentType="text/html; charset=GBK" %> Server Info: 172.25.78.2 : 8080

ID 3281D8620D9C032D509F68999319E338-n2
Session listuser2 = 123
user1 = 123
user5 = 789
name:
key:
he time is:Mon Jul 24 03:46:41 CST 2017 


[root@server3 tomcat]# telnet localhost 11211
Trying ::1...
Connected to localhost.
Escape character is '^]'.
 get 3281D8620D9C032D509F68999319E338-n2
VALUE 3281D8620D9C032D509F68999319E338-n2 2048 125
W]p~j]p01]p]p#3281D8620D9C032D509F68999319E338-n2user2123user1123user5789
END

###如果将server2的tomcat关闭####

仍然访问172.25.78.1/test.jsp会发现原有的session并没有丢失这是因为保存在了缓存里
tge contentType="text/html; charset=GBK" %> Server Info: 172.25.78.3 : 8080

ID 3281D8620D9C032D509F68999319E338-n2
Session listuser2 = 123
user1 = 123
user4 = 345
user5 = 789
name:
key:
he time is:Mon Jul 24 03:52:52 CST 2017 

get  3281D8620D9C032D509F68999319E338-n2
VALUE 3281D8620D9C032D509F68999319E338-n2 2048 137
W]p~j]qt01]qt]qt#3281D8620D9C032D509F68999319E338-n2user2123user1123user4345user5789
END





####nginx算法sticky####

客户端的请求---> cdn ----> nginx ---> server 时如果nginx负载均衡的算法使用ip_hash那么经过cdn后nginx得到的ip均变成了cdn的ip那么所有经过cdn的客户请求均会到同一个后端服务器这样就导致只有一个后端服务器相应请求是不合理的但使用stick算法那么是根据cookie来进行负载均衡cookie是服务器分给浏览器的因此浏览器的cookie是不同的服务器就可以根据cookie来进行处理

原来编译的nginx1.12没有sticky模块而现有的模块nginx-goodies-nginx-sticky-module-ng-c78b7dd79d0d.tar.gz与1.12版本不匹配所以重新编译1.10版本的nginx

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

2 ./configure --prefix=/opt/nginx/  --user=nginx --group=nginx  --with-http_stub_status_module --with-http_ssl_module --with-threads --with-file-aio --add-module=/root/nginx-goodies-nginx-sticky-module-ng-c78b7dd79d0d

3 make  &&  make    install

4 vim   /opt/nginx/cong/ngin.conf


 upstream westos  {
                sticky;
                server 172.25.38.2:8080;
                server 172.25.38.3:8080;

        }


location ~ \.jsp$ {
                proxy_pass http://westos;
        }


5 /opt/nginx/sbin/nginx  -s  reload














本文转自blueclo51CTO博客,原文链接:http://blog.51cto.com/12774272/1950249 ,如需转载请自行联系原作者


相关文章
|
2月前
|
缓存 前端开发 JavaScript
tomcat核心技术+Nginx性能调优技术
而Tomcat的基本配置,每个配置项也基本上对应了Tomcat的组件结构,如果要用一张图来形象展现一下Tomcat组成的话
37 1
|
2月前
|
Java 应用服务中间件 Apache
简介Nginx,Tomcat和 Apache
简介Nginx,Tomcat和 Apache
简介Nginx,Tomcat和 Apache
|
3月前
|
负载均衡 应用服务中间件 nginx
百度搜索:蓝易云【Nginx和tomcat实现负载均衡教程】
至此,你已经成功地使用Nginx和Tomcat实现了负载均衡。Nginx将根据配置的负载均衡策略将客户端请求分发到多个Tomcat服务器上,以提高系统的性能和可用性。请注意,在实际生产环境中,还需要进行其他配置和优化,如健康检查、会话保持等,以满足具体的需求。
34 0
|
3月前
|
负载均衡 安全 前端开发
百度搜索:蓝易云【Nginx与Tomcat负载均衡-动静分离教程】
这些是将Nginx与Tomcat结合使用实现负载均衡和动静分离的基本步骤。根据您的需求和具体环境,可能还需要进行其他配置和调整。请确保在进行任何与网络连接和安全相关的操作之前,详细了解您的网络环境和安全需求,并采取适当的安全措施。
48 1
|
5月前
|
缓存 JavaScript 应用服务中间件
Nginx+Tomcat代理环境下JS无法完全加载问题
Nginx+Tomcat代理环境下JS无法完全加载问题
|
4月前
|
负载均衡 安全 应用服务中间件
Nginx + Tomcat+HTTP/HTTPS实现负载均衡实例
Nginx + Tomcat+HTTP/HTTPS实现负载均衡实例
178 0
|
4月前
|
负载均衡 算法 应用服务中间件
Nginx+Tomcat实现反向代理与负载均衡入门
Nginx+Tomcat实现反向代理与负载均衡入门
183 0
|
4月前
|
负载均衡 应用服务中间件 nginx
Docker配置1台Nginx+3台Tomcat做负载均衡
Docker配置1台Nginx+3台Tomcat做负载均衡
211 0
|
4月前
|
XML Java 应用服务中间件
# 如何 在同一个 服务器上同时部署 nginx 以及 tomcat
# 如何 在同一个 服务器上同时部署 nginx 以及 tomcat
75 0
|
4月前
|
XML 应用服务中间件 数据库
django2.2.4项目 部署 centos7.3 环境, tomcat与nginx相互切换
django2.2.4项目 部署 centos7.3 环境, tomcat与nginx相互切换
46 0