apache与tomcat及整合实现负载均衡及集群.doc_第1页
apache与tomcat及整合实现负载均衡及集群.doc_第2页
apache与tomcat及整合实现负载均衡及集群.doc_第3页
apache与tomcat及整合实现负载均衡及集群.doc_第4页
apache与tomcat及整合实现负载均衡及集群.doc_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

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

文档简介

apache与tomcat及整合实现负载均衡及集群doc文档可能在WAP端浏览体验不佳。建议您优先选择TXT,或下载源文件到本机查看。 apache 与 tomcat 的区别: 服务器环境程序, 服务器使用。 Apache 是一个 web 服务器环境程序,可以作为 web 服务器使用。不过只支持静 态网页,如(asp,php,cgi,jsp)等动态网页的就显得无能为力。 如果想让服务器也能处理动态页面, Tomcat。 如果想让服务器也能处理动态页面,那么就需要 Tomcat。 当处理静态页面时,Tomcat 迅速。 当处理静态页面时,Tomcat 不如 Apache 迅速。Tomcat 不象 Apache 一样可配置 (如:可以作为一个代理服务器,即 loadbalaner)。 Tomcat 不象 Apache 一样强壮。 基于以上原因,一个现实的网站使用一个 Apache 作为 Web 服务器,为网站的静 态页面请求提供服务;并使用 Tomcat 服务器作为一个 Servlet/JSP 插件,显示 网站的动态页面。 apache+tomcat 是企业级的应用 ! 采用 apache+tomcat 结合应用 ! 1.Apache 主要用来解析静态文本,如 html,tomcat 也有此功能,但 apache 能大 大提高效率,对于并发数较大的企业级应用,能更好的显示 apache 的高效率; 2.Tomcat 用来解析 jsp,servlet 等,所有的客户请求首先会发送到 apache, 如果 请求是静态文本则由 apache 解析, 并把结果返回给 客户端, 如果是动态的请求, 如 jsp,apache 会把解析工作交给 tomcat,由 tomcat 进行解析(这首先要两者 现实整合),tomcat 解析完 成后,结果仍是通过 apache 返回给客户端,这样 就可以达到分工合作,实现负载均衡,提高系统的性能! (2) 用 apache 实现 html 和 jsp 文件分离访问: apache 在处理静态页面及资源文件(图片,CSS 文件)的优势-作为图片服务 器,将动态页面请求由 apache 转发到应用服务器 tomcat 缓解了大并发量下,应 用服务器的压力。 默认是不需要配置的,也就是说你把需要给 tomcat 处理的后缀在配置文件 (httpd.conf)中写好,那么剩下的就都是 apache 处理的了。 将要默认处理的 html 文件放于 apache 默认的发布目录下即可。 所有的配置, apache 所有的配置,都在 httpd.conf 中。 配置端口: 配置端口: Listen 80 DocumentRoot: DocumentRoot: 应该是定义这个服务器对外发布的超文本文档存放的路径, -可以修改为任 何其它路径。 DocumentRoot F:/loadBalance/apache/Apache2/htdocs 也可以自定义虚拟容器。如下面第 3 点。 (3) 的发布目录: 自定义 apache 的发布目录: 通过修改 Apache 的配置文件%APACHE2_HOME%/conf/httpd.conf 可以定置自己的 Apache 服务器。注意修改该配置文件前要先停止正 在运行的 Apache 服务器。 在相应位置增加以下行可以定义自己的文件系统容器, 设置自己的本地文件系统 到网络空间的映射: Alias /homepage D:/heavyz/homepage Options Indexes FollowSymLinks -ExecCGI DirectoryIndex index.php index.html home/index.php home/index.html Order allow,deny Allow from all Deny from enpc.fr 分析: 以上语句通过标签定义了一个文件系统容器,并使用 Alias 指令把 该容器映射到/homepage 的 URL 上去。通过这里的设置,不会影响原来的 DocumentRoot,或其它的已自定义的文件系统容器。 在该文件系统容器中还定义了一系列属性。对上述配置的解释如下: * and : 定义本地文件系统 容器,该容器位于 D:/heavyz/homepage 中。 * Alias /homepage D:/heavyz/homepage : 当 URL 中的路径名为/homepage 时,将映射到该文件系统容器中。 * Options Indexes FollowSymLinks -ExecCGI : 当搜索不到默认首页时,允许 列出目录的内容;允许目录中的符号链;不允许执行 CGI 脚本。 * DirectoryIndex index.php index.html home/index.php home/index.html : 按照列出的四个本地 URL 搜索默认首页,最先找到的文件作为首页返回。(即若 URL:http:/localhost/homepage,则会先搜索默认首页,若查不到相应的默认 首面,则根据第二点配置,显示 homepage 当前目录的文件列表) * Order allow,deny : Order 规定了 HTTP 客户的访问权限。先允许再禁止 (allow,deny)表明 allow 中允许的访问权限优先级低于 deny 中禁止的访问权 限。 * Allow from all : 先允许来自任何地方的 HTTP 客户的访问请求。 * Deny from enpc.fr : 再禁止域名为 enpc.fr 的 HTTP 客户的访问请求(国立 路桥学校 ENPC 的主机不允许访问该页面),对于这些客户,服务器返回 403 Forbidden 信息。注意 Order 中定义了 deny 的优先级高于 allow,故该指令将生 效。 假设在本地文件系统上存在文件 D:heavyzhomepageindex.html,重新启动 Apache 服务器,并访问页面:http:/localhost/homepage 将可以访问到上述文 件(前提是你不在 ENPC 的网络内)。 (4) 目前比较常用的负载均衡技术主要有: 目前比较常用的负载均衡技术主要有: 1. 基于 DNS 的负载均衡 通过 DNS 服务中的随机名字解析来实现负载均衡,在 DNS 服务器中,可以为多个 不同的地址配置同一个名字,而最终查询这个名字的 客户机将在解析这个名字时得到其中一个地址。因此,对于同一个名字,不同的 客户机会得到不同的地址,他们也就访问不同地址 上的 Web 服务器,从而达到负载均衡的目的。 这种组合) 2. 反向代理负载均衡 (如 Apache+JK2+Tomcat 这种组合) 使用代理服务器可以将请求转发给内部的 Web 服务器, 让代理服务器将请求均匀 地转发给多台内部 Web 服务器之一上,从而达到负载 均衡的目的。这种代理方式与普通的代理方式有所不同,标准代理方式是客户使 用代理访问多个外部 Web 服务器,而这种代理方式 是多个客户使用它访问内部 Web 服务器,因此也被称为反向代理模式。 3. 基于 NAT Network Address Translation) ( 的负载均衡技术(如 Linux Virtual Server,简称 LVS)网络地址转换为在内部地址和外部地址之间进行转换,以便 具备内部地址的计算机能访问外部网络,而当外部网络中的计算机访问 地址转换网关拥有的某一外部地址时, 地址转换网关能将其转发到一个映射的内 部地址上。 因此如果地址转换网关能将每个连接均匀转换为不同的内部服务器地 址,此后外部网络中的计算机就各自与自己转换得到的地址上服务器进行通信, 从而达到负载分担的目的。 (5) 负载均衡和集群: Apache,Tomcat 负载均衡和集群: 1. 对请求的处理又有两种不同的方式:负载平衡、状态复制(即集群). 负载平衡: 负载平衡: 每台服务器都是独立的,只是对请求的负载进行平衡,而不对状态(SESSION)进 行复制。 状态复制(集群): ):先进行负载平衡,再在各服务器间复制应用状态。 状态复制(集群): 2. 负载均衡的原理: apache 负载均衡的原理: 1). 负载平衡原理: mod_jk 负载平衡原理: 使用 mod_jk 默认的以轮循方式进行平衡负载,假设有四个服务器节点,有 10 个请求,则 第一个节点会得到 1,5,9 请求; 第二个节点会得到 2,6,10 请求; 第三个节点会得到 3,7 请求; 第四个节点会得到 4,8 请求; 2). 负载均衡与故障复原: Mod_JK2 负载均衡与故障复原: Apache httpd 是当成 web 服务器,使用 mod_jk2 将请求传送给 Tomcat,就可以 使用 mod_jk2 的负载均衡与容错功能。 带有 mod_jk2 的 Apache(httpd)可以做的事情包括: A、将请求分配至一或多个 Tomcat 实例上你可以在 mod_jk2 的 perties 文件中,设定许多 Tomcat 实例,并赋于每个实例一个 lb_factor 值,以作为请求分配的加权因子。 B、侦测 Tomcat 实例是否失败当 Tomcat 实例的连接器服务不再响应时,mod_jk2 会及时侦测到,并停止将请求送给它。其他的 Tomcat 实例则会接受失效实例的 负载。 C、侦测 Tomcat 实例在失效后的何时恢复因连接器服务失效,而停止将请求分配 给 Tomcat 实例之后,mod_jk2 会周期性地检查是否已恢复使用性,并自动将其 加入现行的 Tomcat 实例池中。 3). 实践证明,在各应用服务器之间不需要状态复制的情况下, 实践证明,在各应用服务器之间不需要状态复制的情况下,负载平衡可以达到 性能的线性增长及更高的并发需求 并发需求。 性能的线性增长及更高的并发需求。 集群原理: 3 集群原理: 集群方式也是使用这种方法进行平衡。Tomcat 中的集群原理是通过组播的方式 进行节点的查找并使用 TCP 连接进行会话的复制。 集群与负载均衡的优缺点: 集群与负载均衡的优缺点: 不足: 集群不同于负载平衡的是, 由于集群服务需要在处理请求之间不断地进行会话复 制,复制后的会话将会慢慢变得庞大,因此它的资 源占用率是非常高的, 如果在并发量大的应用中, 复制的会话大小会变得相当大, 而使用的总内存更是会迅速升高。 优点: 但集群的会话复制,增加了系统的高可用性。由于在每台服务器都保存有用户的 Session 信息,如果服务器群中某台当机,应用可以自动切换到其它服务器上继 续运行,而用户的信息不会丢失,这提高了应用的冗错性。 具体采用负载平衡还是集群,这要看应用的需求了。 (6) 负载均衡和集群配置: Apache,Tomcat 负载均衡和集群配置: 0,环境说明 Apache Tomcat: :apache_2.0.55 1 个 apache-tomcat-5.5.17 (zip 版) 2 个 1个 mod_jk: mod_jk-apache-2.0.55.so 第一部分: 第一部分:实现负载均衡 负载均衡,就是 apache 将客户请求均衡的分给 tomcat1,tomcat2.去处理 1.下载, 1.下载,安装 apche,tomcat 下载 / 下载 Apache 2.0.55 /download-55.cgi 下载 tomcat5.5 zip 版本(解压 即可,绿色版) /tomcat/tomcat-connectors/jk/binaries/win32/j k-1.2.15/ 下载 mod_jk,注意和 apache 版本匹配 本文附件中, 以有 apache_2.0.55+mod_jk-apache-2.0.55.so。 可直接下载使用。 安装 apache: 此处注意,如果你本机已经装了 iis 并且占用 80 端口,务必先在服务中将 iis 停止或禁用。 软件默认安装即可。安装过程中设置 Network Domain 和 Server Name 为 localhost,设置你的 email(可任意设置)地址,下方会让你选择 only for the current user 或 for all users。默认选择 for all users。这样 Apache 就会 占用 80 端口,并且做为一个系统服务开机自运行。 安装完成之后,你在浏览器中输入 http:/localhost,将会看到 Apache 的成功 页面.此时 Apache,已经运行,你可以在窗口的托盘看到他的图标,双击图标,在 弹开的窗口选择Open Apache Monitor,点 Stop,停止 Apaceh 服务,因为下面 要安装 Tomcat 和 JK. 的安装: JK 的安装: 把 mod_jk_2.0.55.so 拷贝到 d:Apache Apache2modules下. 以上安装全部完成后,打开 cmd 命令提示符,运行 d:ApacheApache2binApache.exe -t 你将会看到Syntax OK,表示 Apache 配置正常这个命令非常有用,下面在继续配置 Apache 的时候还会再次用到。 2.修改 2.修改 Apache 配置文件 http.conf 在 apache 安装目录下 conf 目录中找到 http.conf 在文件最后加上下面一句话就可以了 include E:ideapacheApache2confmod_jk.conf 文件,内容如下( 2. http.conf 同目录下新建 mod_jk.conf 文件,内容如下(或直接将此内容写 到上面的文件中也可) 到上面的文件中也可) #加载 mod_jk Module LoadModule jk_module modules/mod_jk-apache-2.0.55.so #指定 perties 文件路径 JkWorkersFile conf/perties #指定那些请求交给 tomcat 处理,controller为在 pertise 里指定 的负载分配控制器 JkMount /*.jsp controller 也可以根据需要添加,如: JkMount /servlet/* controller JkMount /*.do controller 文件, 3. 在 http.conf 同目录下新建 perties 文件,内容如下 worker.list = controller #=tomcat1= worker.tomcat1.port=8009 #ajp13 端口号,在 tomcat 下 server.xml 配置,默认 8009 worker.tomcat1.host=localhost #tomcat 的主机地址,如不为本机,请填写 ip 地址 worker.tomcat1.type=ajp13 worker.tomcat1.lbfactor = 1 #server 的加权比重,值越高,分得的请求越 多 #=tomcat2= worker.tomcat2.port=9009 #ajp13 端口号,在 tomcat 下 server.xml 配置,默认 8009 worker.tomcat2.host=localhost #tomcat 的主机地址,如不为本机,请填写 ip 地址 worker.tomcat2.type=ajp13 worker.tomcat2.lbfactor = 1 #server 的加权比重,值越高,分得的请求越 多 #server 列表 #=controller, 负载均衡控制器= worker.controller.type=lb worker.controller.balanced_workers=tomcat1,tomcat2 #指定分担请求的 tomcat worker.controller.sticky_session=true worker.porperties 配置说明: 假设定义了两个 worker,一个为 server99,另一个为 server202,定义了一个 负载平衡服务器 loadbalancer。 A、worker.list=loadbalancer 设定工作的负载平衡器,各 Tomcat 节点不能加入此列表。 B、worker.server99.lbfactor 负载平衡的权重比,如果此权重比越大,则分配到此节点的请求越多,如以上两 个节点的权重比为 1:1,则为平均分配。 C、worker.loadbalancer.balance_workers=server99,server202 指定此负载平衡器负责的 Tomcat 应用节点。 D、worker.loadbalancer.sticky_session=true 此处指定集群是否需要会话复制,如果设为 true,则表明为会话粘性,不进行 会话复制,当某用户的请求第一次分发到哪台 Tomcat 后,后继的请求会一直分发到此 Tomcat 服务器上处理;如果设为 false, 则表明需求会话复制。 4.修改 4.修改 tomcat 配置文件 server.xml 如果你在不同电脑上安装 tomcat,tomcat 的安装数量为一个,可以不必修改 tomcat 配置文件.我这里是在同一台电脑上安装两个 tomcat, 所以需要更改其中 一个的设置 打开 tomcat2/conf/server.xml 文件 jsp 5. 编写一个测试 jsp 建立一个目录 test.里面新建一个 test.jsp,内容为 把 test 放到 tomcat1,tomcat2 的 webapps 下 apache,tomcat1,tomcat2,进行测试 6. 启动 apache,tomcat1,tomcat2,进行测试 通过 http:/localhost/test/test.jsp 访问,查看 tomcat1 的窗口,可以看到 打印了一行= 再刷新一次,tomcat2 也打印了一条,再刷新,可以看到请求会被 tomcat1,tomcat2 轮流处理,实现了负载均衡 第二部分, 第二部分,配置集群 只配置负载均衡还不行,还要 session 复制,也就是说其中任何一个 tomcat 的 添加的 session,是要同步复制到其它 tomcat, 集群内的 tomcat 都有相同的 session tomcat2 server.xml,将集群部分配置的在注释符删掉,并 1. 修改 tomcat1, tomcat2 的 server.xml 将 tomcat2 的 4001 端口改为 4002,以避免与 tomcat 冲突,当然,如果是两台 电脑,是不用改端口的,去掉注释符即可 2,修改测试项目 test 修改 test.jsp,内容如下 Server Info: 0) String dataValue = request.getParameter(dataValue); session.setAttribute(dataName, dataValue); out.print(Session 列表); Enumeration e = session.getAttributeNames(); while (e.hasMoreElements() String name = (String)e.nextElement(); String value = session.getAttribute(name).toString(); out.println( name + = + value+ ); System.out.println( name + = + value);

温馨提示

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

最新文档

评论

0/150

提交评论