第一部分 环境介绍

部署环境:

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


最新文章

  1. 一个小白App开发需要了解的基本技术
  2. ASP.NET中的事件处理
  3. 使用sqlldr将文件中的数据导入到数据库
  4. MyBatis的动态SQL操作--删除
  5. LINUX利用Speedtest测速
  6. sourceTree每次拉取代码和提交代码都需要输入密码
  7. hdu_1286找新朋友(欧拉定理)
  8. MySql 动态语句
  9. PHP正则表达式二分法实现mysql盲注脚本
  10. 一场由like引发的事故
  11. lxml爬取实验
  12. VMware workstation pro 15 安装Ubuntu(图文教程)
  13. 2017-2018 ACM-ICPC Southwestern European Regional Programming Contest (SWERC 2017)
  14. java任务中嵌套任务
  15. 10款免费开源PHP框架
  16. Oracle AMERICAN改成简体中文
  17. 编程实现Linux系统的od功能
  18. 使用 pkg 打包分发 nodejs 应用
  19. c中堆栈的理解
  20. cisco 的ACL

热门文章

  1. UVALive 6467 Strahler Order(拓扑序列)
  2. 第二阶段Sprint2
  3. Task 4 求数组的连续子数组的最大和(团队合作)
  4. HDU3629(凸四边形的个数)
  5. 基于GUI的小学生四则运算系统
  6. 15_常用API_第15天(Object、String、StringBuffer、用户登陆注册)_讲义
  7. Java网络编程二:Socket详解
  8. vSphere Client 连接ESXi 或者是vCenter 时虚拟机提示VMRC异常的解决办法
  9. 微信 小程序布局 scroll-view
  10. 关于 WinScp 的一点使用经验