经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 数据库/运维 » Memcached » 查看文章
Tomcat+Nginx+Memcached综合案例别来无恙-
来源:cnblogs  作者:别来无恙-  时间:2019/6/28 10:23:12  对本文有异议

Tomcat+Nginx+Memcached综合案例

说明

通过Nginx解析静态页面并将动态负载均衡调度给后面的多个TomcatTomcat解析java动态程序。

由于http是无状态的协议,你访问了页面A,然后在访问B,http无法确定这2个访问来自一个人,因此要用cookie或session来跟踪用户,根据授权和用户身份来显示不同的页面。比如用户A登陆了,那么能看到自己的个人信息,而B没登陆,无法看到个人信息。还有A可能在购物,把商品放入购物车,此时B也有这个过程,你无法确定A,B的身份和购物信息,所以需要一个session ID来维持这个过程。所以就用到了session管理。

官网文档

环境规划

主机hostname环境
192.168.1.31 nginx.cluster.com nginx(yum安装)
192.168.1.32 tomcat1.cluster.com tomcat-9.0
192.168.1.33 tomcat2.cluster.com tomcat-9.0
192.168.1.34 memcached.cluster.com memcached(yum安装)

关闭防火墙,selinux;时间同步;host绑定等基本配置 (步骤略)

具体步骤

本案例所使用的tomcatjdk、和tomcat-session相关的jar包下载地址
链接:https://pan.baidu.com/s/1ESm_RSrFx77kWObmCt1DQw
提取码:f64n

memcached部署

说明:memcached这里不需要配置太多,安装即可,然后检查端口是否处于监听中。tomcat服务器能成功连接即可

  1. [root@memcached ~]# yum -y install memcached
  2. [root@memcached ~]# systemctl enable memcached
  3. [root@memcached ~]# systemctl start memcached
  4. [root@memcached ~]# lsof -i:11211
  5. COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
  6. memcached 4419 memcached 26u IPv4 51021 0t0 TCP *:memcache (LISTEN)
  7. memcached 4419 memcached 27u IPv6 51022 0t0 TCP *:memcache (LISTEN)
  8. memcached 4419 memcached 28u IPv4 51025 0t0 UDP *:memcache
  9. memcached 4419 memcached 29u IPv6 51026 0t0 UDP *:memcache

nginx部署

1)安装nginx

  1. [root@nginx ~]# yum -y install nginx
  2. [root@nginx ~]# nginx -v
  3. nginx version: nginx/1.12.2

2)配置文件配置

  1. # 创建一个虚拟主机
  2. [root@nginx ~]# vim /etc/nginx/conf.d/www.conf
  3. upstream tomcat {
  4. server 192.168.1.32:8080 weight=1;
  5. server 192.168.1.33:8080 weight=1;
  6. }
  7. server {
  8. listen 88 default_server;
  9. server_name localhost;
  10. root /opt/project;
  11. #已jsp结尾的动态程序调度给tomcat去处理
  12. location ~.*\.jsp$ {
  13. proxy_pass http://tomcat;
  14. proxy_set_header Host $host;
  15. proxy_set_header X-Forwarded-For $remote_addr;
  16. }
  17. error_page 404 /404.html;
  18. location = /40x.html {
  19. }
  20. error_page 500 502 503 504 /50x.html;
  21. location = /50x.html {
  22. }
  23. }
  24. # 创建测试文件
  25. [root@nginx ~]# mkdir /opt/project
  26. [root@nginx ~]# echo "<h1>Nginx IP:192.168.1.31</h1>" >> /opt/project/index.html

tomcat部署

详细安装参考:https://www.cnblogs.com/yanjieli/p/11092350.html
两台tomcat服务器都要执行下面的所有操作,也可以在一台上面执行,然后copy过去。
1)上传软件包到服务器,编写一个临时使用的安装脚本

  1. [root@tomcat1 ~]# cat install_tomcat.sh
  2. #!/bin/bash
  3. #----安装java环境
  4. function InstallJava (){
  5. tar xf jdk-8u211-linux-x64.tar.gz -C /usr/local/
  6. ln -s /usr/local/jdk1.8.0_211 /usr/local/java
  7. sed -i.ori '$a export JAVA_HOME=/usr/local/java \nexport PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH \nexport CLASSPATH=.$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$JAVA_HOME/lib/tools.jar' /etc/profile
  8. source /etc/profile
  9. java -version
  10. }
  11. #----安装tomcat环境
  12. function InstallTomcat (){
  13. tar xf apache-tomcat-9.0.21.tar.gz -C /usr/local/
  14. ln -s /usr/local/apache-tomcat-9.0.21 /usr/local/tomcat
  15. echo "export TOMCAT_HOME=/usr/local/tomcat" >> /etc/profile
  16. source /etc/profile
  17. }
  18. InstallJava
  19. InstallTomcat
  20. /usr/local/tomcat/bin/startup.sh

2)执行脚本

  1. [root@tomcat1 ~]# bash install_tomcat.sh
  2. java version "1.8.0_211"
  3. Java(TM) SE Runtime Environment (build 1.8.0_211-b12)
  4. Java HotSpot(TM) 64-Bit Server VM (build 25.211-b12, mixed mode)
  5. Using CATALINA_BASE: /usr/local/tomcat
  6. Using CATALINA_HOME: /usr/local/tomcat
  7. Using CATALINA_TMPDIR: /usr/local/tomcat/temp
  8. Using JRE_HOME: /usr/local/java
  9. Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
  10. Tomcat started.
  11. [root@tomcat1 ~]# ss -nltp |grep :80
  12. LISTEN 0 100 :::8080 :::* users:(("java",pid=2993,fd=54))
  13. LISTEN 0 1 ::ffff:127.0.0.1:8005 :::* users:(("java",pid=2993,fd=74))
  14. LISTEN 0 100 :::8009 :::* users:(("java",pid=2993,fd=59))

3)下载memcached-session-manager等相关软件包并copytomcat安装目录的lib目录中

  1. [root@tomcat1 ~]# mkdir tools && cd tools
  2. [root@tomcat1 ~]# wget http://repo1.maven.org/maven2/de/javakaffee/msm/memcached-session-manager/2.3.0/memcached-session-manager-2.3.0.jar
  3. [root@tomcat1 ~]# wget http://repo1.maven.org/maven2/de/javakaffee/msm/memcached-session-manager-tc9/2.3.0/memcached-session-manager-tc9-2.3.0.jar
  4. [root@tomcat1 ~]# wget http://repo1.maven.org/maven2/de/javakaffee/msm/msm-kryo-serializer/2.3.0/msm-kryo-serializer-2.3.0.jar
  5. [root@tomcat1 ~]# wget http://repo1.maven.org/maven2/net/spy/spymemcached/2.12.2/spymemcached-2.12.2.jar
  6. [root@tomcat1 ~]# wget https://repo1.maven.org/maven2/de/javakaffee/kryo-serializers/0.42/kryo-serializers-0.42.jar
  7. [root@tomcat1 ~]# wget https://repo1.maven.org/maven2/com/esotericsoftware/reflectasm/1.11.0/reflectasm-1.11.0.jar
  8. [root@tomcat1 ~]# wget https://repo1.maven.org/maven2/com/esotericsoftware/minlog/1.3.0/minlog-1.3.0.jar
  9. [root@tomcat1 ~]# wget https://repo1.maven.org/maven2/com/esotericsoftware/kryo/4.0.0/kryo-4.0.0.jar
  10. [root@tomcat1 ~]# wget https://repo1.maven.org/maven2/org/ow2/asm/asm/7.0/asm-7.0.jar
  11. [root@tomcat1 ~]# wget http://repo1.maven.org/maven2/org/objenesis/objenesis/3.0.1/objenesis-3.0.1.jar
  12. [root@tomcat1 tools]# cp ./* /usr/local/tomcat/lib/

4)编辑配置文件,添加连接memcached

  1. # No-Stick模式
  2. [root@tomcat1 ~]# vim /usr/local/tomcat/conf/context.xml
  3. # 在<Context>和</Context>里面加上下面一段
  4. <!-- 这里的ipmemcached服务器的IP,如果有多个memcached服务器,用逗号隔开 -->
  5. <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
  6. memcachedNodes="n1:192.168.1.34:11211"
  7. lockingMode="auto"
  8. sticky="false"
  9. requestUriIgnorePattern= ".*\.(png|gif|jpg|css|js)$"
  10. sessionBackupAsync= "false"
  11. sessionBackupTimeout= "100"
  12. copyCollectionsForSerialization="true"
  13. transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory" />

5)准备测试文件

  1. [root@tomcat1 ~]# rm -rf /usr/local/tomcat/webapps/*
  2. [root@tomcat1 ~]# mkdir /usr/local/tomcat/webapps/ROOT
  3. [root@tomcat1 ~]# vim /usr/local/tomcat/webapps/ROOT/index.jsp
  4. SessionID:<%=session.getId()%> <BR>
  5. SessionIP:<%=request.getServerName()%> <BR>
  6. SessionPort:<%=request.getServerPort()%>

6)重启tomcat

  1. [root@tomcat1 ~]# /usr/local/tomcat/bin/shutdown.sh
  2. [root@tomcat1 ~]# /usr/local/tomcat/bin/startup.sh
  3. [root@tomcat1 ~]# lsof -i:8080
  4. COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
  5. java 4672 root 63u IPv6 52084 0t0 TCP *:webcache (LISTEN)

7)测试

访问tomcat1:

访问tomcat2:

访问nginx默认页面:

访问jsp动态程序:

通过上面的访问可以看出,访问静态页面时nginx自身处理,当访问jsp动态的时候会调度给tomcat去处理。并且当一个浏览器访问后,便会一直访问这一个,so,这样就达到了session会话保持。

 

补充

memcached-session-manager 参数说明:

  1. memcachedNodes 必选项,memcached的节点信息,多个memcached节点,中间需要使用空格
  2. failoverNodes="n2" 表示当前session保持到n1memcached节点上
  3. failoverNodes 可选项,不能使用在non-sticky sessions模式。故障转移配置节点,多个使用空格或逗号分开,配置某个节点为备份节点,
  4. 当其他节点都不可用时才会存储到备份节点,官方建议配置为和tomcat同服务器的节点。
  5. 理由如下:
  6. 假如有两台服务器m1,m2,其中m1部署tomcatmemcached节点n1m2部署memcached节点n2
  7. 如果配置tomcatfailoverNodes值为n2或者不配置,则当服务器m1挂掉后n1tomcat中保存的session会丢失,而n2中未保存或者只保存了部分session
  8. 这就造成 部分用户状态丢失。
  9. 如果配置tomcatfailoverNodes值为n1,则当m1挂掉后因为n2中保存了所有的session,所以重启tomcat的时候用户状态不会丢失。
  10. 为什么n2中保存了所有的session? 因为failoverNodes配置的值是n1,只有当n2节点不可用时才会把session存储到n1,所以这个时候n1中是没有保存任何session的。
  11. lockingMode 可选值,默认none,只对non-sticky有效。
  12. requestUriIgnorePattern 可选值,制定忽略那些请求的session操作,一般制定静态资源如css,js一类的。
  13. sessionBackupAsync 可选值,默认true,是否异步的方式存储到memcached
  14. sessionBackupTimeout 可选项,默认100毫秒,异步存储session的超时时间。

相关软件包jar包下载:

  1. memcached-session-manager 下载地址:http://repo1.maven.org/maven2/de/javakaffee/msm/
  2. http://repo1.maven.org/maven2/de/javakaffee/msm/memcached-session-manager/2.3.0/memcached-session-manager-2.3.0.jar
  3. http://repo1.maven.org/maven2/de/javakaffee/msm/memcached-session-manager-tc9/2.3.0/memcached-session-manager-tc9-2.3.0.jar
  4. msm-kryo-serializer 下载地址:http://repo1.maven.org/maven2/de/javakaffee/msm/msm-kryo-serializer/
  5. http://repo1.maven.org/maven2/de/javakaffee/msm/msm-kryo-serializer/2.3.0/msm-kryo-serializer-2.3.0.jar
  6. spymemcached 下载地址:http://repo1.maven.org/maven2/net/spy/spymemcached/
  7. http://repo1.maven.org/maven2/net/spy/spymemcached/2.12.2/spymemcached-2.12.2.jar
  8. serializers 下载地址:https://repo1.maven.org/maven2/de/javakaffee/kryo-serializers/
  9. https://repo1.maven.org/maven2/de/javakaffee/kryo-serializers/0.42/kryo-serializers-0.42.jar
  10. reflectasm 下载地址:https://repo1.maven.org/maven2/com/esotericsoftware/reflectasm
  11. https://repo1.maven.org/maven2/com/esotericsoftware/reflectasm/1.11.0/reflectasm-1.11.0.jar
  12. minlog 下载地址:https://repo1.maven.org/maven2/com/esotericsoftware/minlog
  13. https://repo1.maven.org/maven2/com/esotericsoftware/minlog/1.3.0/minlog-1.3.0.jar
  14. kryo 下载地址:https://repo1.maven.org/maven2/com/esotericsoftware/kryo
  15. https://repo1.maven.org/maven2/com/esotericsoftware/kryo/4.0.0/kryo-4.0.0.jar
  16. asm 下载地址:https://repo1.maven.org/maven2/org/ow2/asm/asm/
  17. https://repo1.maven.org/maven2/org/ow2/asm/asm/7.0/asm-7.0.jar
  18. objenesis 下载地址:http://repo1.maven.org/maven2/org/objenesis/objenesis/
  19. http://repo1.maven.org/maven2/org/objenesis/objenesis/3.0.1/objenesis-3.0.1.jar

 

原文链接:http://www.cnblogs.com/yanjieli/p/11100951.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号