第一部分 环境介绍

部署环境:

Host1:Nginx、Memcached、Tomcat1

Host2:Tomcat2

Tomcat_version:8.0.38

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

1、nginx及tomcat的安装省略

2、nginx负载均衡配置:

http标签中定义tomcat集群:

upstream tomcat_server {
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有以下几种序列化框架:

kryo-serializer

javolution-serializer

xstream-serializer

flexjson-serializer

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

3、准备需要的jar包:

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

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

asm-5.1.jar

minlog-1.3.0.jar

javolution-5.5.1.jar

reflectasm-1.11.3.jar

msm-javolution-serializer-1.9.5.jar

memcached-session-manager-1.9.5.jar

memcached-session-manager-tc8-1.9.5.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>标签中添加如下内容:

<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
memcachedNodes="n1:127.0.0.1:11011"
sticky="false"
sessionBackupAsync="false"
failoverNodes=""
sessionBackupTimeout=""
lockingMode="uriPattern:/path1|/path2"
requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
transcoderFactoryClass="de.javakaffee.web.msm.serializer.javolution.JavolutionTranscoderFactory"/>

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

参考:http://blog.csdn.net/remote_roamer/article/details/51133790


Nginx+Tomcat+Memcache实现负载均衡及Session共享的更多相关文章

  1. keepalived+nginx+tomcat+redis实现负载均衡和session共享(原创)

    keepalived+nginx+tomcat+redis实现负载均衡和session共享 直接上链接,码了一天,就不再重写了,希望能帮到大家,有问题欢迎留言交流.

  2. Nginx+Tomcat8+Memcached实现负载均衡及session共享

    1> 基础环境 简易拓扑图: 2> 部署Tomcat [root@node01 ~]# ll -h ~ |egrep 'jdk|tomcat'-rw-r--r-- 1 root root ...

  3. nginx+tomcat集群负载均衡(实现session复制)

    转自:http://talangniao.iteye.com/blog/341512 架构描述 前端一台nginx服务器做负载均衡器,后端放N台tomcat组成集群处理服务,通过nginx转发到后面( ...

  4. windows系统下nginx+tomcat+redis做负载均衡和session粘滞附整套解决方案

    Nginx: 在nginx-1.8.0\conf目录下找到nginx.conf文件,打开文件修改文件中http{}中的内容,在http{}中加入 upstream localhost  { serve ...

  5. Nginx反向代理实现负载均衡以及session共享

    随着社会的发展和科技水平的不断提高,互联网在人们日常生活中扮演着越来越重要的角色,同时网络安全,网络可靠性等问题日益突出.传统的单体服务架构已不能满足现代用户需求.随之而来的就是各种分布式/集群式的服 ...

  6. nginx + tomcat + memcached 做负载均衡及session同步

    1.nginx配置 # For more information on configuration, see: # * Official English Documentation: http://n ...

  7. Nginx+Tomcat+Redis实现负载均衡、资源分离、session共享

    Nginx+Tomcat+Redis实现负载均衡.资源分离.session共享 CentOS安装Nginx http://centoscn.com/CentosServer/www/2013/0910 ...

  8. nginx+tomcat+redis负载均衡及session共享

    概述 本文档是用来详细描述 nginx+tomcat+redis负载均衡实现session共享 所需软件及下载地址 软件名称 下载地址 功能说明 Nginx-v1.6.0 http://nginx.o ...

  9. haproxy+tomcat实现负载均衡以及session共享(linux centos7环境)

    一.安装HAProxy 1.进入home目录,下载最新haproxy安装包. cd /home wget http://haproxy.1wt.eu/download/1.4/src/haproxy- ...

随机推荐

  1. 如何在IIS中设置HTTPS服务

    文章:https://support.microsoft.com/en-us/help/324069/how-to-set-up-an-https-service-in-iis 在这个任务中 摘要 为 ...

  2. H5页面的滚动条在windows浏览器下始终看到(灰色的不可用的)

    一般这种情况是在某些相关的div上设置了overflow:scroll属性,在mac系统的浏览器下均没有滚动条显示而在windows下的各个浏览器上均可以看到灰色的不可用的滚动条,这种情况我们需要在b ...

  3. datatables 排序 如何禁止

    $.extend( true, $.fn.dataTable.defaults, {     "searching": false,     "ordering" ...

  4. source和sh

    写了一个脚本[xxyScript.sh],用于判断tomcat是否启动 #!/bin/bash if [ -z "$(ps -ef | grep tomcat | grep -v 'grep ...

  5. laravel中的Contracts, ServiceContainer, ServiceProvider, Facades关系

    Contracts, ServiceContainer, ServiceProvider, Facades  Contracts 合同,契约,也就是接口,定义一些规则,每个实现此接口的都要实现里面的方 ...

  6. 3 vue-router 的默认hash 改mode:history去除#号 传参

    npm install vue-router --save      //安装 传参

  7. JS 字符串切割成数组

    var cheLin = "字*符*串" // console.log(cheLin) var array = cheLin.split("*");  arra ...

  8. 解决Linux关闭SSH,终端后运行程序终止问题(包括后台)

    问题描述: 每次SSH到服务器上,然后运行了一个自己写的服务端程序,比如 ./myserver.sh ,然后关闭ssh或者终端之后,发现服务不能访问. 简要分析下: 根据   这篇博文  的提示,ss ...

  9. true和false

    下面这些值在JavaScript中都是falsy: false 0 (数字零) "" (空字符串) null undefined NaN (一个特殊的Number值,意为Not-a ...

  10. 每日一问(如何在List中加入、设置、获取和删除其中的元素?)

    作为集合接口的一部分,对List接口所做的操作,最常见的就是增删查改了.这里总结下JAVA 中List接口及实现该接口的类实现这些操作的方法. 一.增加新的元素的方法 在Collection接口中定义 ...