欢迎使用CSDN-markdown编辑器

来源:互联网 发布:淘宝官方网站注册免费 编辑:程序博客网 时间:2024/06/09 18:04

nginx+tomcat+memcache实现负载均衡与session共享

利用nginx作为前端服务器,反向代理,将请求分发到后端tomcat服务器,同时使用两台memcache缓存服务器(主备)做session共享服务器,实现集群

先给出参考文档链接https://github.com/magro/memcached-session-manager/wiki/SetupAndConfiguration

我这里使用了3台centos7
node1: 30.67.133.151 环境: Java1.8+Tomcat8.5+memcache
node2: 30.67.133.152 环境: Java1.8+Tomcat8.5+memcache
node3: 30.67.133.153 环境:nginx

架构图

如下
这里写图片描述

1.在node1和node2上安装java和 memcache(两个节点都要做)

安装java

yum install java

安装memcache

yum install memcached

开启memcache并设置开机启动

systemctl start memcachedsystemctl enable memccached

memcache默认是没有开启认证的,我也不开启了
防火墙需要放行memcache端口11211,为了实验省事,我干脆关掉防火墙

systemctl stop firewalldsystemctl disable firewalld

2.下载tomcat8.5并配置

我并没有使用yum一键安装Tomcat,yum源的Tomcat版本有点旧了,默认Tomcat7,而且。。。。我在tomcat7上没有实验成功。。。。
你可以上Tomcat官网去下载新的Tomcat8,需要注意的是memcached-session-manager支持tomcat6,7,8,但是实现的jar包不同

2.1先下载Tomcat

wget http://mirror.bit.edu.cn/apache/tomcat/tomcat-8/v8.5.23/bin/apache-tomcat-8.5.23.tar.gz

解压并赋权给$CATALINA_HOME/bin下的catalina.sh

2.2下载相关jar
http://repo1.maven.org/maven2/de/javakaffee/msm/memcached-session-manager/2.1.1/memcached-session-manager-2.1.1.jar

http://repo1.maven.org/maven2/de/javakaffee/msm/memcached-session-manager-tc8/2.1.1/memcached-session-manager-tc8-2.1.1.jar

http://repo1.maven.org/maven2/net/spy/spymemcached/2.12.3/spymemcached-2.12.3.jar

http://repo1.maven.org/maven2/de/javakaffee/msm/msm-javolution-serializer/2.1.1/msm-javolution-serializer-2.1.1.jar

http://memcached-session-manager.googlecode.com/svn/maven/javolution/javolution/5.4.3.1/
最后一个包好像要翻墙的,反正我是下载不来,不过github上有,可以去找找,或者用我提供的

2.3将以上jar放置到$CATALINA_HOME/lib目录下

2.4编辑$CATALINA_HOME/conf/server.conf文件
在node1(第一台tomcat)的$CATALINA_HOME/conf/server.conf节点内加入以下内容

<Context path="/myapp" docBase="test.war"  reloadable="true">    <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager" memcachedNodes="n1:30.67.133.151:11211,n2:30.67.133.152:11211"failoverNodes="n1" requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"transcoderFactoryClass="de.javakaffee.web.msm.serializer.javolution.JavolutionTranscoderFactory"/></Context>

简单解释下上面的配置,首先,一个Context容器对应一个应用,path是访问的uri路径,docBase指明应用的位置,可以指向目录甚至war包,reloadable表示应用可以热部署,重载,memcachedNodes=”n1:30.67.133.151:11211,n2:30.67.133.152:11211”指明memcache的服务器IP及其端口,failoverNodes=”n1”表示把n1作为备用节点,n2才是主节点;requestUriIgnorePattern=”.*.(ico|png|gif|jpg|css|js)$”表示不理会这些静态请求,这些静态文件不需要做session保持

2.5 同2.4修改node2上的Tomcat文件
在node2上操作,修改Tomcat文件,加入以下内容,注意,此时failoverNodes=”n2”

<Context path="/myapp" docBase="test.war"  reloadable="true">    <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager" memcachedNodes="n1:30.67.133.151:11211,n2:30.67.133.152:11211"failoverNodes="n2" requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"transcoderFactoryClass="de.javakaffee.web.msm.serializer.javolution.JavolutionTranscoderFactory"/></Context>

把测试war包test.war包分别放到两个Tomcat的$CATALINA_HOME/webapps/下

2.6分别启动Tomcat 8

catlina.sh start

注意,如果启动失败,注意看报错信息,注意test.war和新添加的jar包的读写权限,确认没问题后访问
访问node1
http://30.67.133.151:8080/myapp/Test
这里写图片描述

访问node2
http://30.67.133.152:8080/myapp/Test
这里写图片描述

会看到session ID后面会带个后缀n2,表示session现在是存储在node2上

session共享部分完成,下面实现nginx反向代理

3.在node3上安装nginx

yum install nginx

没有源的话自己去找一下
安装完成后,修改配置文件nginx.conf
在http段里面加入

upstream tomcatservers{        server   30.67.133.151:8080;        server   30.67.133.152:8080;        }

把location / {
}
修改成代理到后端server

location  / {        http://tomcatservers/;}

测试下配置文件,没问题就启动

nginx  -tnginx 

访问
http://30.67.133.153/myapp/Test

这里写图片描述
刷新,可以看到请求在node1和node2之间轮询,而且session id不变
这里写图片描述

所需jar和配置文件等
链接:http://pan.baidu.com/s/1hszTpxa 密码:1f1z

原创粉丝点击