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.    2.   2

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

3.    34.   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的版本号:



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

  在终端中输入“yum -y remove java java-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-updatesd restart

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


8.    8

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

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

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

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

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

(3)重启linux。


9.    9

Apache安装(1):

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



10. 10

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

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

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



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 -zxvfhttpd-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



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。



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。



16. 16

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

17. 17

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

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

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

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

       #Includeconf/extra/httpd-mpm.conf

       #Includeconf/extra/httpd-default.conf



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”前的“#”去掉即可。


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!”字样即为成功。



20. 20

Apache的启动和关闭:

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

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

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

(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 -zxvfapache-tomcat-7.0.47.tar.gz

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

     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)启动tomcat。

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

22. 22

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

测试tomcat。打开浏览器访问http://127.0.0.1:port,可以看到tomcat的启动欢迎页面,证明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包解压并运行JavaWeb项目。

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

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

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

   <Contextpath="jqTest" docBase="/opt/apps/jqTest/" debug="0" reloadable="false" />

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


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 -zxvftomcat-connectors-1.2.37-src.tar.gz

(4)编译安装mod_jk。

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

     # chmod u+x buildconf.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. 负载均衡集群配置(1:修改Tomcat/conf路径下的server.xml。

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

 <!-- Definean AJP 1.3 Connectoron port 8009 -->

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

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

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

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


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

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

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

      <Manager className="org.apache.catalina.ha.session.BackupManager"

       expireSessionsOnShutdown="false"

       notifyListenersOnReplication="true"

       mapSendOptions="6"/>

    <Channel className="org.apache.catalina.tribes.group.GroupChannel">

       <Membership className="org.apache.catalina.tribes.membership.McastService"

           address="224.0.0.1 "

           port="45564"

           frequency="500"

           dropTime="3000"/>

       <Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"

           address="auto "

           port="4001"

           autoBind="100"

           selectorTimeout="5000"

           maxThreads="6"/>

       <Senderclass Name="org.apache.catalina.tribes.transport.ReplicationTransmitter">

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

       </Sender>

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

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

    </Channel>

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

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

    <Deployer className="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"/>

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

</Cluster>

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

修改<Cluster>节点信息

<Membership className="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"/>

<Receiver className="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能够复制。


32. 负载均衡集群配置(6:Apache配置——修改 httpd.conf

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

   #加载mod_jk Module

   LoadModule jk_modulemodules/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 /*.jsploadbalancer  #所有的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

   Order allow,deny

   Allow from all

</Directory>

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

35. 35

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

36. 在浏览器输入apache所在机器IP加项目名字访问项目(apache默认监听端口为80,要修改可修改apache/conf/httpd.conf文件)

37. 转载地址:http://jingyan.baidu.com/article/ab0b5630b632dbc15afa7dc4.html,对其中一些内容稍作了修改

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值