欢迎使用CSDN-markdown编辑器

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 memcached
systemctl enable memccached

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

systemctl stop firewalld
systemctl 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  -t
nginx 

访问
http://30.67.133.153/myapp/Test

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值