tmcat集群,nginx起到负载均衡的作用,作为一个统一入口,转发请求。由于项目部署再两台服务器上面,所以 就涉及session共享的问题。
环境:
tomcat8
应用服务器1:172.26.5.189;
应用服务器2: 172.26.5.88;
memcached服务器:172.26.5.74;
注:memcached服务和nginx部署在一台服务器上面。看你的服务器资源而定。
分别在 应用服务器1:172.26.5.189 和 应用服务器2: 172.26.5.88 部署tomcat服务。由于再两台服务器。不存在端口冲突问题。所以默认端口配置即可。
为了区分项目部署再服务器1 还是服务器2.我们再项目里面做了一点点改变。
@GetMapping("index")
public Map index(HttpServletRequest request){
Map<String, Object> map = new HashMap<>();
map.put("age", 22);
map.put("name", "@EQuaker");
map.put("session", request.getSession().getId()); // 会话id
map.put("server", 2); //用于区分服务器
//kafkaTemplate.send("topic-2", JSON.toJSONString(map));
return map;
}
把项目的war报放在 tomcat的webapp下面。项目会自动解压上线。
这时候,我们分别访问服务。
首先在服务器上面安装nginx.自行百度喽。
主要更改的配置如下:
http {
include mime.types;
default_type application/octet-stream;
server_names_hash_bucket_size 128;
client_header_buffer_size 32k;
upstream TEST{
server 172.26.5.189:8080;
server 172.26.5.88:8080;
}
######################## default ############################
server {
listen 80;
server_name _;
access_log /data/wwwlogs/access_nginx.log combined;
root /data/wwwroot/default;
index index.html index.htm index.php;
#error_page 404 /404.html;
#error_page 502 /502.html;
location / {
proxy_pass http://TEST;
}
}
}
主要就是添加 upstream结点。和/ 根节点拦截转发。
下面我们通过80 端口访问。
主要变化:
1,server会在1和2 之间变换。说明 请求被转发到两个服务器上面去了。这里的算法是默认轮询。
2,session会一直变化。因为我们是通过nginx访问tomcat,并没有直接访问服务。所以session会一直变化。这也是我们下一步主要做的操作。
memcached的安装方式自行百度。这里要注意的一个点是外网访问的问题。这里可以通过telnet 172.26.5.74 11211 测试。linux的话可以通过lsof -i:11211 (ps -ef|grep memcached)等。
因为涉及到序列化的问题。这里需要一系列的jar包。
链接:https://pan.baidu.com/s/10B4Q8lcoZfP2A1fPOvm3KA
提取码:ab9u
复制这段内容后打开百度网盘手机App,操作更方便哦。
自行提取,把所有的jar放在 tomcat/lib下面。
还需要修改server.xml 配置文件;
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">
<Context path="TEST" docBase="/usr/local/apache-tomcat-8.5.58/webapps/TEST" reloadable="true">
<Manager
className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
memcachedNodes="n1:172.26.5.74:11211"
sticky="false"
sessionBackupAsync="false"
lockingMode="uriPattern:/path1|/path2"
requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"/>
</Context>
<!-- SingleSignOn valve, share authentication between web applications
Documentation at: /docs/config/valve.html -->
<!--
<Valve className="org.apache.catalina.authenticator.SingleSignOn" />
-->
<!-- Access log processes all example.
Documentation at: /docs/config/valve.html
Note: The pattern used is equivalent to using pattern="common" -->
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log" suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
</Host>
主要是再host->manger 下面增加了session共享配置服务及序列化支持。
两台应用服务器做一样的操作。下一步重启服务器。并访问 nginx服务器。
主要变化:
1,server再1和2 之间变化,说明服务转发了,已经在负载均衡了。
2,session 不会再频繁变换。说明做到了是session共享.
至此,tomcate+Nginx+memcached,搭建的session共享集群完毕。
因篇幅问题不能全部显示,请点此查看更多更全内容