nginx+tomcat+memcached实现负载均衡与交叉存储

nginx+tomcat 实现动态页面访问及负载均衡

  1. 实验环境:
  • 主机角色:
  • server1 192.168.43.10 nginx memcache
  • server3 192.168.43.3 memcached tomcat
  • server4 192.168.43.4 memcached tomcat
  1. 软件下载:http://www.nginx.org
  • http://code.google.com/p/memcached-session-manager/
  • 或者在下面连接下载,从其中找到所需要的安装包,所做实验所需的所有安装包都在其中。
    链接:https://pan.baidu.com/s/1JrHj8v_1K2J-l2zZ1JSpbQ
    提取码:1234
apache-tomcat-7.0.37.tar.gz
jdk-8u121-linux-x64.rpm
msm.tar
nginx-goodies-nginx-sticky-module-ng-08a395c66e42.zip
  1. == nginx安装==(server1)
    nginx安装

  2. tomcat安装(server3&server4)
    在这里插入图片描述

  • 先安装jdk
yum install -y jdk-8u121-linux-x64.rpm
  • 安装tomcat
tar zxf apache-tomcat-7.0.37.tar.gz -C /usr/local/

  • 为了方便重命名一下
[root@server3 mnt]# cd /usr/local
[root@server3 local]# ls
apache-tomcat-7.0.37  etc    include  lib64    sbin   src
bin                   games  lib      libexec  share
[root@server3 local]# mv apache-tomcat-7.0.37/ tomcat
[root@server3 local]# ls
bin  etc  games  include  lib  lib64  libexec  sbin  share  src  tomcat
  • 开启tomcat
  • cd /usr/local/tomcat/bin
  • sh startup.sh开启
  • sh shutdown关闭
    在这里插入图片描述
  • 在浏览器分别访问 192.168.43.3:8080192.168.43.4:8080,出现下面页面表示安装并启动成功
    在这里插入图片描述
  1. nginx 的配置
  • 在server1上
[root@server1 ~]# cd /usr/local/openresty/nginx/conf/
[root@server1 conf]# vim nginx.conf

在这里插入图片描述
在这里插入图片描述

  • 重载服务
[root@server1 ~]#/usr/local/openresty/nginx/sbin/nginx/ -s reload
  • 在server3&server4中
  • cd /usr/local/tomcat/webapps/ROOT
  • vim test.jsp 写入一个动态测试页面
[root@server3 ROOT]# cat 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>
  • 在浏览器进行访问测试
    在这里插入图片描述
    在这里插入图片描述

nginx+tomcat+memcached实现交叉存储

nginx实现负载均衡和粘滞
  • sticky模块实现session粘滞

  • 在使用负载均衡的时候会遇到会话保持的问题,常用的方法有:

  1. ip hash,根据客户端的IP,将请求分配到不同的服务器上;

  2. cookie,服务器给客户端下发一个cookie,具有特定cookie的请求会分配给它的发布者,

  • 注意:cookie需要浏览器支持,且有时候会泄露数据
    Sticky工作原理 :

  • Sticky是nginx的一个模块,它是基于cookie的一种nginx的负载均衡解决方案,通过分发和识别cookie,来使同一个客户端的请求落在同一台服务器上,默认标识名为route。

1.客户端首次发起访问请求,nginx接收后,发现请求头没有cookie,则以轮询方式将请求分发给后端服务器。
2.后端服务器处理完请求,将响应数据返回给nginx。
3.此时nginx生成带route的cookie,返回给客户端。route的值与后端服务器对应,可能是明文,也可能是md5、sha1等Hash值
4.客户端接收请求,并保存带route的cookie。
5.当客户端下一次发送请求时,会带上route,nginx根据接收到的cookie中的route值,转发给对应的后端服务器。

  • 实现方法:
  • 在server1上对openresty,重新编译。增加sticky模块
 - yum install -y unzip
 - unzip nginx-goodies-nginx-sticky-module-ng-08a395c66e42.zip 

./congfigure --add-moudle=/mnt/nginx-goodies-nginx-sticky-module-ng-08a395c66e42添加模块

[root@server1 ~]# cd /openresty
[root@server1 openresty]# ls
openresty-1.17.8.2  openresty-1.17.8.2.tar.gz
[root@server1 openresty]# cd openresty-1.17.8.2/
[root@server1 openresty-1.17.8.2]# ls
build   configure  Makefile  README.markdown     util
bundle  COPYRIGHT  patches   README-windows.txt
[root@server1 openresty-1.17.8.2]# ./congfigure --add-module=/mnt/nginx-goodies-nginx-sticky-module-ng-08a395c66e42

gmake

  • 热部署
[root@server1 openresty-1.17.8.2]# cd /usr/local/openresty/nginx/sbin/
[root@server1 sbin]# ls
nginx
[root@server1 sbin]# mv nginx nginx.old##备份旧版本
[root@server1 sbin]# cd /openresty
[root@server1 openresty]# cd openresty-1.17.8.2/build/nginx-1.17.8/objs/
[root@server1 objs]# ls
addon         Makefile  nginx.8            ngx_auto_headers.h  ngx_modules.o
autoconf.err  nginx     ngx_auto_config.h  ngx_modules.c       src
[root@server1 objs]# cp nginx /usr/local/openresty/nginx/sbin/
##将添加模块后的nginx复制过去
  • 对nginx配置粘滞,避免请求来回跳,信息丢失

  • vim /usr/local/openresty/nginx/conf/nginx.conf
    在这里插入图片描述

[root@server1 conf]# /usr/local/openresty/nginx/sbin/nginx -t
nginx: the configuration file /usr/local/openresty/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/openresty/nginx/conf/nginx.conf test is successful
[root@server1 conf]# /usr/local/openresty/nginx/sbin/nginx -s reload
  • 在浏览器访问测试,出现粘滞,不发生跳转
    在这里插入图片描述

交叉存储

在这里插入图片描述

  • Tomcat-1 (T1) 将session存储在memcached-2 (T2)上。只有当M2不可用时,T1才将session存 储在memcached-1上(M1是T1 failoverNode)。
    目的:当T1和M1同时崩 溃时也不会丢失session会话,避免单点故障。
  • session的序列化方案官方推荐的有4种:
  1. java serialization
  2. msm-kryo-serializer
  3. msm-javolution-serializer
  4. msm-xstream-serializer

其中性能最好的序列化方案是Kryo,此实验我们采用kryo方式。

  • 在server3和server4中:
  • 把下面包放置到/usr/local/tomcat/lib目录中
[root@server3 jar]# ls
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
[root@server3 jar]# cp * /usr/local/tomcat/lib
[root@server3 jar]# cd /usr/local/tomcat/lib
  • 这些包可从上面我的连接中下载msm.tar包,并解压得到

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

<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
memcachedNodes="n1:192.168.0.91:11211,n2:192.168.0.92:11211"
failoverNodes="n1"##server4中此处写n2
requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"
/>
</Context>
  • server3中

在这里插入图片描述

  • server4中
    在这里插入图片描述

  • 改变配置之后重启tomcat

/usr/local/tomcat/bin/shutdown.sh 关闭tomcat
/usr/local/tomcat/bin/startup.sh 启动tomcat 
  • memcached安装 (server3&server4)
yum install memcached -y
service memcached start
  • 测试:在浏览器中

在这里插入图片描述

  • 关闭server4的tomcat

  • sh shutdown .sh
    在这里插入图片描述

  • server3中

  • 查看日志,发现数据都在server3上

  • cat /usr/local/tomcat/logs/catalina.out

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值