Centos下Apache+tomcat 负载均衡

操作系统:CentOS-6.0-i386-bin-DVD

内核版本:2.6.32

[[email protected] ~]# cat /proc/version

Linux version 2.6.32-71.el6.i686

gcc版本:4.4.4

g++版本:4.4.7

java版本:1.6.0_45

gcc、g++和java是必须的,执行命令:
[[email protected] ~]# gcc --version
gcc (GCC) 4.4.4 20100726 (Red Hat 4.4.4-13)
Copyright (C) 2010 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
[[email protected] ~]# g++ --version
-bash: g++: command not found
[[email protected] ~]# java -verion
-bash: java: command not found

1、需要安装g++和Java环境

[[email protected] ~]#yum install gcc-c++
[[email protected] ~]# g++ --version
g++ (GCC) 4.4.7 20120313 (Red Hat 4.4.7-11)
Copyright (C) 2010 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

安装Java环境:

chmod 777 jdk-6u45-linux-i586.bin
./jdk-6u45-linux-i586.bin

修改环境变量 #vi /etc/profile,

在文件最后面添加下面一段内容:

JAVA_HOME=/usr/local/jdk1.6.0_45
PATH=$JAVA_HOME/bin:$PATH
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export JAVA_HOME PATH CLASSPATH

保存

#source /etc/profile,使文件立即生效

检查jdk是否安装成功:

[[email protected] ~]# java -version
java version "1.6.0_45"
Java(TM) SE Runtime Environment (build 1.6.0_45-b06)
Java HotSpot(TM) Client VM (build 20.45-b01, mixed mode, sharing)

2、接下来安装Apache

[[email protected] software]# tar -zxvf httpd-2.2.8_apache.tar.gz
[[email protected] software]# cd httpd-2.2.8
[[email protected] httpd-2.2.8]# ./configure --prefix=/usr/local/apache --enable-mods-shared=most --with-mpm=worker
[[email protected] httpd-2.2.8]# make
[[email protected] httpd-2.2.8]# make install

查看工作模式:

[[email protected] bin]# pwd
/usr/local/apache/bin
[[email protected] bin]# ./httpd -l
Compiled in modules:
  core.c
  worker.c
  http_core.c
  mod_so.c

浏览器访问虚拟机IP:http://192.168.88.130/ 若出现it works则成功

It works!

(注意:虚拟机的防火墙要关闭状service iptables stop(暂时的关闭,下次重启还是会开启);永久性关闭是chkconfig iptables off,但还是要从下次虚机开启时才生效)。

3、安装tomcat

由于要在本地开启两个tomcat服务器实例以模拟负载均衡+群集的效果,因此需要将之前解压出来的tomcat复制成两份,进入解压时的目录,重命名解压出来的原始目录为worker2,然后复制此目录,副本目录名称为worker3:

[[email protected] local]# mv apache-tomcat-7.0.41/ worker2
[[email protected] local]# cp worker2/ -r worker3

现在测试tomcat能否正常工作:

将测试文件TestProject.war放到的webapps目录下。然后切换到worker2的bin目录下,启动worker2:

[[email protected] bin]# ./startup.sh

在浏览器中访问 http://192.168.88.130:8080/TestProject/showInfo.do,若出现如下信息则配置正确:

This message is from Server, RealPath:
/usr/local/worker2/webapps/TestProject/
Current Session Id:
A480B9239CFC9DA0EC6FC18FED6FCB1B

可以正常工作,先关闭worker2.

4、编译配置jk链接器

下载mod_jk-1.2.23-apache-2.2.x-linux-i686.so (注意:一定要跟自己的系统版本吻合,否则会出错)

改名为mod_jk.so,赋予777权限,拷贝到/usr/local/apache/modules下

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

在Apache的httpd.conf里增加如下内容:

include "/usr/local/apache/conf/mod_jk.conf"

在conf路径下新建mod_jk.conf文件,并添加如下内容

#加载mod_jk Module  
LoadModule jk_module modules/mod_jk.so
#指定 workers.properties文件路径  
JkWorkersFile conf/workers.properties
#指定哪些请求交给tomcat处理,"loadbalancer"为在workers.propertise里指定的负载分配控制器名
JkLogFile logs/mod_jk.log
#JkLogLevel debug
JkMount  /*.do loadbalancer
JkMount  /*.jsp loadbalancer

在conf下新建workers.properties文件,并添加如下内容

worker.list=loadbalancer   #此处与mod_jk.conf中保持一致
worker.worker2.port=8009  
#tomcat2中 ajp13 端口号,对应tomcat配置文件server.xml中Connector port="8009",默认8009
worker.worker2.host=127.0.0.1 #worker2的地址,本机loaclhost或者127.0.0.1,远程直接写IP
worker.worker2.type=ajp13     #与worker2中的server.xml的protocol保持一致
worker.worker2.lbfactor=1     #负载的权重值,越高表示负载越大
worker.worker3.port=9009
worker.worker3.host=127.0.0.1
worker.worker3.type=ajp13
worker.worker3.lbfactor=1
worker.loadbalancer.type=lb
worker.loadbalancer.balance_workers=worker2,worker3
#指定负载的worker列表,用逗号分隔
worker.loadbalancer..sticky_session=false
#配置session会话是否为粘性    
#这样负载均衡器lb就会尽量保持一个session,也就是使用户在一次会话中跟同一个Tomcat进行交互
worker.loadbalancer..sticky_session_force=false
worker.loadbalancer.sticky_session=1
#是否启用session共享

worker.worker2.port:第一台负载均衡服务器AJP协议连接器的连接端口,这里配置为8009

worker.worker2.host:第一台负载均衡服务器的主机名、域名或者IP地址,这里配置为本机localhost

worker.worker2.type:JK模块实现负载均衡采用的是AJP协议1.3版本,因此第一台负载均衡服务器的类型配置为ajp13

worker.worker2.lbfactor:第一台负载均衡服务器在整个负载均衡系统中所占的权重,这里配置为10,权重越大,越有可能处理更多的请求,建议给性能好的机器配置更高的权重。

5、修改2个tomcat的server.xml,保证2个tomcat的端口号不一致,具体配置如下,

[[email protected] conf]# vim server.xml

<?xml version=‘1.0‘ encoding=‘utf-8‘?>
<!--指定tomcat服务器的Telnet登录端口 并设置关闭服务器指令为"SHUTDOWN" 此处需注意服务器安全 --> 
<Server port="8005" shutdown="SHUTDOWN">
  <!-- Security listener. Documentation at /docs/config/listeners.html
  <Listener className="org.apache.catalina.security.SecurityListener" />
  -->
  <!--APR library loader. Documentation at /docs/apr.html -->
  <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
  <!--Initialize Jasper prior to webapps are loaded. Documentation at /docs/jasper-howto.html -->
  <Listener className="org.apache.catalina.core.JasperListener" />
  <!-- Prevent memory leaks due to use of particular java/javax APIs-->
  <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
  <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
  <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />
  <!-- Global JNDI resources
       Documentation at /docs/jndi-resources-howto.html
  -->
  <GlobalNamingResources>
    <!-- Editable user database that can also be used by
         UserDatabaseRealm to authenticate users
    -->
    <Resource name="UserDatabase" auth="Container"
              type="org.apache.catalina.UserDatabase"
              description="User database that can be updated and saved"
              factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
              pathname="conf/tomcat-users.xml" />
  </GlobalNamingResources>
  <Service name="Catalina">
<!--指定tomcat服务器的Telnet登录端口 并设置关闭服务器指令为"SHUTDOWN" 此处需注意服务器安全 --> 
    <Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />
    <!-- A "Connector" using the shared thread pool-->
    <!--
    <Connector executor="tomcatThreadPool"
               port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />
    -->
    <!-- Define a SSL HTTP/1.1 Connector on port 8443
         This connector uses the JSSE configuration, when using APR, the
         connector should be using the OpenSSL style configuration
         described in the APR documentation -->
    <!--
    <Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
               maxThreads="150" scheme="https" secure="true"
               clientAuth="false" sslProtocol="TLS" />
    -->
    <!-- Define an AJP 1.3 Connector on port 8009 -->
<!-- 此处的端口要与workers.properties文件中s1负载均衡服务器一致 -->
    <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
<!-- jvmRoute属性用来负载均衡的转发对象 值一定要与在workers.properties文件中指定的另外一台一样 --> 
    <Engine name="Catalina" defaultHost="localhost" jvmRoute="worker2" >
        <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
               resourceName="UserDatabase"/>
      <Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="true"
           xmlValidation="false" xmlNamespaceAware="false">
       
      </Host>
    </Engine>
  </Service>
</Server>

需要修改的地方都有注释,8005 8080 8009 需要修改的端口号,worker3的分别是8006 8081 9009

开启了tomcat服务器之后,开启apache服务器(注意,顺序很重要!一定要先开tomcat)

http://192.168.88.130/TestProject/showInfo.do出现如下图 则代表成功

This message is from Server, RealPath:
/usr/local/worker2/webapps/TestProject/
Current Session Id:
DC185E2CA3CAEB64BE50CEE2DC7CBC5E.worker2

再次刷新 应该会变成worker3

停掉其中一台tomcat,继续访问上诉网址 看能否打开

时间: 2024-08-03 19:33:11

Centos下Apache+tomcat 负载均衡的相关文章

linux下apache+tomcat负载均衡和集群

先说下我的环境 一台ubuntu的虚拟机, 一个apache2.2的实例 两个tomcat1.7的实例 1.安装apache服务器 sudo apt-get install apache2 如果要重启的话,运行命令: sudo /etc/init.d/apache2 restart ubuntu下的apache会默认创建路径/var/www,apache默认加载的时候,就是加载的这个路径下面的 2.安装两个tomcat实例 去官网下载一个 然后在本地在cp一下, 此时目录结构为: /home/h

Windows下apache+tomcat负载均衡

连接mongodb: $mongoObj = new Mongo("127.0.0.1" , array( 'connect'=>true, 'persist'=>true )); 选择库: $mongoDB = $mongoObj->selectDB("wxdata"); 选择集合: $mongoColletion=$mongoDB->selectCollection("apachelog"); 删除一个集合: $mon

Apache+Tomcat负载均衡问题集锦

之前在windows 环境下搭建了下apache+tomcat负载均衡(不会的可以参考之前的文档,文档对于linux和windows都适用),一帆风顺,没有出现任何问题,今天尝试着在linux下搭建了下,其中遇到几个问题,在这里给大家分享下. linux环境,三个redhat6.5 x86_64,其中192.168.1.2安装apache,192.168.1.3和192.168.1.4安装tomcat,这里不再介绍配置,如果有不会的,可以参考前边的文章. 问题一: SESSIONID随着页面刷新

apache + tomcat 负载均衡模式下 getLocalAddr() 为null的解决办法

在apache + tomcat 负载均衡模式下,通过request.getLocalAddr()无法获取服务器端的ip地址,返回值为null的问题,查找了下,百度里没有有价值的回答,到官方网站上查找了下,说是: The AJP protocol only passes the web server host name and port. It does not pass the IP address. Therefore, getLocalName() will return whatever

基于Apache+Tomcat负载均衡的两种实现方法

Apache+Tomcat实现负载均衡的两种实现方法 如果我们将工作在不同平台的apache能够实现彼此间的高效通信,因此它需要一种底层机制来实现--叫做apr Apr的主要目的就是为了其能够让apache工作在不同的平台上,但在linux上安装apache的时候通常都是默认安装的 [[email protected] ~]#rpm -qi aprName                 :apr                                        Relocation

apache tomcat负载均衡配置-未完成

集群技术是目前非常流行的提高系统服务能力与高可靠性( HA- High Availability )的手段,通过把多个独立的服务器组成一个集群可以实现失效无缝转移.也就是说当有某一台集群中的服务器当机后,其上的用户状态数据可以无缝迁移到集群中 的其他服务器上.这样,正在使用应用的客户可以完全感觉不到影响,大大提供了系统的可靠性. 集群有很多种类和层次,例如:操作系统集群(如 Linux . Solaris 等),数据库集群(如 DB2 . Oracle 等),应用服务器集群(如 GlassFis

apache+tomcat 负载均衡

说明:本篇不面向无开发基础的人员,所以不会有软件下载,jdk安装等步骤.比较久远的东西了...... 1.系统环境 win7-64.jdk 2.软件列表: apache_2.2.24-x64-no-ssl.msi.tomcat5 3.配置步骤说明: 1)配置使用哪种方式实现负载均衡. 2)更改tomcat配置文件相关端口(我是在本机测试的,本机有多个tomcat) 3)对接apache和tomcat 4.配置开始 1)apache 安装目录下的 conf/httpd.conf 文件修改 解除下列

Centos下Apache+Tomcat集群--搭建记录

一.目的 利用apache的mod_jk模块,实现tomcat集群服务器的负载均衡以及会话复制,这里用到了<Cluster>. 二.环境 1.基础:3台主机,系统Centos6.5,4G内存,50G硬盘. yum源已更换为阿里源(如何更换可参考博客的另外一篇文章) 2.软件:development tools,jdk-7u9-linux-x64.rpm;源码编译软件apr-util-1.5.4.tar.gz,apr-1.5.2.tar.gz,tomcat-connectors-1.2.40-s

apache + tomcat 负载均衡分布式集群配置

Tomcat集群配置学习篇-----分布式应用 现目前基于javaWeb开发的应用系统已经比比皆是,尤其是电子商务网站,要想网站发展壮大,那么必然就得能够承受住庞大的网站访问量:大家知道如果服务器访问量过大,就会出现服应用务器崩溃的情况,这个时候怎么办,难道就只能去重启服务器吗?好,如果是一般的小型公益网站到也无所谓,但如果是比如像大型航空公司售票等电子商务网站,每天每小时都有大量的订单业务,如果这些售票系统一旦崩溃后,再去重启,这些时间和客户的损失就直接会影响到航空公司的利益,这些损失如何去避