zoukankan      html  css  js  c++  java
  • Windows下apache+tomcat负载均衡

    Windows下apache+tomcat负载均衡

    网上已经有很多的资料,但是很多都比较零碎,需要整合一起才能搭建出理想的负载均衡,正好前段时间搭建了windows与linux下的负载均衡,在此记录,供以后参考。这篇讲解windows下 apache+tomcat的负载均衡。

    1、搭建前准备

       Apache:httpd-2.2.15-win32-x86-no_ssl.msi

       Mod_jk:mod_jk-1.2.30-httpd-2.2.3.so 

       Tomcat:apache-tomcat-7.0.5 

    2、选择一个目录安装apache

       安装成功之后,右键点击apache图标,

     

    如下图所示:

       

    这里面可以停止和启动apache

    3、测试apache

     打开浏览器,输入:http://localhost/

     

    说明apache安装成功,网上也有说会出现It Works!但是我安装的这个版本没出现过。

    4、配置apache

      4.1在apache的安装目录Apache2.2conf下,新建workers.properties,与 uriworkermap.properties文件。

    Workers.properties:

    # worker 列表    

    worker.list=LB_worker,jkstatus    

    # 第一个worker的配置,名为worker_1    

    #tomcat 的主机地址,如不为本机,请填写ip地址    

    worker.worker_1.host=localhost

    #ajp13  端口号,对应tomcat配置文件server.xml中Connector port="8009",默认8009    

    worker.worker_1.port=8009    

    worker.worker_1.type=ajp13    

    # 负载的权重值,越高表示负载越大    

    worker.worker_1.lbfactor=3

    worker.worker_1.socket_keepalive=1

    worker.worker_1.socket_timeout=0

    worker.worker_1.retries=1

    # 第二个worker的配置,名为worker_2    

    worker.worker_2.host=localhost

    #ajp13  端口号,对应tomcat配置文件server.xml中Connector port="8090"    

    worker.worker_2.port=8090  

    worker.worker_2.type=ajp13    

    worker.worker_2.lbfactor=1

    worker.worker_2.socket_keepalive=1

    worker.worker_2.socket_timeout=0

    worker.worker_2.retries=1

     

    #LB_worker, 用于负载均衡分发的控制器    

    worker.LB_worker.type=lb    

    # 重试次数    

    worker.LB_worker.retries=1    

    # 指定负载的worker列表,用逗号分隔    

    worker.LB_worker.balance_workers=worker_1,worker_2

    # 配置session会话是否为粘性    

    # 这样负载均衡器lb就会尽量保持一个session,也就是使用户在一次会话中跟同一个Tomcat进行交互    

    worker.LB_worker.sticky_session=false

    # 如果sticky_session设为true时,此处一般设为false

    worker.LB_worker.sticky_session_force=false

    # 设置运行状态的控制器

    worker.jkstatus.type=status 

     

     

    Uriworkermap.properties:

    # 所有请求都由LB_worker 这个worker处理    

    /*=LB_worker    

    # 所有包含jkstatus请求的都由名称叫jkstatus的这个worker处理    

    /jkstatus=jkstatus

    上面两个配置文件表示本机配置要配置两个服务节点worker_1与worker_2,这两个节点需要与tomcat的配置文件关联。

    4.2 将mod_jk-1.2.30-httpd-2.2.3.so文件拷贝到Apache2.2modules目录下

    4.3 Apache2.2confextra目录下新增mod_jk.conf 

    mod_jk.conf :

    #load module mod_jk-1.2.31-httpd-2.2.3.so is for Apache 2.2.x.    

    LoadModule jk_module modules/mod_jk-1.2.30-httpd-2.2.3.so   

    # 配置 mod_jk conf    

    # 加载集群中的workers    

    JkWorkersFile conf/workers.properties    

    # 加载workers的请求处理分配文件            

    JkMountFile conf/uriworkermap.properties    

    # 指定jk的日志输出文件    

    JkLogFile logs/mod_jk.log    

    # 指定日志级别    

    JkLogLevel info

    4.4 在Apache2.2confhttpd.conf文件末尾加上:

       #module mod_jk config file  

       Include conf/extra/mod_jk.conf 

    4.5修改Apache2.2confhttpd.conf 

      将ServerName前#去掉,改为ServerName localhost:80

     Httpd.conf中有个 Listen 80,apache端口号这两个需要一致,如果修改端口号,这两个都要修改。

    到此,apache的基础配置完毕。

     

    5、配置tomcat

       Apache中我们配置了两个服务节点,所以tomcat服务器也需要两台,记作:tomcat1、tomcat2。

    5.1 修改tomcat1配置文件server.xml

    Ajp端口号:

        <!-- Define an AJP 1.3 Connector on port 8009 -->

    <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />

    5.2 与apache链接配置修改:

      <Engine name="Catalina" defaultHost="localhost" jvmRoute="worker_1">

    5.3 http端口号修改:

      <Connector port="8080" protocol="HTTP/1.1" 

                   connectionTimeout="20000" 

                   redirectPort="8443" />

    这个可以根据自己电脑端口号情况修改,只要端口号不冲突就行。

    5.4 修改网站部署路径,默认是读取apache-tomcat-7.0.5webapps目录下的部署包,我们也可以自己指定目录。

      <Host name="localhost"  appBase="D:appserverserverclasssc01"

                unpackWARs="true" autoDeploy="true">

    好了,apache+tomcat的基本配置已经完成了。

    6、测试 

     在tomcat1部署目录下新增一个test项目,里面包含一个Jsp页面,内容为:

    <%  
       System.out.println("this is tomcat server nod 1"); 
    %> 
    <% 
        out.println(request.getLocalAddr() + " : " + request.getLocalPort()+"<br>this is tomcat server nod 1"); 
    %> 

     在tomcat2部署目录下新增一个test项目,里面包含一个Jsp页面,内容为:

    <%  
       System.out.println("this is tomcat server nod 2"); 
    %> 
    <% 
        out.println(request.getLocalAddr() + " : " + request.getLocalPort()+"<br>this is tomcat server nod 2"); 
    %> 

    启动tomcat1、tomcat2

    在浏览器中输入:http://localhost:80/test/test.jsp

    按F5刷新

    还没有采用session粘连

    7、升级

    7.1 session复制

      7.1.1修改workers.propertie文件

           worker.LB_worker.sticky_session=true,表示session粘连。

      7.1.2修改项目的/WEB-INF/web.xml ,在<web-app>的末尾添加 <distributable/> 标记

     session复制后,F5刷新页面,大部分情况下都会保持请求同一台服务器。

    7.2 apache优化 

    有时候项目在运行的时候会出现很卡的情况,查询apache的启动日记可以看到,apache默认的线程数是:Child 300: Starting 64 worker threads. 

    可以根据需要扩展线程数量。

    7.2.1、Apache线程数和超时设置 (该段内容摘自网上,确实有效果)

     

        Apache的线程数控制文件为conf/exrtra/http-mpm.conf,需要在httpd.conf中将 Include conf/extra/httpd-mpm.conf前#去掉,以使得http-mpm.conf生效。

       在Windows系统中,起作用的是Winnt mpm段,

    <IfModule mpm_winnt_module>
        ThreadsPerChild      150
        MaxRequestsPerChild    0
    </IfModule>

         缺省的配置一般够用,但负荷大的网站就要修改了,否则网站一下就变慢或没有响应了。实际可以根据apache-status查看apache实时连接状态,我的服务器最后设置如下:

    <IfModule mpm_winnt_module>
        ThreadsPerChild    350
        ThreadLimit     350
        MaxRequestsPerChild    10000

    Win32DisableAcceptEx
    EnableMMAP Off
    EnableSendfile Off

    </IfModule>

        其中ThreadLimit是占用系统线程数限制,最好加上,否则会产生内存溢出导致Apache当掉。 

        MaxRequestsPerChild我理解是请求的缓存数,太小了影响性能,占用cpu时间,太大了占用内存资源,想象一下你网站的文件个数,然后自己设定,只要不为0就可以,防止内存溢出。

        ThreadsPerChlid是apache的线程数,就是开了这么多的线程来等待响应客户端请求,需要根据apache-status实时的监控调节,大了会占用过多内存,小了会导致连接不上。而且应该同时修改httpd-default.php超时设置来配合。

        在httpd.conf中去掉Include conf/extra/httpd-default.conf前的#以使httpd-default.php生效。

    其中调节以下参数

    Timeout 15 (连接超时缺省为300,太大了,缩小会减少同时连接数,即上面占用的实际线程数)

    KeepAlive On (开启可以提高性能,因为一个页面一般会有多个请求)

    MaxKeepAliveRequests 50 (这个数目自己根据网页内容调节)

    KeepAliveTimeout 5 (这个小于Timeout就行)

     

     

  • 相关阅读:
    EF使用CodeFirst创建数据库和表
    EF使用CodeFirst创建数据库和表
    MVC实现实现文件流打包成压缩包
    MVC实现实现文件流打包成压缩包
    MVC实现实现文件流打包成压缩包
    Visual Studio Code 开发 .NET Core 看这篇就够了
    Visual Studio Code 开发 .NET Core 看这篇就够了
    P1438 无聊的数列
    P3380 【模板】二逼平衡树(树套树)
    SP16580 QTREE7
  • 原文地址:https://www.cnblogs.com/programmerblog/p/3784181.html
Copyright © 2011-2022 走看看