【问题标题】:Tomcat load balancer solutionsTomcat 负载均衡器解决方案
【发布时间】:2012-03-10 19:01:07
【问题描述】:

我正在寻找与 Tomcat 一起使用的良好负载平衡器。我们的应用程序不会在会话上下文中存储任何内容,因此为同一用户重定向到同一服务器并不重要。我只是想要一些可以以循环方式或基于每个服务器的单独负载对请求进行排队的东西。我还希望能够将应用程序服务器添加到可用于处理请求的服务器中,而无需重新启动负载平衡器。如果这很重要,我们将在 linux 上运行该应用程序。

【问题讨论】:

  • 您在这里说的应用程序有多大?如果只是两个服务器来处理负载,您可以在 Web 服务器级别执行此操作。如果您正在查看 5 台以上的服务器,则可能需要查看商业解决方案。

标签: java tomcat load-balancing


【解决方案1】:

如果您只需要 linux 上的软件负载平衡器,请使用 Apache Webserver2、Mod-Jk 和 Tomcat 集群:

在您的网络服务器上:

  1. 安装 apache2 和 modjk:

    sudo apt-get install apache2 libapache2-mod-jk
    sudo a2enmod jk
    
  2. 创建一个可用于您的 apache2 的 workers.properties 文件。在某些情况下,它会在您的 /etc/apache2 目录中自动创建。该文件包含 Tomcat 服务器的 lb 配置、节点名称、ips 和端口,即:

    worker.list=balancer,lbstats
    
    #node1
    worker.node1.type=ajp13
    worker.node1.host=YOUR_TOMCAT-NODE-IP
    worker.node1.port=YOUR_TOMCAT-NODE-AJP-PORT
    worker.node1.lbfactor=10
    
    #more nodes here ... (change name in between)
    
    #lb config
    worker.balancer.type=lb
    #turn off sticky session
    worker.balancer.sticky_session=0
    
    #add all defined node names to this list (node1, node2, ...):
    worker.balancer.balance_workers=node1
    
    #lb status information (optional)
    worker.lbstats.type=status
    
  3. 如果没有自动创建,请在 apache2 配置文件中创建一个 Mod-Jk 部分。

    JkWorkersFile   /etc/apache2/workers.properties
    JkLogFile       /var/log/apache2/mod_jk.log
    JkShmFile       /tmp/jk-runtime-status
    JkLogLevel      info
    
  4. 将您的应用程序挂载到负载均衡器(apache2 配置文件):

    JkMount /My-Java-App-Name       balancer
    JkMount /My-Java-App-Name/*     balancer
    
    JkMount /modjkstatus lbstats
    

在您的 Tomcat 服务器上:

  1. 安装 tomcat(使用 tarball 包,恕我直言,比 apt 版本好得多)。更改 server.xml:

    1. 禁用 server.xml 中的 http 连接器(通过注释掉它们)。

    2. 启用 AJP/1.3 连接器并设置您在 workers.properties 中为此节点定义的端口。

    3. 将具有正确节点名称的 jvmRoute 添加到“Engine”元素:

    4. 为最简单的配置添加一个“集群”元素

        <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster" />
      
  2. 将您的应用程序部署到所有 tomcat 并将 distributable 元素添加到您的应用程序 web.xml。

       <distributable/>
    
  3. 确保网络服务器可以访问您的 Tomcat 服务器上的 ajp 端口,而其他任何人都不能。

  4. 依次启动webserver和tomcat,查看日志(/var/log/apache2/mod_jk.log也是)。

  5. 访问您的应用:http://mywebserver.com/MyApp

  6. 检查(并拒绝访问)lb 状态页面http://mywebserver.com/modjkstatus

【讨论】: