编程技术分享平台

网站首页 > 技术教程 正文

Nginx+Tomcat实现负载均衡及Session共享

xnh888 2024-09-25 23:36:34 技术教程 16 ℃ 0 评论

第一部分 环境介绍

部署环境:

Host1:Nginx、Memcached、Tomcat1

Host2:Tomcat2

Tomcat_version:8.5.59

第二部分 Nginx+Tomcat实现负载均衡

1、nginx及tomcat的安装省略

2、nginx负载均衡配置:

http标签中定义tomcat集群:

upstream tomcat_server {

#不用ip_hash

server 101.200.229.38:8080;

server 101.200.162.214:8080;

}

server中设置代理,将请求转发给后端tomcat集群处理:

server {

listen 80;

server_name www.xxx.com;

location / {

proxy_pass http://tomcat_server;

proxy_set_header Host $host;

proxy_set_header X-Real-IP $remote_addr;

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

}

}

关于nginx负载均衡的策略,有以下几种方式:

2.1 ip_hash:

根据客户端地址,同一个ip地址分配给同一台后端服务器处理,这样可以解决session的问题。但是如果该后端服务器宕掉,则session会失效。

缺点:局域网内的用户使用的是同一个公网IP,这对于ip_hash来说,会被认为是同一个客户端,因此总是会将这个公网ip的请求交给同一个后端服务器来处理,因此起不到负载均衡的作用。

2.2 轮询:

每一个请求,按照时间顺序,逐一分配给后端不同的服务器。

缺点:需要对后端服务器做session共享。

2.3 权重:

每个请求,根据后端服务器的权重值来转发。权重越大,表明该服务器处理能力相对越高。主要用于后端服务器性能不同的情况。

第三部分 利用MSM框架实现session共享

Github项目地址:https://github.com/magro/memcached-session-manager

1、msm框架主要使用缓存(如memcache、redis)来存储session信息,后端服务器都可以从该缓存中读写session。

2、tomcat序列化(Serializable)策略介绍:

序列化是指将对象以字符串形式在网络上传输、存储、读取的过程。

java有以下几种序列化框架:

  • 默认java
  • kryo-serializer
  • javolution-serializer
  • xstream-serializer
  • flexjson-serializer

每种序列化框架需要的依赖jar包不同,本例使用默认java框架

3、准备需要的jar包:

Github上提供了下载链接:https://github.com/magro/memcached-session-manager/wiki/SetupAndConfiguration

本例需要的jar包及版本如下:


memcached-session-manager-tc8-2.3.0.jar

memcached-session-manager-2.3.0.jar

spymemcached-2.12.3.jar

注意:对各jar的版本兼容性要求极高!

将以上jar包放在tomcat/lib/目录下。

4、安装memcached,启动memcached:

/usr/local/memcached/bin/memcached -m 512 -d -u memcache -p 11011 -c 1024

-m表示分配内存大小

-d表示后台运行

-u表示以某一用户运行

-p表示监听的端口号

-c表示接受的连接数


修改tomcat/conf/context.xml配置:

<Context>标签中添加如下内容:

memcache单节点:

<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"

memcachedNodes="n1:10.10.0.103:11211"

sticky="false"

sessionBackupAsync="false"

lockingMode="auto"

sessionBackupTimeout= "1000"

requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)#34;

transcoderFactoryClass="de.javakaffee.web.msm.JavaSerializationTranscoderFactory"

/>


memcache多节点:

<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"

memcachedNodes="n1:10.10.0.103:11211,n2:10.10.0.103:11611"

sticky="false"

sessionBackupAsync="false"

lockingMode="auto"

sessionBackupTimeout= "1000"

requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)#34;

transcoderFactoryClass="de.javakaffee.web.msm.JavaSerializationTranscoderFactory"

/>


以上配置后,重启tomcat即可。

附件:session共享所需要的jar包下载地址!


http://note.youdao.com/noteshare?id=557039f704e0282bd34d5609a400b1dd

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表