码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 基于nginx的tomcat负载均衡和集群(超简单)


    今天看到"基于apache的tomcat负载均衡和集群配置 "这篇文章成为javaEye热点。

    略看了一下,感觉太复杂,要配置的东西太多,因此在这里写出一种更简洁的方法。

     

    要集群tomcat主要是解决SESSION共享的问题,因此我利用memcached来保存session,多台TOMCAT服务器即可共享SESSION了。

     

    你可以自己写tomcat的扩展来保存SESSION到memcached。

    这里推荐使用memcached-session-manager这个开源项目(http://code.google.com/p/memcached-session-manager/ ),下面简称msm。

    如何安装nginx、memcached、tomcat这些就不多说了。

    先说明一下测试环境:

    tomcat1、nginx、memcached安装在192.168.1.11

    tomcat2安装在192.168.1.101

    下面分步实现基于nginx的tomcat负载均衡和集群配置

     

    一,tomcat集群

        1,先下载msm及其依赖包

        http://memcached-session-manager.googlecode.com/files/memcached-session-manager-1.3.0.jar

     

        http://memcached-session-manager.googlecode.com/files/msm-javolution-serializer-jodatime-1.3.0.jar

     

    http://memcached-session-manager.googlecode.com/files/msm-javolution-serializer-cglib-1.3.0.jar

     

    http://spymemcached.googlecode.com/files/memcached-2.4.2.jar

    http://memcached-session-manager.googlecode.com/files/javolution-5.4.3.1.jar

     

    2,将这5个包放到$TOMCAT_HOME/lib目录下

    3,修改$TOMCAT_HOME/conf/server.xml

     

      1. <Context docBase="E:/java_codes/TestSession/WebContent" path="" reloadable="true" >
      2. <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
      3. memcachedNodes="n1:localhost:11211"
      4. requestUriIgnorePattern=".*\.(png|gif|jpg|css|js)$"
      5. sessionBackupAsync="false"
      6. sessionBackupTimeout="100"
      7. transcoderFactoryClass="de.javakaffee.web.msm.serializer.javolution.JavolutionTranscoderFactory"
      8. copyCollectionsForSerialization="false"
      9. />
      10. </Context>
       

     这里的memcachedNodes是填写memcached节点,多个节点时可以以空隔分开,如:

     n1:localhost:11211 n2:localhost:11212

     sessionBackupTimeout的单位为分钟

     

     E:/java_codes/TestSession/WebContent 替换成你的WEB目录

     

      修改后重启两个TOMCAT即可,这个时候已经解决SESSION的共享问题.

    二,配置nginx实现负载均衡

       以我的nginx.conf为例

      1. #user nobody;
      2. worker_processes 1;
      3. error_log logs/error.log;
      4. events {
      5. worker_connections 1024;
      6. }
      7. http {
      8. include mime.types;
      9. default_type application/octet-stream;
      10. sendfile on;
      11. keepalive_timeout 65;
      12. #gzip on;
      13. upstream www.docyeah.com {
      14. server 192.168.1.11:8080;
      15. server 192.168.1.101:8080;
      16. }
      17. server {
      18. listen 80;
      19. server_name www.docyeah.com;
      20. charset utf-8;
      21. location / {
      22. root html;
      23. index index.html index.htm;
      24. proxy_pass http://www.docyeah.com;
      25. proxy_set_header X-Real-IP $remote_addr;
      26. client_max_body_size 100m;
      27. }
      28. location ~ ^/(WEB-INF)/ {
      29. deny all;
      30. }
      31. error_page 500 502 503 504 /50x.html;
      32. location = /50x.html {
      33. root html;
      34. }
      35. }
      36. }

     

    将www.docyeah.com替换成你的域名

    192.168.1.11和192.168.1.101替换成你服务器的IP

     

    OK,已经完成。启动nginx即可。

    这是我采用的负载均衡及集群方案,希望大家拍砖.

     

    补充:nginx在配置upstream时,有两个参数:
    ip_hash(同一IP一直使用同一台server服务)
    weight(server的使用权重,数值越大,nginx分发的请求越多)

    通过配合这两个参数,能粗糙地解决session共享的问题。
    对于一些不是太依赖session的应用,或者只有用户登录时保存,那么我认为可以用Cookies代替。
    即使真的要Session共享,我认为手动写代码保存到Memcached比为Tomcat加插件好,这样能获得更好的可控性。

  • 相关阅读:
    【Java】LambdaStream
    基于C语言开发实现的港口调度问题
    【560. 和为 K 的子数组】
    基于java+springboot+mybatis+vue+elementui的简历系统
    PLSQL工具 数据库连接名的设置
    CANopen协议 学习笔记
    Quartz.Net 主要概念介绍和吐槽
    一个对安卓日志输出功能的优化
    Android UI freeze分析
    深度学习课后week3 编程( 带有一个隐藏层的平面数据分类)
  • 原文地址:https://blog.csdn.net/oligaga/article/details/132800832
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号