Windows 搭建 Tomcat 负载均衡

Tomcat是由Apache软件基金会属下 Jakarta 项目开发的 Servlet 容器,按照 Sun Microsystems 提供的技术规范,实现了对 Servlet和JavaServer Page(JSP)的支持,并提供了作为 Web 服务器的一些特有功能,如 Tomcat 管理和控制平台、安全局管理和 Tomcat 阀等。由于 Tomcat 本身也内含了 HTTP 服务器,因此也可以视作单独的 Web 服务器。但是,不能将 Tomcat 和 Apache HTTP 服务器混淆, Apache HTTP 服务器是用 C 语言实现的 HTTPWeb 服务器;这两个 HTTP web server 不是捆绑在一起的。Apache Tomcat 包含了配置管理工具,也可以通过编辑 XML 格式的配置文件来进行配置。

在使用过程中如果只启动一个 Tomcat 服务的时候会出现更新时候需要停止 Tomcat 服务的问题。为了实现服务器升级不影响用户使用,有必要配置两个tomcat在一个或多个服务器中。这时候我们就需要在服务器中搭建一个 Nginx 来做负载均衡。以下环境我是在本机测试,如果你有三台或更多的服务器可以自行修改

服务 端口
Nginx 8080
Tomcat 8081
Tomcat 8082

搭建方式和启动方式这里先不讲,可以自行百度。直接进入配置过程

  1. 配置 apache-tomcat\conf\server.xml 设置启动端口 8081 和 8082

    <Server port="8005" shutdown="SHUTDOWN">
      <Listener className="org.apache.catalina.startup.VersionLoggerListener" />
        ....
        <Connector port="8081" protocol="HTTP/1.1"
                   connectionTimeout="20000"
                   redirectPort="8443" />
    ---------------
    <Server port="8006" shutdown="SHUTDOWN">
      <Listener className="org.apache.catalina.startup.VersionLoggerListener" />
        ....
        <Connector port="8082" protocol="HTTP/1.1"
                   connectionTimeout="20000"
                   redirectPort="8443" />
    
  2. 修改 apache-tomcat\bincatalina.batstartup.bat 的 CATALINA_HOME 路径

    1. 在 catalina.bat 、startup.bat 添加下面这一句话,并把后面的路径替换为你自己安装的路径
    SET TOMCAT_HOME = "D:\tomcat-load-balance\apache-tomcat-9.0.41-8082"
    2. 全局替换 CATALINA_HOME 为 TOMCAT_HOME
    
  3. 配置 Nginx 实现负载均衡

    http{
    ...
        upstream tomcat.balance {
            server 127.0.0.1:8081 weight=1; # 配置weight,权重越高访问这个tomcat的频率就越高
            server 127.0.0.1:8082 weight=1;
        }
        server {
                listen        8080;
                server_name  localhost;
                location / {
                   proxy_pass   http://tomcat.balance;
                }
        }
    ...
    }
    
  4. 启动服务进行测试。

    如果发现启动之后日志显示乱码,请看我这篇文章 跳转链接 。启动之后查看一下 localhost:8080 看看是不是配置成功,为了好观察是不是已经负载均衡了可以修改一下 apache-tomcat\webapps\ROOT\index.jsp

    ...
    <div id="asf-box">
         <h1>${pageContext.servletContext.serverInfo} - 8081</h1>
    </div>
    ...
    
    ...
    <div id="asf-box">
         <h1>${pageContext.servletContext.serverInfo} - 8082</h1>
    </div>
    ...