Linux平台上搭建apache+tomcat负载均衡集群

传统的Java Web项目是通过tomcat来运行和发布的。但在实际的企业应用环境中,采用单一的tomcat来维持项目的运行是不现实的。tomcat 处理能力低,效率低,承受并发小(1000左右)。当用户请求较少时,单一的tomcat能够快速响应用户请求,但如果访问量一大,tomcat处理能力 跟不上,无法及时响应请求,就会造成用户等待;如果访问量过大,超出tomcat的承受能力,还可能导致tomcat超载故障。

    apache 是一个 web 服务器环境程序,可以作为web 服务器使用。Apache对并发请求的处理能力较tomcat强,对静态页面(如 asp,php,cgi,jsp等)的处理上比tomcat更为迅速,但apache不支持动态网页(需借助tomcat)。

    因此实际应用中可以搭建apache+tomcat负载均衡集群,一个apache 作为 Web 服务器,为网站的静态页面请求提供服务;并使用 tomcat 服务器作为一个 Servlet/JSP 插件,用于处理网站的动态页面。当用户通过浏览器发出请求时,客户请求首先会发送 到 apache,如果请求是静态文本则由 apache 解析,并把结果返回给客户端;如果是动态的请求,如 jsp,apache 会把解析工作交 给 tomcat,由 tomcat 进行解析(这首先要两者现实整合),tomcat 解析完成后,结果仍是通过 apache 返回给客户端。这样就 可以达到分工合作,实现负载均衡,提高系统的性能!

工具/原料

  • Linux系统:选用Redhat的开源版本CentOS操作系统(这里用CentOS 5.5版本)

  • JDK:选用版本为jdk1.7.0_45,安装包jdk-7u45-linux-i586.tar.gz

  • Apache:选用版本2.4.7,安装包httpd-2.4.7.tar.gz

  • Tomcat:选用版本7.0.47,安装包apache-tomcat-7.0.47.tar.gz

  • JK:选用版本1.2.37,安装包:tomcat-connectors-1.2.37-src.tar.gz

    方法/步骤

    1. 1

      找一台计算机做linux服务器,在上面安装CentOS操作系统,可以采用光盘安装、u盘安装等方式进行,网络上有很多相对完整的教程,这里就不做具体阐述了

      Linux平台上搭建apache+tomcat负载均衡集群
    2. 2

      在linux服务器上安装CentOS之后,事先将所有软件的安装包上传到linux服务器上,并放置在/software目录下。

      Linux平台上搭建apache+tomcat负载均衡集群
    3. 3

      JDK安装(1):如 图所示,因为CentOS自带有open jdk,需要将其删除,再重新安装oracle jdk。但如果直接在centOS的“应用程序--添加/删除软件--基本系统--java”中,删除java,与之相关的openoffice等软件, 也会自动随之删除,因此,在进行原有的jdk删除之前,最好先安装配置好新的jdk及相应的环境。

      Linux平台上搭建apache+tomcat负载均衡集群
    4. 4

      JDK安装(2):安装下载的oracle jdk。

        (1)在/usr/local目录下新建Java文件夹,并将安装包从/software目录拷贝到/usr/local/Java目录下(图形界面下直接“复制”-“粘贴”即可)。

             #cp /software/jdk-7u45-linux-i586.tar.gz/usr/local/Java

        (2)定位到文件夹/usr/local/Java。

            #cd /usr/local

        (3)解压安装包到当前目录。

             #tar -zxvf jdk-7u45-linux-i586.tar.gz

        (4)配置java的环境变量。

      为了系统中所有用户都能使用java环境,修改系统中的环境配置文件/etc/profile。在文件最后添加下列语句:

             export JAVA_HOME=/usr/local/Java/jdk1.7.0_45

             export CLASSPATH=.:$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib

             export PATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/jre/bin

        (5)修改完成以后,logout再重新登陆,或#source /etc/profile,使文件立即生效。

    5. 5

      JDK安装(3):查看与系统自带open jdk有关的包。

      在终端中输入“rpm -qa|grep gcj”,查看gcj的版本号,在这里得到的结果如图所示:

      Linux平台上搭建apache+tomcat负载均衡集群
    6. 6

      JDK安装(4):卸载系统自带open jdk。

        在终端中输入“yum -y remove javajava-1.4.2-gcj-compat-1.4.2.0-40jpp.115”,然后等待,等待系统卸载完自带的jdk。最终在终端中显示“Complete!”,卸载完成。

    7. 7

      JDK安装(5):卸载系统自带open jdk时出现问题及解决方案。

      【问题】使用yum安装或卸载软件,出现如图所示的提示错误。

          原因是系统进程已经有一个yum的update进程在运行了。可用ps -ef | grep update查看进程。解决办法是在命令行输入下面两条命令:

          #rm -f/var/run/yum.pid /sbin/service 

          #yum-updatesdrestart

      然后重新执行yum的删除命令即可。

      Linux平台上搭建apache+tomcat负载均衡集群
    8. 8

      JDK安装(6):查看jdk版本。

        在命令行中输入java -version命令可查看安装的jdk版本。如果显示出jdk安装的版本信息则说明jdk安装成功。

        如果出现如图所示的错误信息,则是因为系统的selinux的设置问题,即开启了selinux服务。解决办法如下:

      (1)打开/etc/selinux/config;

      (2)把selinux=enforcing改为selinux=disabled;

      (3)重启linux。

      Linux平台上搭建apache+tomcat负载均衡集群
    9. 9

      Apache安装(1):

      如下图所示,使用# rpm -qa|grep httpd,查看与httpd相关软件包。发现CentOS自带有apache,版本为2.2.3。因此在安装我们需要的apache之前,需要卸载CentOS自带的apache。

      Linux平台上搭建apache+tomcat负载均衡集群
    10. 10

      Apache安装(2):卸载CentOS自带Apache。

        上一步我们已经查看了与httpd相关的软件包,这一步要删除删除httpd。在命令行中使用:# rpm -e httpd。

        如果出现如图所示错误,说明还有一个相关的软件包没有删除,清除之,即:# rpm -e gnome-user-share。

      Linux平台上搭建apache+tomcat负载均衡集群
    11. 11

      Apache安装(3):再次删除httpd:# rpm -e httpd。

         可以使用参数--nodeps的意思就是不管各个程序包间的依赖关系。

      #rpm -e --nodeps httpd //这样不需要删除gnome-user-share了。

    12. 12

      Apache安装(4):重新安装自己下载的Apache

      (1)将安装包从/software目录拷贝到/usr/local目录下。

           #cp /software/httpd-2.4.7.tar.gz /usr/local

      (2)定位到文件夹/usr/local。

           #cd /usr/local

      (3)解压安装包到当前目录。

           #tar -zxvf httpd-2.4.7.tar.gz 

      (4)定位到文件夹/usr/local /httpd-2.4.7。

           #cd httpd-2.4.7

      (5)设置安装路径和需要编译的模块。

           # ./configure--prefix=/usr/local/apache --enable-so -enable-proxy -enable-proxy_http=shared--enable-module=so --enable-mods-shared=all --enable-proxy-ajp=shared  --enable-proxy-balancer -with-mpm=worker

      //备注:prefix定义apache的安装路径

      (6)编译通过,继续安装apache。

           #make && makeinstall 

    13. 13

      Apache安装(5):apache安装的check过程中出错,如图所示:APR not found 。原因是没有安装apr。

      在/usr/local目录下安装apr:

        #tar -zxvf apr-1.5.0.tar.gz

        #cd apr-1.5.0

        #./configure --prefix=/usr/local/apr

        #make

        #make install

      安装完成后再来configure apache。

      Linux平台上搭建apache+tomcat负载均衡集群
    14. 14

      Apache安装(6):apache安装的check过程中出错,如图所示:APR-util not found。原因是没有安装apr-util。 

      在/usr/local目录下安装apr-util:

        #tar -zxvf apr-util-1.5.3.tar.gz

        #cd apr-util-1.5.3

        #./configure--prefix=/usr/local/apr-util --with-apr=/usr/local/apr

        #make

        #make install

      安装完成后,在apache的./configure 最后增加--with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util,重新configure apache。

      Linux平台上搭建apache+tomcat负载均衡集群
    15. 15

      Apache安装(7)apache安装的check过程中出错,如图所示,原因是没有安装pcre。

      在/usr/local目录下安装pcre:

        # tar -zxvf pcre-8.32.tar.gz

        #cd pcre-8.32

        #./configure--prefix=/usr/local/pcre

        #make

        #make install

      安 装完成后,在apache的./configure 最后增加./configure 时加上参数 --with-apr=/usr/local/apr/ --with-apr-util=/usr/local/apr-util/--with-pcre=/usr/local/pcre,重新 configure apache。

      Linux平台上搭建apache+tomcat负载均衡集群
    16. 16

      Apache安装(8):编译通过,继续安装apache。 #make && makeinstall 。

    17. 17

      Apache配置及测试(1):安装完毕后,在测试启动apache之前先修改/apache/conf /httpd.conf。

        (1)查找ServerName,打开注释,将ServerName值改为对应的IP地址。

        (2)在DirectoryIndex中添加 index.jsp。

        (3)以下2个注释去掉:

             #Include conf/extra/httpd-mpm.conf

             #Include conf/extra/httpd-default.conf

      Linux平台上搭建apache+tomcat负载均衡集群
      Linux平台上搭建apache+tomcat负载均衡集群
    18. 18

      Apache配置及测试(2):保存httpd.conf文件的修改,启动apache服务。

         # /usr/local/apache/bin/apachectl start

         浏览器访问http://127.0.0.1,提示无法连接。说明apache没有成功启动。查看错误日志(/apache/logs /error_log),发现如图错误信息。原因是httpd.conf里面的mod_slotmem_shm.so没有加载。将httpd.conf 文件中的“#LoadModule slotmem_shm_module modules/mod_slotmem_shm.so”前的“#”去掉即可。

      Linux平台上搭建apache+tomcat负载均衡集群
    19. 19

      Apache配置及测试(3)

      (1)重新启动apache并查看httpd是否运行。

           # /usr/local/apache/bin/apachectl start

           # ps -ef | grep httpd

      (2)浏览器测试apache。在浏览器中访问http://127.0.0.1 。页面出现“It's Works!”字样即为成功。

      Linux平台上搭建apache+tomcat负载均衡集群
      Linux平台上搭建apache+tomcat负载均衡集群
    20. 20

      Apache的启动和关闭:

      在/usr/local/apache/bin下有可执行程序。

      (1)启动apache服务:# /usr/local/apache/bin/apachectl start

      (2)关闭apache服务:#  /usr/local/apache/bin/apachectlstop

      (3)重启apache服务:#  /usr/local/apache/bin/apachectl restart

    21. 21

      Tomcat安装、测试及配置(1):安装tomcat

      (1)将安装包从/software目录拷贝到/usr/local目录下(图形界面下直接“复制”-“粘贴”即可)。

           #cp /software/apache-tomcat-7.0.47.tar.gz/usr/local

      (2)定位到文件夹/usr/local/。

           #cd /usr/local

      (3)解压安装包到当前目录。

           #tar -zxvf apache-tomcat-7.0.47.tar.gz

      (4)修改配置文件,增加java的环境变量信息。在/usr/local/apache-tomcat-7.0.47/bin下有文件catalina.sh 在文件头部增加下列信息:

           exportJAVA_HOME=/usr/local//Java/jdk1.7.0_45

           exportCLASSPATH=.:$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib

           exportPATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/jre/bin

      (5)启动tomcat,结果如下图所示。

           #/usr/local/apache-tomcat-7.0.47/bin/startup.sh

      Linux平台上搭建apache+tomcat负载均衡集群
    22. 22

      Tomcat安装、测试及配置(2):浏览器测试tomcat是否启动

      测试tomcat。打开浏览器访问http://127.0.0.1:8080,可以看到tomcat的启动欢迎页面,证明tomcat配置正确。

      Linux平台上搭建apache+tomcat负载均衡集群
    23. 23

      Tomcat安装、测试及配置(3):tomcat的启动和关闭

      在/usr/local/apache-tomcat-7.0.47/bin下有可执行程序。

      (1)启动tomcat服务:

           # /usr/local/apache-tomcat-7.0.47/bin/startup.sh

           # /usr/local/apache-tomcat-7.0.47/bin/catalina.sh start

      (2)关闭tomcat服务:

           # /usr/local/apache-tomcat-7.0.47/bin/shutdown.sh

           # /usr/local/apache-tomcat-7.0.47/bin/catalina.sh stop

    24. 24

      Tomcat安装、测试及配置(4):java web项目发布

      (1)用eclipse将编译好的Java Web项目导出成war包。

      (2)将war包放置到linux服务器上的tomcat的webapps目录下。如本次配置放在/usr/local/apache-tomcat-7.0.47/webapps下。

      (3)启动tomcat后,tomcat会自动将war包解压并运行Java Web项目。

      (4)打开浏览器,输入http://127.0.0.1:8080/SessionTest(项目名),就可以访问项目。

    25. 25

      Tomcat安装、测试及配置(5):设置Tomcat默认访问项目

        打开/usr/local/apache-tomcat-7.0.47/conf/server.xml,在<Host></Host>标签之间加入下面的语句:

         <Contextpath="" docBase="SessionTest" debug="0"reloadable="false" />

      <Context>标签的docBase值为想要默认访问的项目名称,此处为SessionTest。文件修改后如图所示。然后重新启动tomcat,打开浏览器,输入http://127.0.0.1:8080,就可以访问SessionTest项目。

      Linux平台上搭建apache+tomcat负载均衡集群
    26. 26

      mod_jk安装:

        mod_jk的作用:连接apache和tomcat集群的中间件。

        mod_jk的安装包:tomcat-connectors-1.2.37-src.tar.gz。

      安装步骤如下:

      (1)将安装包从/software目录拷贝到/usr/local目录下(图形界面下直接“复制”-“粘贴”即可)。

           #cp /software/tomcat-connectors-1.2.37-src.tar.gz /usr/local

      (2)定位到文件夹/usr/local/。

           #cd /usr/local

      (3)解压安装包到当前目录。

           # tar -zxvf tomcat-connectors-1.2.37-src.tar.gz

      (4)编译安装mod_jk。

           #cd /tomcat-connectors-1. 2.37-src/native

           # chmod 755buildconf.sh

           # ./buildconf.sh

           # ./configure--with-apxs=/usr/local/apache/bin/apxs

           # make

           # make install

      (5)将/tomcat-connectors-1.2.37/apache-2.0下的mod_jk.so文件拷贝到apache安装目录下的modules文件夹下面。

           # cp ./apache-2.0/mod_jk.so/usr/local/apache/modules/

    27. 27

      负载均衡集群配置(1):修改Tomcat/conf 路径下的server.xml。

         修改< Connector>节点值,是关于使用ajp连接apache和tomcat时的配置。修改成如下形式:

       <!-- Definean AJP 1.3 Connector on port 8009 -->

       <Connectorport="8009"protocolhandlerclassname="org.apache.jk.server.jkcoyotehandler"protocol="AJP/1.3" redirectPort="8443" />

         注意:如果一台机器上同时运行多个tomcat,一定要将每个tomcat对应的Connector标签的port端口设为不同的值

    28. 28

      负载均衡集群配置(2):修改Tomcat/conf 路径下的server.xml。

         修改<Engine>的配置。将<Engine>的注释打开,为安装的tomcat命名,即修改jvmRoute的值为 “tomcat实例名”(不同的tomcat赋予不同值,此处安装了两个tomcat,分别命名为tomcat1和tomcat2),修改结果参见下图:

      Linux平台上搭建apache+tomcat负载均衡集群
    29. 负载均衡集群配置(3):修改Tomcat/conf 路径下的server.xml。

      在<Engine>或<Host>元素下添加以下内容均可:

      <ClusterclassName="org.apache.catalina.ha.tcp.SimpleTcpCluster">

             <ManagerclassName="org.apache.catalina.ha.session.BackupManager"

             expireSessionsOnShutdown="false"

             notifyListenersOnReplication="true"

              mapSendOptions="6"/>

          <!--

           <ManagerclassName="org.apache.catalina.ha.session.DeltaManager"

              expireSessionsOnShutdown="false"

              notifyListenersOnReplication="true"/>

          -->

          <ChannelclassName="org.apache.catalina.tribes.group.GroupChannel">

              <MembershipclassName="org.apache.catalina.tribes.membership.McastService"

                  address="224.0.0.1 "

                  port="45564"

                  frequency="500"

                  dropTime="3000"/>

              <ReceiverclassName="org.apache.catalina.tribes.transport.nio.NioReceiver"

                  address="auto "

                  port="4001"

                  autoBind="100"

                  selectorTimeout="5000"

                  maxThreads="6"/>

              <SenderclassName="org.apache.catalina.tribes.transport.ReplicationTransmitter">

                  <TransportclassName="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/>

              </Sender>

              <InterceptorclassName="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/>

              <Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor"/>

          </Channel>

          <ValveclassName="org.apache.catalina.ha.tcp.ReplicationValve"filter=""/>

          <ValveclassName="org.apache.catalina.ha.session.JvmRouteBinderValve"/>

          <DeployerclassName="org.apache.catalina.ha.deploy.FarmWarDeployer"

               tempDir="/tmp/war-temp/"

               deployDir="/tmp/war-deploy/"

               watchDir="/tmp/war-listen/"

               watchEnabled="false"/>

      <ClusterListener className="org.apache.catalina.ha.session.JvmRouteSessionIDBinderListener"/>

          <ClusterListenerclassName="org.apache.catalina.ha.session.ClusterSessionListener"/>

      </Cluster>

    30. 负载均衡集群配置(4):修改Tomcat/conf 路径下的server.xml。

      修改<Cluster>节点信息

      <MembershipclassName="org.apache.catalina.tribes.membership.McastService"

            bind="127.0.0.1"  <!—如果主机有vpn-虚拟专用网络,需要要bind下。如果没有的话可以不用加bind,否则会导致session无法复制-->

            address="228.0.1.99"  #广播地址,同一组tomcat集群一样

            port="45564"   #同一组tomcat集群一样

            frequency="500"

            dropTime="3000"/>

      <ReceiverclassName="org.apache.catalina.tribes.transport.nio.NioReceiver"

            address="172.**.***.201"    #修改为本机IP地址

            port="5000"   #(tomcat默认可以检测到4000~4100之间的端口)

      <!-- 如果是在同一台电脑上配置负载,要修改这个端口,否则会因为端口冲突不起作用的。-->

            selectorTimeout="100"

            maxThreads="6"/>

    31. 负载均衡集群配置(5):修改待发布项目的web.xml

         需要发布的项目放在tomcat的webapps文件夹下,在每个待发布项目的web.xml末尾的</web-app>标签里添加<distributable/>,确保session能够复制。如下图所示。

      Linux平台上搭建apache+tomcat负载均衡集群
    32. 负载均衡集群配置(6):Apache配置——修改 httpd.conf

      在apache的conf下的httpd.conf 文件尾部追加以下内容:

         #加载mod_jk Module

         LoadModule jk_module modules/mod_jk.so

         <Ifmodule mod_jk.c>

             #指定workers.properties文件路径

             JkWorkersFile/usr/local/apache/conf/workers.properties

             #指定jk logs文件存放位置

             JkLogFile/usr/local/apache/logs/mod_jk.log

             #Set the jk log level [debug/error/info]

             JkLogLevel info

             #Select the log format

             JkLogStampFormat "[%a %b %d%H:%M:%S %Y]"

             #JkOptions indicate to send SSL KEYSIZE,

             JkOptions  +ForwardKeySize +ForwardURICompat-ForwardDirectories

             #JkRequestLogFormat set the requestformat

             JkRequestLogFormat "%w %V %T %q %U%R"

             #JkShmFile to put logs

             JkShmFile/usr/local/apache/logs/mod_jk.shm

         </IfModule>

         #指定哪些请求交给tomcat处理,哪些请求交给apache处理

         #注意:" loadbalancer "为在workers.propertise里指定的负载分配控制器

         JkMount /*.jsp loadbalancer  #所有的jsp都交给tomcat处理

    33. 负载均衡集群配置(7):Apache配置——创建workers.properties

         httpd.conf的最后添加的配置中workers.properties文件是不存在的,需要我们自己在apache/conf路径下创建。workers.properties文件用于对负载均衡的负载器worker

      (即tomcat)进行具体的登记,此处的2个tomcat就作为2个worker被登记在这个文件中。

      workers.properties具体配置如下:

      #workers.properties

      #

      # in unix, weuse forward slashes:

      ps=/

      # workers 列表

      worker.list=tomcat1,tomcat2, loadbalancer, status

      #--------------------------------------------------------------------

      # 第一个tomcat

      #--------------------------------------------------------------------

      worker.tomcat1.port=8009   #对应tomcat的server.xml中配置的ajp13端口号

      worker.tomcat1.host=127.0.0.1  #tomcat1的主机地址,如不为本机,请填写IP地址

      worker.tomcat1.type=ajp13  #定向包协议

      worker.tomcat1.lbfactor=1  #server的负载分配权重,值越高,分得的请求越多

      #以下为非必要配置,这部分配置tomcat2的配置同tomcat1

      #worker.tomcat1.cachesize=1000  #配置tomcat的jk连接缓存大小 (非必要)

      #worker.tomcat1.cachesize_timeout=600  # (非必要)

      #worker.tomcat1.reclycle_timeout=300  # (非必要)

      #worker.tomcat1.socket_keepalive=1  #防止防火墙切断未激活的网络连接(非必要)

      #worker.tomcat1.socket_timeout=300   #(非必要)

      #worker.tomcat1.local_worker=1  # (非必要)

      #worker.tomcat1.retries=3  # (非必要) 

      #----------------------------------------------------------------------

      # 第二个tomcat

      #----------------------------------------------------------------------

      worker.tomcat2.port=8009

      worker.tomcat2.host=172.**.***.202  #tomcat2的主机IP地址

      worker.tomcat2.type=ajp13

      worker.tomcat2.lbfactor=1

      #----------------------------------------------------------------------

      # load balancerworker -负载均衡控制器

      # ---------------------------------------------------------------------

      worker.loadbalancer.type=lb

      worker.loadbalancer.balanced_workers=tomcat1,tomcat2  #指定分担请求的tomcat

      worker.loadbalancer.sticky_session=1    #设置为粘性session

      worker.loadbalancer.sticky_session_force=0  #设置当多次请求未响应,请求将转发

      worker.status.type=status

      #

      # end workers.properties

    34. 负载均衡集群配置(8):Apache配置——设置apache对项目的访问路径

          修改/apache/conf/目录下的httpd.conf文件中的DocumentRoot和Directory值,将文件访问路径定位到tomcat的webapps文件夹,即待发布项目的存放位置,修改结果如下:

      DocumentRoot"/usr/local/apache-tomcat-7.0.47/webapps"

      <Directory"/usr/local/apache-tomcat-7.0.47/webapps">

         Require all granted

          Orderallow,deny

         Allow from all

      </Directory>

      如此对apache的修改完成,加之tomcat设置了默认访问项目,此时就可以实现直接通过apache所在主机的IP地址来访问项目。(实际配置中,是否实现IP地址直接访问以实际需求为准)

    35. 负载均衡集群Session测试(1):创建测试工程SessionTest

      新建一个Java Web工程SessionTest,在工程下新建index.jsp,文件内容如下:

      <%@ pageimport="java.util.*" %>

      <html>

      <head>

          <title> Session Test</title>

      </head>

      <body bgcolor="red">

      <%

          out.print("session Id:"+session.getId());

      %>

      <formaction="index.jsp" method="post">

          key<input type="text" name="key"/>

          <br />

          value<input type="text"name="value" />

          <br />

          <input type="submit"value="Submit" />

          <br />

      </form>

      <%

          String key =request.getParameter("key");

          if(key!=null &&key.isEmpty()==false)

          {

              String value =request.getParameter("value");

              session.setAttribute(key, value);

              Enumeration e =session.getAttributeNames();

              while (e.hasMoreElements())

              {

                  String sKey = (String)e.nextElement();

                  String sValue = (String)session.getAttribute(sKey);

                  out.print(sKey+ " ="+sValue+"<br>");

              }

          }

      %>

      </body>

      </html>

      修改SessionTest的web.xml,在web.xml末尾的</web-app>标签里添加<distributable/>。

      将该项目放入同一组的tomcat的webapps下,并且使同一组的每个tomcat的项目中index.jsp的<bodybgcolor="red"> 颜色选用不同的颜色。(此处tomcat1为red,tomcat2为green)

    36. 负载均衡集群Session测试(2):session粘性测试

         启动同组tomcat以及apache。浏览器访问apache所在的主机IP地址:http://172.18.145.201/, 显示如图一所示页面。从页面显示的session Id可以看出请求访问的是tomcat1。

        如图二所示,发现多次刷新或submit后,请求访问的一直是tomcat1,并且session Id一直保持不变,session中的数据也能够保持,说明session粘性良好。

      Linux平台上搭建apache+tomcat负载均衡集群
      Linux平台上搭建apache+tomcat负载均衡集群
    37. 负载均衡集群Session测试(3):session复制测试

         启动同组tomcat以及apache。浏览器访问apache所在的主机IP地址:http://172.18.145.201/,从页面显示的session Id可以看出请求访问的是tomcat1。提交几组session数据,显示结果如图一所示。

         此时停掉tomcat1,再次提交session数据,或刷新页面,结果如图二所示,发现请求被转发给tomcat2,页面访问正常。页面颜色改变,但Session Id保持不变,session数据也全部传递给tomcat2,表明session复制良好。

      Linux平台上搭建apache+tomcat负载均衡集群
      Linux平台上搭建apache+tomcat负载均衡集群
    38.   至此,apache+tomcat的负载均衡集群就全部配置完成了。如果想实现开机时负载集群服务自启动的话,可将如下内容添加至/etc/rc.d/rc.local文件末尾:

        /usr/local/apache-tomcat-7.0.47/bin/catalina.shstart

        /usr/local/apache/bin/apachectlstart

     

 

转载于:https://www.cnblogs.com/jiaosq/p/5601940.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/403560.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

(转)C#中 DirectoryEntry组件应用实例

C#中 DirectoryEntry组件应用实例DirectoryEntry类封装Active Directory层次结构中的节点或对象&#xff0c;使用该类可以绑定到对象&#xff0c;或者读取和更新属性。图1所示为DirectoryEntry组件。DirectoryEntry组件1&#xff0e; 功能DirectoryEntry类封装Active Director…

【Linux学习】epoll详解

From: http://blog.csdn.net/xiajun07061225/article/details/9250579 什么是epoll epoll是什么&#xff1f;按照man手册的说法&#xff1a;是为处理大批量句柄而作了改进的poll。当然&#xff0c;这不是2.6内核才有的&#xff0c;它是在2.5.44内核中被引进的(epoll(4) is a …

Windows Server Backup 2012设置备份周期

Windows Server Backup 2012设置备份周期 作者&#xff1a;杨坚 Windows Server Backup 概述 Windows Server Backup 功能提供一组向导及其他工具&#xff0c;您可用来对服务器执行基本的备份和恢复任务。自首次发布 Windows Server 2008 以来&#xff0c;此功能已得到更新。另…

JSP作业1--5!

输出5的阶乘 <body> <!-- 5的阶乘--> <% int s1; for(int j1;j<6;j){ %> <%s*j; %><% }%> <br> 5的阶乘是&#xff1a; <%s %> 结果&#xff1a; 转载于:https://www.cnblogs.com/miss123/p/5611038.html

Yii Zii.widgets.Cmenu 操作

为什么80%的码农都做不了架构师&#xff1f;>>> $this->widget(zii.widgets.CMenu, array( activeCssClass>当前热点元素的样式, firstItemCssClass>第一个元素的样式, lastItemCssClass>最后一个元素的样式, encodeLable>false //這樣&#xff…

比较分析 Spring AOP 和 AspectJ 之间的差别

比较分析 Spring AOP 和 AspectJ 之间的差别 英文原文&#xff1a;Comparative Analysis Between Spring AOP and AspectJ 标签&#xff1a; AspectJ Spring158人收藏此文章, 我要收藏oschina 推荐于 3年前 (共 7 段, 翻译完成于 10-24) (19评) 参与翻译(2人)&#xff1a; bear…

微信小程序打开pdf文件;uni-app下载打开pdf文件;uni-app微信小程序下载打开pdf文件预览;

1.首先需要在小程序后台-开发设置-服务器域名 配置好下载的域名。不配置&#xff1a;会导致下载失败和打开文件失败&#xff1b; 2.pdf文件的url要确保可以浏览器直接打开。 <template><view class"pdf"><view v-for"(item,index) in pdfList&q…

Dynamips结合VMware搭建站点到站点×××环境

Dynamips是现如今最好的思科模拟器&#xff0c;它能够加载的思科IOS&#xff0c;模拟出真实的路由器&#xff0c;这使得我们在没有思科设备的情况下也能很好的学习&#xff0c;Dynamips的强大之处不仅于此&#xff0c;它还能与我们的VMware虚拟机&#xff0c;甚至和真机实行互连…

httpd设置HTTPS双向认证

去年用tomcat、jboss配置过HTTPS双向认证&#xff0c;那时候主要用的是JDK自带的keytool工具。这次是用httpd openssl&#xff0c;区别比较大 在网上搜索了很多文章&#xff0c;发现全面介绍的不多&#xff0c;或者就是版本比较旧了。所以把我配置的过程完整地记录下来&#x…

微信小程序通讯录功能;uni-app微信小程序通讯录单选;uni-app微信小程序通讯录多选;uni-app微信小程序通讯录好友功能;uni-indexed-list使用;通讯录高度修改;

介绍&#xff1a;项目使用的是uni-app做的微信小程序&#xff1b;uni-app里原来就用一个组件uni-indexed-list&#xff0c;是用来做通讯录的&#xff1b;可以直接看官方案例也就是hello-uniapp-master下的导航栏&#xff1b;但是官方这个是多选&#xff0c;且没有默认选中功能&…

推荐! el-input 输入框类型;只能输入数字的输入框;保留两位小数输入框;只能输入正整数和0的输入框;手机号正则校验;车牌号码正则校验

去除多余的0看这篇 以下代码可直接复制使用&#xff1a; 以下代码可直接复制使用&#xff01; <template><div><a href"https://baike.baidu.com/item/%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F/1700215?fraladdin#10">百度正则</a&…

Java多线程之JUC包:Semaphore源码学习笔记

若有不正之处请多多谅解&#xff0c;并欢迎批评指正。 请尊重作者劳动成果&#xff0c;转载请标明原文链接&#xff1a; http://www.cnblogs.com/go2sea/p/5625536.html Semaphore是JUC包提供的一个共享锁&#xff0c;一般称之为信号量。 Semaphore通过自定义的同步器维护了一个…

在vue项目中操作元素ref案例;

原博主链接 <!--* Description:会动的词云* Author: Vergil* Date: 2021-08-25 14:17:45* LastEditTime: 2021-08-25 17:08:15* LastEditors: Vergil --> <template><div class"wordCloud" ref"wordCloud"></div> </template&…

【C->Cpp】深度解析#由C迈向Cpp(2)

目录 &#xff08;一&#xff09;缺省参数 全缺省参数 半缺省参数 缺省参数只能在函数的声明中出现&#xff1a; 小结&#xff1a; &#xff08;二&#xff09;函数重载 函数重载的定义 三种重载 在上一篇中&#xff0c;我们从第一个Cpp程序为切入&#xff0c;讲解了Cpp的…

Session机制详解

虽然session机制在web应用程序中被采 用已经很长时间了&#xff0c;但是仍然有很多人不清楚session机制的本质&#xff0c;以至不能正确的应用这一技术。本文将详细讨论session的工作机制并且对在 Java web application中应用session机制时常见的问题作出解答。 一、术语ses…

element-ui的表单校验;el-form表单校验;el-form表单自定义校验;手机号校验;车牌号校验;车牌号正则校验;手动校验表单某一项;手动清空表单的某一项校验结果

示例&#xff1a;代码在末尾 可以直接复制使用 一、基本属性认知&#xff1a; 1. required: true 会有 * &#xff0c; 但仅是触发最后点击提交按钮时&#xff0c;校验某一项位必填&#xff1b;与输入事件或者选择或者失焦时候 怎么校验无关 &#xff08;这时候的校验取决于是…

Eclipse For JavaSE安装、配置、测试

Eclipse For JavaSE安装、配置、测试(win7_64bit) 目录 1.概述 2.本文用到的工具 3.安装与配置 4.JavaSE开发测试 5.ADT安装与Android开发测试 6.注意事项 7.相关博文 >>看不清的图片可在新标签打开查看大图 1.概述 eclipse应该是Java开发界家喻户晓的IDE了&#xff0c;通…

epoll的两种模式

From: http://haoningabc.iteye.com/blog/1432958 linux异步IO浅析 http://hi.baidu.com/_kouu/blog/item/e225f67b337841f42f73b341.html epoll有两种模式,Edge Triggered(简称ET) 和 Level Triggered(简称LT).在采用这两种模式时要注意的是,如果采用ET模式,那么仅当状态发生…

关闭eslint检验;vue-cli3搭建的vue项目关闭eslint;脚手架3关闭eslint;

本文是解决关闭eslint的问题&#xff1b;如果想要开启eslint和配置&#xff0c;可以查看这篇开启eslint检验&#xff1b; 我们使用vue-cli3脚手架搭建vue项目时候&#xff0c;会默认选中eslint风格代码&#xff1b;如果想要关闭eslint检验&#xff0c;有如下两种方案&#xff…

转一篇关于并发和并行概念的好文,附带大神评论

转自&#xff1a;https://laike9m.com/blog/huan-zai-yi-huo-bing-fa-he-bing-xing,61/ 还在疑惑并发和并行&#xff1f; OK&#xff0c;如果你还在为并发&#xff08;concurrency&#xff09;和并行&#xff08;parallesim&#xff09;这两个词的区别而感到困扰&#xff0c;那…