集群的简单理解

  |  

  本文关于集群理解部分,摘自CSDN博文Tomcat服务器集群与负载均衡

集群理解

前言

  在单一的服务器上执行WEB应用程序有一些重大的问题,当网站成功建成并开始接受大量请求时,单一服务器终究无法满足需要处理的负荷量,所以就有点显得有点力不从心了。另外一个常见的问题是会产生单点故障,如果该服务器坏掉,那么网站就立刻无法运作了。不论是因为要有较佳的扩充性还是容错能力,我们都会想 在一台以上的服务器计算机上执行WEB应用程序。所以,这时候我们就需要用到集群这一门技术了。

名词理解

  • 集群(Cluster):是一组独立的计算机系统构成一个松耦合的多处理器系统,它们之间通过网络实现进程间的通信。应用程序可以通过网络共享内存进行消息传送,实现分布式计算机。

  • 负载均衡(Load Balance):先得从集群讲起,集群就是一组连在一起的计算机,从外部看它是一个系统,各节点可以是不同的操作系统或不同硬件构成的计算机。如一个提供Web服务的集群,对外界来看是一个大Web服务器。不过集群的节点也可以单独提供服务。

特点:在现有网络结构之上,负载均衡提供了一种廉价有效的方法扩展服务器带宽和增加吞吐量,加强网络数据处理能力,提高网络的灵活性和可用性。

集群系统主要解决的几个问题

  • 高可靠性(HA):利用集群管理软件,当主服务器故障时,备份服务器能够自动接管主服务器的工作,并及时切换过去,以实现对用户的不间断服务。
  • 高性能计算(HP):即充分利用集群中的每一台计算机的资源,实现复杂运算的并行处理,通常用于科学计算领域,比如基因分析,化学分析等。
  • 负载平衡:即把负载压力根据某种算法合理分配到集群中的每一台计算机上,以减轻主服务器的压力,降低对主服务器的硬件和软件要求。

总结

  总体来说,在负载均衡的思路下,多台服务器为对等方式,每台服务器都具有同等的地位,可以单独对外提供服务而无须其他服务器的辅助。通过负载分担技术,将外部发送来的请求按一定规则分配到对称结构中的某一台服务器上,而接收到请求的服务器都独立回应客户机的请求。
  提供服务的一组服务器组成了一个应用服务器集群(cluster),集群下的对等多机环境可以增加系统的并发处理能力,和单台机器出现故障系统的错误冗余能力;同时实现了负载均衡和系统高可靠性。

常用负载均衡技术

  • 基于DNS的负载均衡
    通过DNS服务中的随机名字解析来实现负载均衡,在DNS服务器中,可以为多个不同的地址配置同一个名字,而最终查询这个名字的客户机将在解析这个名字时 得到其中一个地址。因此,对于同一个名字,不同的客户机会得到不同的地址,他们也就访问不同地址上的Web服务器,从而达到负载均衡的目的。
  • 反向代理负载均衡 (如Apache+JK2+Tomcat这种组合)
    使用代理服务器可以将请求转发给内部的Web服务器,让代理服务器将请求均匀地转发给多台内部Web服务器之一上,从而达到负载均衡的目的。这种代理方式 与普通的代理方式有所不同,标准代理方式是客户使用代理访问多个外部Web服务器,而这种代理方式是多个客户使用它访问内部Web服务器,因此也被称为反 向代理模式。
  • 基于NAT(Network Address Translation)的负载均衡技术 (如Linux Virtual Server,简称LVS)
    网络地址转换为在内部地址和外部地址之间进行转换,以便具备内部地址的计算机能访问外部网络,而当外部网络中的计算机访问地址转换网关拥有的某一外部地址 时,地址转换网关能将其转发到一个映射的内部地址上。因此如果地址转换网关能将每个连接均匀转换为不同的内部服务器地址,此后外部网络中的计算机就各自与 自己转换得到的地址上服务器进行通信,从而达到负载分担的目的。

接[集群搭建]中的知识理解

为什么使用Apache+JK2实现Tomcat集群

  客户系统一般采用Apache httpd作为web服务器,即作为Tomcat的前端处理器,根据具体情况而定,有些情况下是不需要Apache httpd作为 web 服务器的,如系统展现没有静态页面那就不需要Apache httpd,那时可以直接使用Tomcat作为web 服务器来使用。使用Apache httpd主要是它在处理静态页面方面的能力比Tomcat强多了。

什么是mod_jk

  百度词条解释:mod_jk简称JK,是Apache服务器的一个可插入模块,用以为Apache或IIS服务器提供处理JSP/Servlet的能力。
  Apache作为一款强大的Web服务器,本身缺乏处理JSP/Servlet的功能,为了能够处理对JSP/Servlet的请求,必须使用JSP/Servlet容器,如Tomcat等。Tomcat本身也可以作为Web服务器使用,但是其功能远不及Apache强大,所以Tomcat往往作为JSP/Servlet容器使用。mod_jk实质上是Apache与Tomcat的连接器,并藉此附带提供集群和负载均衡的功能。

Apache与Tomcat三种连接方式

  • JK
    这是最常见的方式,你可以在网上找到很多关于配置JK的网页,当然最全的还是其官方所提供的文档。JK本身有两个版本分别是1和2,而版本2不是最新版,是一个分支,早已经废弃了,以后不再有新版本的推出了,所以建议你采用版本1。
    JK是通过AJP协议与Tomcat服务器进行通讯的,Tomcat默认的AJPConnector的端口是8009。JK本身提供了一个监控以及管理的页面jkstatus,通过jkstatus可以监控JK目前的工作状态以及对到tomcat的连接进行设置。
    AJP(ApacheJServProtocol)是定向包(面向包)协议。采用二进制形式代替文本形式,以提高性能。WEB服务器通过TCP连接SERVLET容器。WebServer一般维持和WebContainer的多个TCPConnecions,即TCP连接池,多个request/respons循环重用同一个Connection。但是当Connection被分配(Assigned)到某个请求时,该请求完成之前,其他请求不得使用该连接。
  • http_proxy
    这是利用Apache自带的mod_proxy模块使用代理技术来连接Tomcat。在配置之前请确保是否使用的是2.2.x版本的Apache服务器。因为2.2.x版本对这个模块进行了重写,大大的增强了其功能和稳定性。http_proxy模式是基于HTTP协议的代理,因此它要求Tomcat必须提供HTTP服务,也就是说必须启用Tomcat的HTTP Connector。
  • ajp_proxy
    ajp_proxy连接方式也是由mod_proxy模块所提供的功能。连接的是Tomcat的AJP Connector所在的端口。

三者比较
相对于JK的连接方式,http_proxy和ajp_proxy在配置上是比较简单的,灵活性方面也一点都不逊色。但就稳定性而言就不像JK这样久经考验,因此,如果是应用于关键的互联网网站,还是建议采用JK的连接方式。

Tomcat中 sever.xml 元素的理解

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<Server port=”8005” shutdown=”SHUTDOWN”>  
...
<Service name=”Catalina”>
<Connector port=”8080” protocol=”HTTP/1.1”
maxThreads=”150” connectionTimeout=”20000”
redirectPort=”8443” />
<Connector port=”8009” protocol=”AJP/1.3” redirectPort=”8443” />
<Engine name=”Catalina” defaultHost=”localhost”>
<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>

  顶层元素为<server>,这个元素对应着Tomcat结构中的server部分。这一行的意思是让Tomcat在8005端口监听关闭消息,如果使用telnet连接8005端口并输入SHUTDOWN,则tomcat就会关闭。为了安全,tomcat不会接受远程通过这个端口发的消息。
  Service component包括一组Connector一个Engine,这些Connector监听不同端口不同协议的请求,并且这些Connector是并发执行的,Engine则被用来处理这些请求。
  一组ConnectorHTTP/1.1AJP/1.3
  一个Engine就是一个容器,servlet容器。一个Engine可以处理多个虚拟Host(apache中的概念)的请求。当Engine不知该将请求交给那个host时,Engine则将请求转给defaultHost来处理。
  <Cluster>如果你要配置tomcat集群,则需要使用此节点.

1
2
3
4
5
6
7
8
9
10
<!-- 
Cluster(集群,族) 节点,如果你要配置tomcat集群,则需要使用此节点.
className 表示tomcat集群时,之间相互传递信息使用那个类来实现信息之间的传递.
channelSendOptions可以设置为2、4、8、10,每个数字代表一种方式
2 = Channel.SEND_OPTIONS_USE_ACK(确认发送)
4 = Channel.SEND_OPTIONS_SYNCHRONIZED_ACK(同步发送)
8 = Channel.SEND_OPTIONS_ASYNCHRONOUS(异步发送)
在异步模式下,可以通过加上确认发送(Acknowledge)来提高可靠性,此时channelSendOptions设为10
-->
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster" channelSendOptions="8">

web.xml 中增加的<distributable/>

  distributable 元素为空标签,他的存在与否可以指定站台是否可分布式处理,如果 web.xml 中出现这个元素,则代表站台在开发时已经被设计能在多个JSP Container 之间分散执行。

文章目录
  1. 集群理解
    1. 前言
    2. 名词理解
    3. 集群系统主要解决的几个问题
    4. 总结
  2. 常用负载均衡技术
  3. 接[集群搭建]中的知识理解
    1. 为什么使用Apache+JK2实现Tomcat集群
    2. 什么是mod_jk
    3. Apache与Tomcat三种连接方式
    4. Tomcat中 sever.xml 元素的理解
    5. web.xml 中增加的<distributable/>
您是第 位小伙伴 | 本站总访问量

苏ICP备19010368号 | 载入天数...载入时分秒...