apache-tomcat配置指南.doc_第1页
apache-tomcat配置指南.doc_第2页
apache-tomcat配置指南.doc_第3页
apache-tomcat配置指南.doc_第4页
apache-tomcat配置指南.doc_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

目录文档目的1软件工具介绍.1为什么要配置tomcat负载平衡和集群.1简单原理介绍2Windows下的具体配置3Linux下的具体配置.8结论.11配置问题与解答11详细配置附录.111不同类型的perties列出一个workers的详细配置.13 3.列举不同类型worker的配置实例.144.tomcat的server.Xml中的各个节点155.cluster中的各个属性节点.16Tomcat负载平衡和集群文档目的:1.用apache+jk+tomcat实现windows xp 和linux下的web server负载平衡和集群。 2.介绍更多关于apache,jk,tomcat的详细配置软件工具介绍:Apache:是前端web服务器,用来接收客户端的请求Jk:是tomcat Connector,用于把apache接收到的请求分发给tomcat来处理Tomcat:也是web服务器,但在这里主要充当servlet容器,用来处理jk转发过来的请求。为什么要配置Tomcat负载平衡和集群:负载平衡:负载平衡能处理高并发量的请求Tomcat集群:Tomcat集群配合负载平衡可以是系统达到高可用性,即任何一台服务器不可用,自动重新连接后,能保持session数据一致,不需要重新输入密码。简单原理介绍:1.apatche与tomcat的之间的联系由jk完成,用的是ajp协议。每个tomcat都在监听ajp端口。默认的 AJP Connector 的端口是 8009。2.配置了集群的tomcat之间通过tcp协议通信复制session,当然要在tomcat应用中的web.xml文件中加入或,标志着要复制session。复制session是为了在某个服务器正在被请求时宕机,请求由apache通过jk转发到其他tomcat服务器时,session中的信息丢失采取的一中保持session的方式,还有其他的解决方案,如把session存到数据库中。3.jk把请求分配给某个tomcat服务器遵循着不同的原则,这里我们使用的是负载平衡。在perties中定义了很多worker,如果worker的type把定义成lb,就表示这个worker是负载平衡worker,他知道怎样提供轮询来分配request。而负载平衡也分很多平衡的方式,采用哪种方式决定于属性worker.balancer.method;下面具体描述不同的负载平衡方式(默认的是R方式)。worker.balancer.method=Request(简写R):负载平衡worker将根据每个tomcat服务器上处理的request数来寻找最佳的tomcat服务器。这种方式适合绝大数application。worker.balancer.method=Session(简写S):负载平衡worker根据各个tomcat上session的数量来寻找最佳tomcat,但是负载平衡worker并没有状态,所以不知道session个数,所以把没有session cookie的请求或url中没有encode sessionid的请求当作new session。worker.balancer.method= Traffic(简写T):负载平衡worker根据jk和tomcat直接的网络状况来找最佳的tomcat服务器。worker.balancer.method= Busyness(简写B):负载平衡worker根据tomcat的流量选择流量最少的tomcat。windows下的具体配置:软件系统环境:操作系统:windows xp前端服务器:apache_21.0.55-win32-x86-no_ssl.zip负载平衡器:mod_jk-1.2.27-httpd-2.0.63.so集群节点:apache-tomcat-5.5.27.zip配置步骤:1.下载以上软件2.安装apache,并把mod_jk.2.0.55解压后拷贝到apache安装目录(这里为E:ideapacheApache2)/modules下面,其实modules下面是apache的各个功能模块,可插拔;3.安装各个tomcat到不同的主机上4. 在apache安装目录下conf目录中找到httpd.conf文件,并在末尾添加:include E:ideapacheApache2confmod_jk.conf5. 在 httpd.conf 同目录下新建mod_jk.conf文件,内容如下:#加载mod_jk ModuleLoadModule jk_module modules/mod_jk-apache-2.0.55.so#指定 perties文件路径JkWorkersFile conf/perties#指定那些请求交给tomcat处理,controller为在pertise里指定的负载分配控制器(在这里可以分配更多的request给controller如果要在运行时管理负载平衡中的各个worker则应该配置status类型的sworker,并把/jkmanager/*类型的请求分配给sworker,访问jkmanager即可访问,配置方法见详细配置附录)JkMount /*.jsp controller6.在httpd.conf同目录下新建 perties文件,内容如下worker.list = controller,tomcat1,tomcat2 #server 列表#=tomcat1=worker.tomcat1.port=8009 #ajp13 端口号,在tomcat下server.xml配置,默认8009worker.tomcat1.host=localhost #tomcat的主机地址,如不为本机,请填写ip地址worker.tomcat1.type=ajp13worker.tomcat1.lbfactor = 1 #server的加权比重,值越高,分得的请求越多#=tomcat2=worker.tomcat2.port=9009 #ajp13 端口号,在tomcat下server.xml配置,默认8009worker.tomcat2.host=localhost #tomcat的主机地址,如不为本机,请填写ip地址worker.tomcat2.type=ajp13worker.tomcat2.lbfactor = 1 #server的加权比重,值越高,分得的请求越多#=controller,负载均衡控制器=worker.controller.type=lbworker.controller.balanced_workers=tomcat1,tomcat2 #指定分担请求的tomcatworker.controller.sticky_session=14.修改tomcat配置文件server.xml打开tomcat2/conf/server.xml文件ajp1.3(是用于jk与tomcat之间的通信) Connector的port一定要和perties文件中的一致http/1.1 Connector(用于浏览器与tomcat之间的通信)的port指定单个访问此tomcat是用的端口号,如果tomcat在不同的主机上可以不修改这个端口号。Server port也一样5.配置集群 只配置负载均衡还不行,还要session复制,也就是说其中任何一个tomcat的添加的session,是要同步复制到其它tomcat, 集群内的tomcat都有相同的session修改tomcat1, tomcat2的server.xml,将集群部分配置的在注释符删掉,并将tomcat2的4001端口改为4002,以避免与tomcat冲突,当然,如果是tomcat安装在不同的主机上,是不用改端口的,去掉注释符即可在每个tomcat节点上的应用(test)中的web.Xml中加入表明要复制session6.运行每个tomcat节点7.运行apache服务器9.测试:成功的例子:在不同的客户端发起请求,请求会被平均分配给tomcat关闭其中一个tomcat1,tomcat1原来处理的请求会被其他tomcat2接收,如果此前被关闭的tomca1t的session中存在信息, tomcat2中tomcat1的session信息依然存在,表现为登录tomcat宕机请求被转到另外一个tomcat,并仍然处于登录状态Linux下的具体配置:软件系统环境:操作系统:redhat 4 i386前端服务器:httpd-2.0.63.tar.gz 安装在linux下负载平衡器:mod_jk-1.2.27-httpd-2.0.61.so二进制版本集群节点:apache-tomcat-5.5.27.zip安装在windows下配置步骤:一、下载以上软件二、安装apache. 下面详细讲解apache的安装步骤:(注意:凡是标记为紫色的,皆为在终端中应该执行的命令,黄色字体为执行结果说明!以下是在linux4下用root用户登陆的状态下测试通过的)A:打开终端,执行以下命令确认编译环境: #system-config-packages # rpm q gcc 执行结果显示 gcc-3.4.3-9.EL4,说明gcc已经安装 B:进行apache服务器编译安装1.释放源码包文件:将你已经下载的httpd-2.0.63.tar.gz复制到目录 “/usr/local/src/” 2.进入此目录对httpd-2.0.63.tar.gz进行解压,执行以下命令: # cd /usr/local/src/ # tar zxvf httpd-2.0.63.tar.gz Tar命令执行成功后会在当前目录下出现名为“httpd-2.0.63”的目录,执行: # ls显示结果:httpd-2.0.63.tar.gz httpd-2.0.63 说明解压成功进入httpd-2.0.63目录: # cd httpd-2.0.633.编译前配置,执行以下命令: # ./configure prefix=/usr/local/apache2 enable-so enable-rewrite说明:-prefix指定要安装到的系统目录 -enable-so 设置apache服务器可以使用动态加载模块功能 -enable-rewrite 设置apache服务器具有rewrite功能 此命令执行过程需要比较长的时间,屏幕上将显示配置的过程信息 4.编译服务器程序,执行命令:# make此命令执行过程需要比较长的时间,屏幕上将显示编译的过程信息5.安装已经编译完成的程序:# make install此命令执行过程需要比较长的时间,屏幕上将显示安装的过程信息#ls /usr/local/此时,将会显示出apache2目录,恭喜你,安装成功了!6.如何启动apache?进入你安装好的apache2的bin目录# cd /usr/local/apache2/bin# apachectl start7. 如何关闭apache?进入你安装好的apache2的bin目录# cd /usr/local/apache2/bin# apachectl stop三、安装各个tomcat到不同的主机上四、其他配置同windows五、运行每个tomcat节点六、运行apache,运行时如报错:不能load mod_jk, mod_jk在*目录不存在,很有可能是mod_jk版本错误,检查官方网上的版本声明信息附:如果集群节点在linux下,还应该安装jdk+tomcat+mysql,执行以下步骤一、 下载以下软件,并将其放置于/usr/local/src目录下:Jdk: jdk-1_5_0-linux-i586-rpm.binTomcat: apache-tomcat-6.0.18.tar.gzMysql: mysql-5.0.67-linux-i686.tar.gz二、 安装配置JDK# chmod u+x jdk-1_5_0-linux-i586-rpm.bin /设置包可执行的属性# ./ jdk-1_5_0-linux-i586-rpm.bin /自动安装,中间需要确定安装协议只需输入yes# cd /usr/ /进入安装好的目录# ln s /usr/java/jdk1.5.0 jdk1.5.0 /创建jdk1.5.0目录连接到/usr/jdk1.5.0三、 设置环境变量:写到/etc/profile中,那样系统启动时就会自动加载jdk,打开文件/etc/profile,并将以下语句写入:export JAVA_HOME=”/usr/jdk1.5.0” export PATH=”$PATH:$JAVA_HOME/bin” export CLASSPATH=”$JAVA_HOME/lib” export CATALINA_HOME=”/root/tomcat6.0”四、 安装配置tomcat# cd /usr/local/src /进入你放置tomcat的文件夹# tar zxvf apache-tomcat-6.0.18.tar.gz -C /usr/local/ /解包至usr/local文件夹# ln s /usr/local/apache-tomcat-6.0.18/ /root/tomcat6.0 /做个tomcat6.0目录连接至tomcat五、 启动tomcat# cd /root/tomcat6.0# bin/startup.sh如果显示以下内容,恭喜你,配置OK了六、 关闭tomcat# cd /root/tomcat6.0# bin/shutdown.sh七、 安装配置mysql1. 建立mysql的用户和组,指定mysql的用户和组宿主目是”/usr/local/mysql/data# groupadd -g 200 mysql#useradd -u 200 -g mysql -d /usr/local/mysql/data -M mysql执行结果如下:2.解压安装包到指定目录并建立连接文件# tar zxvf mysql-5.0.67-linux-i686.tar.gz C /usr/local # cd /usr/local# ln -s mysql-5.0.67-linux-i686/ mysql 3. 在/var/lib目录下建立mysql的子目录,并设置属主和属组。 # mkdir /var/lib/mysql#chown R mysql:mysql /var/lib/mysql#chown R root:mysql /usr/local/ mysql-5.0.67-linux-i686/#chown R mysql:mysql /usr/local/mysql/data/执行结果如下图所示:4. 进入MYSQL服务器程序目录,复制mysql的配置文件到f 到f到“/etc”目录中 并执行mysql_install_db命令初始化MYSQL服务器中的数据#cd /usr/local/mysql#cp support-files/f /etc/f /会提示是否overwrite 只需/y 然后回车# ./scripts/mysql_install_db 执行中: 5. 设置MYSQL系统用户对行建立的数据库文件有足够的访问权限。#chown -R mysql:mysql /var/lib/mysql/#chown -R mysql:mysql /usr/local/mysql/data/ 执行过程如下: 6.启动服务,并指定系统用户mysql运行# /usr/local/mysql/bin/safe_mysqld -user=mysql &执行如下: 7. 设置数据库密码# /usr/local/mysql/bin/mysqladmin -u root password root8. 数据库登陆# /usr/local/mysql/bin/mysql u root p9. 设置数据库随机启动,在Vi /etc/rc.d/rc.local 中加入 /usr/local/mysql/support-files/mysql.server start/usr/local/apache-tomcat-6.0.18/bin/startup.sh start/etc/init.d/mysql start10.数据库授权(注意,授权后在别的电脑上才能用sqlyog登陆):GRANT ALL PRIVILEGES ON *.* TO rootlocalhost IDENTIFIED BY root WITH GRANT OPTION;GRANT ALL PRIVILEGES ON *.* TO root% IDENTIFIED BY root WITH GRANT OPTION; 11. 防止mysql数据不能正常导入的配置修改在/etc/my.conf文件的mysqld段中加入以下语句 log_bin_trust_function_creators=1lower_case_table_names=1结论:Tomcat负载平衡是为拥有高并发量的网站准备的;Tomcat集群对于硬件性能高(尤其是内存要大)且对用户高可用性需求苛刻(不需重复保存会话中的数据,例如用户连接任何一台节点服务器不需要重新输入密码)的站点,选择集群方式可以满足需求。配置问题收集与解答:1.apatch能否根据客户端IP来分发请求。Apache无此功能不过tomcat有个BalanceFilter可以根据不同的规则进行负载平衡2.jk mount能不能指定某个tomcat专门处理图片(可以)jk Mount *.jpg = worker1(worker1指向处理图片的tomcat)3.tomcat目录中的图片增加时(如上传图片会导致各个tomcat节点不一致)怎么办?没有解决详细配置附录1不同类型的workers:TypeDescriptionajp12这种类型的worker知道使用ajp12协议把请求转向tomcat,最终它将被jk使用,用来与tomcat服务器交互ajp13这种类型的worker知道使用ajp13协议把请求转向tomcat,最终它将被jk使用,用来与tomcat服务器交互jniDEPRECATED: This worker knows how to forward requests to in-process Tomcat workers using JNI.lb这种类型的worker是负载平衡worker,他知道怎样提供轮询来分配请求status这种类型的worker负责管理负载平衡2.perties列出一个workers的详细配置:Mandatory DirectivesDirectiveDefaultDescriptiontypeajp13Connection DirectivesDirectiveDefaultDescriptionhostlocalhostTomcat实例所在的主机的IP地址 port取决于协议,ajp13为8009ajp14为8011端口号,注:此处是Tomcat 监听 defined protocol requests的端口号,在我们的配置中负责与tomcat交互的worker的type为ajp,那么就是ajp通信的端口号,而不是http端口号. socket_timeout0Jk等待被request的tomcat的响应的时间(单位秒)socket_connect_timeoutsocket_timeout*1000Jk等待被connect的tomcat的响应的时间(单位毫秒). socket_keepaliveFalse在apache服务器与tomcat引擎交互时遇到防火强的cut时,socket连接是否保持的标志。如果设置成true,将要等待os设置的等待时间(默认120分钟),设置成true后会有一个坏处:apache和tomcat都要不会抛出任何错误来反应防火墙的cut,导致couldnt handle it.ping_mode-Ping的4种模式 :C,P,I,Aping_timeout10000等待ping的响应(Cpong)的时间 connection_ping_interval0 / (ping_timeout/1000)*10根据connection_ping_interval后Ping的响应状态来确定是否处于工作状态 connection_ping_interval is 10 times ping_timeout. connection_pool_sizesee text限制每个节点的Connection数Do not use connection_pool_size with values higher then 1 on Apache 2.x prefork or Apache 1.3.x!connection_pool_timeout0JK 保持 an inactive socket in cache before closing it的时间. This property should be used to reduce the number of threads on the Tomcat web server. The default value zero disables the closing (infinite timeout). connection_acquire_timeoutretries*retry_intervalworker 等待获得socket连接的时间,等待的时间超过之后,将放弃连接请求 Its default value is retries * retry_interval. lbfactor1决定了此worker将接受的requests的权重,数值越大请求被分配给它的个数越多。此属性只作用于负载平衡worker的balanced_workers属性定义的成员 Load Balancing Directives DirectiveDefaultDescriptionbalance_workers-被负载平衡work管理的worker列表These workers should not appear in the worker.list property!sticky_sessionTrue当有可以持久化多个tomcat实例的session manager机制时可以设置为false,否则设置成true(在requests中包括了SESSION ID,这样才能复制session)methodRequestR,S,T,BlockOptimisticOptimistic: balancer will not use shared memory lock to find the best worker. Pessimistic: balancer will use shared memory lock. The balancer will work more accurately in case of Pessimistic locking, but can slow down the average response time. retries2Load balance worker找不到任何member worker而重新尝试的次数,尝试时间间隔为retry_intervalStatus Worker DirectivesDirectiveDefaultDescriptioncss-Specifies the url for cascading stylesheet to use. read_onlyFalse如果为true就意味着不能做任何改变运行时状态的操作如管理负载平衡时停止某个worker user-定义了可以访问status worker的user列表,不在列表中的user没有权限,默认任何user都有权限user_case_insensitiveFalse匹配user是否匹配大小写 gooda.o,a.n,a.b,a.r状态为good的worker列表For every load balancer worker, the status worker shows a summary of the state of its members. There are three such states, good, bad and degraded. bads,e状态为bad的worker列表 prefixworkerstatus worker 为 properties output (mime=prop). 添加的前缀 nsjk:定制status worker 输出的XML的命名空间. If set to - no namespace will be used. xmlns-定制status worker 输出的XML的xmlnsDefault value is set to xmlns:jk= doctype-定制status worker 输出的XML的类型This value will be inserted to the output xml after the xml header. Advanced Worker Directives DirectiveWorker TypeDefaultDescriptionconnect_timeoutAJP,SUB0连接时间限制,如果到时间还未收到pong表明失败 prepost_timeoutAJP,SUB0在request前先发送一个ping,此属性就是发送ping后得到pong的时间限制,超过此时间则认为失败 retriesAJP,SUB2重新request的次数,2表明error后重新请求1次 retry_intervalAJP,SUB100Worker在重新尝试request前的停止时间,即两次重新请求的间隔 recovery_optionsAJP,SUB01: Tomcat接收到request后失败时不恢复2: Tomcat接收到request并setheader到客户端失败时不恢复4: tomcat response失败时关闭connection8: 只恢复HEAD method requests 。16:只恢复GET method requests fail_on_statusAJP,SUB0标志worker失败的属性,如果此worker是lb的成员,当它返会的状态与此属性匹配则会被设置为error(如-404)max_packet_sizeAJP,SUB8192AJP 数据包的 size BytesmountAJP,LB-定义worker可以处理的uri列表 max_reply_timeoutsLB0当设置了这个属性就会让worker此时间内没有响应就设置为errorrecover_timeLB60Worker恢复工作的时间,在worke出错达到recover_time后load balancer才会再度分requests给此Workererror_escalation_timeLBrecover_time / 2在worker发生错误后,把worker状态改为error state的时间间隔. activationSUBActiveWorker的活动状态可被status worker在运行时改为stop,disable session_cookieLBJSESSIONID在cookie中能唯一标识session的路由标识符。存到cookie中的字符”.”之后 session_pathLB;jsessionid在cookie中能唯一标识session的路由标识符。存到session_path中的字符”.”之后 Deprecated Worker Directives不推荐的属性,在过去的版本中的指令(Directives)DirectiveSuccessorDefaultDescriptioncachesizeconnection_pool_sizesee text用于在多线程服务器(Apache 2)中limit每个tomcat上面的connection (AJP)。cache_timeoutconnection_pool_timeout0Cache timeout property 定义了一个open socket 在cache中处于open状态的时间;用来减少线程的数量 on the Tomcat web server. recycle_timeoutconnection_pool_timeout0表示阻断inactivity的ajp13 conection的时间间隔,用来保证too old threads living on Tomcat side,缺点:但是下次用到时又要重新open conectionbalanced_workersbalance_workers-被用来负载平衡worker管理的worker列表. disabledactivationFalse如果设置为 True or 1 worker变为不可用;在运行期间可以被status worker(前面介绍了此worker 用来管理负载平衡,在管理页面可以设置某个worker为disabled)改变 stoppedactivationFalse当设置为 True or 1 时 worker(member of lb) 被停止;在复制session时才起作用,在运行期间可以被status worker(前面介绍了此worker 用来管理负载平衡,在管理页面可以设置某个worker为stop)改变jvm_route3.列举不同类型worker的配置实例:Status Worker propertiesThe status worker does not communicate with Tomcat. Instead it is responsible for the load balancer management. # Add the status worker to the worker list worker.list=jkstatus # Define a jkstatus worker using status worker.jkstatus.type=statusNext thing is to mount the requests to the jkstatus worker. For Apache web servers use the: # Add the jkstatus mount point JkMount /jkmanager/* jkstatus To obtain a higher level of security use the: # Enable the JK manager access from localhost only JkMount jkstatus Order deny,allow Deny from all Allow from 4.tomcat的server.Xml中的各个节点Server节点:Server代表整个Catalina servlet容器。在server.xml配置文件中必须是顶层元素且唯一,给它配置的属性代表整个容器的属性。Service节点:service由连接器connector和共享的处理引擎(Engine)。Connector节点:Connector分为http connector和ajp3 connector,http connector用 Http/1.1协议 Connector接侦听来自客户端浏览器的http请求,此时tomcat作为独立的web服务器;ajp3 connector用ajp3协议侦听来自其它Web服务器的请求,此时tomcat只作为servlet容器;Engine节点:处理引擎(Engine)代表一个Service所属的请求处理机,它接受所有连接器传递过来的客户端请求,将处理结果返回给连接器,由连接器将最终响应返回给客户端。Engine必须配置在Service组件下。处理引擎下可以配置多个虚拟主机(Virtual Host),每个虚拟主机都有一个域名。当处理引擎获得一个请求时,它把该请求匹配到某个虚拟主机上,把请求交给该虚拟主机来处理。处理引擎有一个默认虚拟主机,当请求无法匹配到任何一个虚拟主机上时,交给默认虚拟主机来处理。Host节点:代表一个虚拟主机,每个虚拟主机和某个网络域名(Domain Name)相匹配。每个虚拟主机下都可以部署(deploy)一个或者多个Web应用程序(Web Application),每个Web应用程序对应于一个Context,有一个Context path。当虚拟主机获得一个请求时,将把该请求匹配到某个Context上,然后把该请求交给该Context来处理。匹配的方法是“最长匹配”,一个path=的Context将成为该虚拟主机的默认Context。所有无法和其它Context的路径名匹配的请求都将最终和该默认Context匹配。 在许多情况下,系统管理员希望将多个网络域名绑定到同一个虚拟主机,这就需要使用“主机别名”技术来实现。 Context节点: 一个Context对应于一个Web应用程序,一个Web应用程序由一个或者多个Servlet组成。Context在创建的时候将根据配置文件$CATALINA_HOME/

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论