您的位置:首页 > 运维架构 > Tomcat

【服务配置】apache+tomcat配置负载均衡的网站

2006-11-09 23:12 543 查看
[align=left] 在网上找了一些文档,还是觉得不是很清楚,自己走了些弯路,才把这个配置好,还是写下来吧,以备后查。 [/align]
[align=left] [/align]
[align=left] 1.目标[/align]
[align=justify]使用 apache 和 tomcat 配置一个可以应用的 web 网站,要达到以下要求:1、 Apache 做为 HttpServer ,后面连接多个 tomcat 应用实例,并进行负载均衡。2、 为系统设定 Session 超时时间,包括 Apache 和 tomcat 3、 为系统屏蔽文件列表,包括 Apache 和 tomcat [/align]
[align=justify]2.安装 tomcat [/align]
[align=justify]2.1. 下载,解压 tomcat [/align]
[align=justify]不要下载安装版 , 下载地址[/align]
[align=justify]http://tomcat.apache.org [/align]
[align=justify]2.2. 配置 tomcat [/align]
[align=justify]2.2.1. 配置 server 的关闭口[/align]
[align=justify]我们需要在一台机器上跑 2 个不同的 tomcat ,需要修改不同的 tomcat 的关闭口,避免出现端口被占用的情况。在 server.xml 中找到 server, 将:[/align]
[align=justify]<Server port="8005" shutdown="SHUTDOWN">[/align]
[align=justify]改为[/align]
[align=justify]<Server port="XXXX" shutdown="SHUTDOWN">[/align]
[align=justify]XXXX在这里表示不同的端口:我的两个 tomcat 分别使用 8035 , 8045 [/align]
[align=justify] [/align]
[align=justify]注意:这里之所以要配置不同的 tomcat 关闭口,只是因为我们使用了多个 tomcat ,其实用一个 server 多个实例也可以。[/align]
[align=justify]2.2.2. 配置 service [/align]
[align=justify]我们需要对不同的 tomcat 的 service 取不同的名字,在 server.xml 中找到:[/align]
[align=justify]<Service name="Catalina">[/align]
[align=justify]改为:[/align]
[align=justify]<Service name="XXXX">[/align]
[align=justify]两个 service 分别为 tomcat6 和 tomcat5 [/align]
[align=justify]2.2.3. 配置 Connector [/align]
[align=justify]这个部分主要是要改两个 Connector ,当然前提是你的 tomcat 只有两个 Connector 。[/align]
[align=justify]修改 ajp1.3 的端口:[/align]
[align=justify]找到: <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" /> [/align]
[align=justify]改为: <Connector port="XXXX" protocol="AJP/1.3" redirectPort="8443" /> [/align]
[align=justify]两个 Service 的 ajp/1.3 的端口分别为: 8019 , 8029 [/align]
[align=justify]修改 http 的端口:[/align]
[align=justify]找到:[/align]
[align=justify]<Connector port="8080" protocol="HTTP/1.1" [/align]
[align=justify] maxThreads="150" connectionTimeout="20000" [/align]
[align=justify] redirectPort="8443" />[/align]
[align=justify]改为:[/align]
[align=justify]<Connector port="XXXX" protocol="HTTP/1.1" [/align]
[align=justify] maxThreads="150" connectionTimeout="20000" [/align]
[align=justify] redirectPort="8443" />[/align]
[align=justify]两个 Service 的 ajp/1.3 的端口分别为: 8060 , 8070 [/align]
[align=justify]2.2.4. 配置 Engine [/align]
[align=justify]Engine 主要是配置 jvmRoute 属性,找到:[/align]
[align=justify]<Engine name="Catalina" defaultHost="localhost">[/align]
[align=justify]改为:[/align]
[align=justify]<Engine jvmRoute="XXXX" name="Catalina" defaultHost="localhost">[/align]
[align=justify]两个实例分别为: tomcat6 和 tomcat5. [/align]
[align=justify]2.2.5. 配置公用性 Context [/align]
[align=justify]如果有 Context 是多个系统公用的,比如图片等的存放地,可以做个配置:[/align]
[align=justify]在 Host 中增加:[/align]
[align=justify]<Context path="/image" docBase="D:/webRoot/image" debug="0" reloadable="false" crossContext="true"> [/align]
[align=justify]</Context> [/align]
[align=justify]2.2.6. 屏蔽文件列表[/align]
[align=justify]打开 tomcat 目录下的 conf/web.xml ,[/align]
[align=justify]找到:[/align]
[align=justify]<servlet>[/align]
[align=justify] <servlet-name>default</servlet-name>[/align]
[align=justify] <servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>[/align]
[align=justify] <init-param>[/align]
[align=justify] <param-name>debug</param-name>[/align]
[align=justify] <param-value>0</param-value>[/align]
[align=justify] </init-param>[/align]
[align=justify] <init-param>[/align]
[align=justify] <param-name>listings</param-name>[/align]
[align=justify] <param-value>true</param-value>[/align]
[align=justify] </init-param>[/align]
[align=justify] <load-on-startup>1</load-on-startup>[/align]
[align=justify] </servlet>[/align]
[align=justify]将 listings 参数改为 false; [/align]
[align=justify]2.3. 配置应用 (web.xml) [/align]
[align=justify]对系统应用做些控制。[/align]
[align=justify]配置 session 过期时间,大多数网站用户都只是做些浏览性的操作,为了减轻服务器负载压力,我们将 session 超时时间从默认的 30 分钟变为 5 分钟。[/align]
[align=justify]在 web 应用程序的 web.xml 中 servlet-mapping 之后增加如下一段:[/align]
[align=justify]<session-config>[/align]
[align=justify] <session-timeout>5</session-timeout>[/align]
[align=justify]</session-config>[/align]
[align=justify]3.安装 Apache [/align]
[align=justify]3.1. 下载、安装 Apache [/align]
[align=justify]下载地址 http://httpd.apache.org/download.cgi [/align]
[align=justify]下载后点击安装 msi 文件。[/align]
[align=justify]安装的时候没有什么特别需要注意的地方,按照默认就行了。是否安装为 service 看具体情况而定。[/align]
[align=justify]3.2. 下载、安装 Apache tomcat Connector [/align]
[align=justify]http://tomcat.apache.org/download-connectors.cgi [/align]
[align=justify]注意,很多网站上都介绍是 JK2 ,可能是觉得 JK2 比 JK 要新吧,其实 JK2 已经停止研发了,建议使用 jk1.2 。[/align]
[align=justify]下载压缩包,之后将 module 目录中的mod_jk-apache****.so文件放入/module/目录下。[/align]
[align=justify]3.3. 配置 Apache httpd.conf [/align]
[align=justify]3.3.1. 配置端口:[/align]
[align=justify]找到[/align]
[align=justify]Listen 80[/align]
[align=justify]改为[/align]
[align=justify]Listen **[/align]
[align=justify]当然如果不需要改的话,就不用改了。正常情况无须更改。[/align]
[align=justify]3.3.2. 配置 DocumentRoot [/align]
[align=justify]找到 DocumentRoot 段,将其改为:[/align]
[align=justify]DocumentRoot "E:/MyWebsite"[/align]
[align=justify]这里的 "E:/MyWebsite" 指的是你的 web 程序的根路径,视具体应用而定。[/align]
[align=justify]3.3.3. 配置 serverName [/align]
[align=justify]找到 serverName 这个段,将其配置为你的 ServerName [/align]
[align=justify]如果没有配置为域名,配为 IP 也可以,此处还不是很清楚,多虚拟主机的情况的配置。[/align]
[align=justify]3.3.4. 配置虚拟主机[/align]
[align=justify]<VirtualHost *:80>[/align]
[align=justify] ServerAdmin flyffa@gmail.com[/align]
[align=justify] DocumentRoot E:/MyWebsite[/align]
[align=justify] ServerName localhost[/align]
[align=justify] DirectoryIndex index.html index.htm index.jsp[/align]
[align=justify] ErrorLog logs/error_log[/align]
[align=justify] CustomLog logs/access_log common[/align]
[align=justify] ErrorDocument 404 /sys/logon.jsp[/align]
[align=justify]</VirtualHost>[/align]
[align=justify]3.4. 配置 JK 方式的负载均衡[/align]
[align=justify]3.4.1. 配置 module [/align]
[align=justify]我们需要与 tomcat 做连接,所以要把 tomcat 的 connector 的模块配置进去。[/align]
[align=justify]在 LoadModule 部分加入:[/align]
[align=justify]LoadModule jk_module modules/mod_jk-apache-2.0.55.so-加载模块[/align]
[align=justify]这个 so 是我下载的版本,个人可以根据自己下载的文件名加以配置[/align]
[align=justify]JkWorkersFile conf/workers.properties-指定 connector 的配置文件名称[/align]
[align=justify]JkLogFile logs/mod_jk.log-指定 connector 的日志文件名称[/align]
[align=justify]JkLogLevel info-指定 connector 的日志等级[/align]
[align=justify]3.4.2. 配置 worker 列表 (conf/workers.properties) [/align]
[align=justify]定义列表[/align]
[align=justify]worker.list=tomcat6,tomcat5,loadbalancer[/align]
[align=justify]定义一个名为 “loadbalancer” worker [/align]
[align=justify]其作为对多个 Tomcat 进程的负载平衡使用:[/align]
[align=justify]worker.loadbalancer.type=lb [/align]
[align=justify]worker.loadbalancer.balanced_workers=tomcat5, tomcat6[/align]
[align=justify](负载平衡类型的 worker 并不与 Tomcat worker 通讯,它负责管理这些 Tomcat worker 。)[/align]
[align=justify]定义多个 worker 列表[/align]
[align=justify]# Set properties for tomcat6 (ajp13)[/align]
[align=justify]worker.tomcat6.type=ajp13[/align]
[align=justify]worker.tomcat6.host=localhost[/align]
[align=justify]worker.tomcat6.port=8019[/align]
[align=justify]worker.tomcat6.lbfactor=50[/align]
[align=justify]worker.tomcat6.cachesize=10[/align]
[align=justify]worker.tomcat6.cache_timeout=600[/align]
[align=justify]worker.tomcat6.socket_keepalive=1[/align]
[align=justify]worker.tomcat6.reclycle_timeout=300[/align]
[align=justify] [/align]
[align=justify]# Set properties for tomcat5 (ajp13)[/align]
[align=justify]worker.tomcat5.type=ajp13[/align]
[align=justify]worker.tomcat5.host=localhost[/align]
[align=justify]worker.tomcat5.port=8029[/align]
[align=justify]worker.tomcat5.lbfactor=50[/align]
[align=justify]worker.tomcat5.cachesize=10[/align]
[align=justify]worker.tomcat5.cache_timeout=600[/align]
[align=justify]worker.tomcat5.socket_keepalive=1[/align]
[align=justify]worker.tomcat5.reclycle_timeout=300[/align]
[align=justify]注意:lbfactor=50(当此 Tomcat worker 被用于一个负载平衡 worker 使用时,此属性将被使用。它定义了此 worker 的负载平衡权值。)cachesize=10(当在多线程的 web server (例如 apache2.0 、 IIS 、 Netscape )中使用 JK 时,此属性是有效的。如果将 cachesize 的值设置为较高的值,这些支持多线程的 web server 将获得很好的处理能力。如果此属性不被设置,则连接 cache 特性将失效。)[/align]
[align=justify]3.4.3. 配置 Apache tomcat 的桥接[/align]
[align=justify]在 DocumnetRoot 片段下加入[/align]
[align=justify]JkMount /*.jsp tomcat6[/align]
[align=justify]JkMount /*.do tomcat6[/align]
[align=justify]JkMount /*Servlet tomcat6[/align]
[align=justify]这里只是简单的将 apache 的请求转到其中的一个 tomcat 中,形成桥接,至于负载均衡的时候,就无须进行这步操作,直接启动负载均衡。启动负载均衡见下一节。[/align]
[align=justify]3.4.4. 启动负载均衡[/align]
[align=justify]在 DocumnetRoot 片段下加入[/align]
[align=justify]JkMount /*.jsp loadbalancer[/align]
[align=justify]JkMount /*.do loadbalancer[/align]
[align=justify]JkMount /*Servlet loadbalancer[/align]
[align=justify]-指定对所有的请求启动负载均衡,这里的 loadbalancer 是定义的 worker 的名字[/align]
[align=justify]这里我在配置的时候犯了两个错误:[/align]
[align=justify]第一是没有配置 JkWorkersFile conf/workers.properties ,以为 Apache 会自动认识(其实 apache 是自动产生了一个叫做 ajp13 的 worker ,指向本机的 8009 端口)。[/align]
[align=justify]第二是以为 JkMount 语句中出现 loadbalancer,ajp13 之类的是系统设定的东西,其实都是在 workers.properties 文件中定义的,结果出现名字不匹配的情况。后来配置了 JkLogFile logs/mod_jk.log 之后看到错误日志才明白。[/align]
[align=justify]3.5. 配置 Proxy 方式的负载均衡[/align]
[align=justify]使用 Apache2.1 以上的版本,就可以用 mod_proxy_ajp 来完成负载均衡的配置,不过到目前为止,没有看到如何让 Apache 负责静态部分, tomcat 负责动态部分的配置方式,只能用 path 进行区分分发请求。如:在虚拟主机的配置中增加:[/align]
[align=justify]ProxyPass / ajp://localhost:8019/[/align]
[align=justify]ProxyPassReverse / ajp://localhost:8019/[/align]
[align=justify]而形如:[/align]
[align=justify]ProxyPass /*.jsp ajp://localhost:8019/[/align]
[align=justify]ProxyPassReverse /*.jsp ajp://localhost:8019/[/align]
[align=justify]这样的配置是不能通过的。[/align]
[align=justify]请高手指教。[/align]
[align=justify] [/align]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: