集群的使用与搭建

发送反馈


集群是指将 SuperMap iServer 服务注册到集群服务器中,并提供单一客户视图的服务。当有服务请求到达集群服务器时,集群服务器采用集群技术统一对 SuperMap iServer 服务进行调配,用户并不需要知道具体提供服务的 GIS 服务器。使用集群可以使 SuperMap iServer 提供的 GIS 服务在高并发、高性能等方面有很大提升。

SuperMap iServer 的分布式切图模块作为集群技术的典型应用,实现了地图的分布式切图、分布式存储管理等功能。

集群的相关配置,除了如本页介绍的在服务管理器中配置外,还可以通过配置文件进行配置,详细可参考利用配置文件管理集群

集群体系简介

集群体系中包含以下角色,不同的角色通过各自不同的操作来构建整个集群体系:

图1 集群概览

上述角色可以概括一下,具体到某台机器。比如对于本机来说,我可以是:

集群子节点加入集群后,会每隔2秒向父节点报告一次,集群父节点收到报告后,认为该子节点是可用的子节点,且该子节点会出现在集群服务器的“集群成员列表”中。当客户端或 GIS 应用服务器向集群服务器(父节点)发送请求时,集群服务器会基于负载均衡原则将任务分配给各个集群成员(子节点),如下图所示。集群成员响应请求并将响应的结果返回给集群服务器,集群服务器再将收到的响应结果返回给发送请求的客户端或 GIS 应用服务器。例如客户端浏览地图时,收到的地图切片可能来自不同的集群成员,而不是仅来自客户端请求的集群服务器。在以下情况集群服务器会判定集群成员超时,不会给该成员分配任务或将已分配的请求任务转发给其他节点处理:

其中,连接超时和响应超时的时间设置都可以通过配置文件来设置,详见利用配置文件管理集群

关于集群体系内部通信机制的详细介绍,请参考集群体系通信机制

图2 集群通信机制

使用集群

GIS 应用服务器是为客户端直接提供 GIS 服务的服务端,通过使用集群可以提升 GIS 服务的性能和负载量,集群系统将以本机 GIS 应用服务器为出口向客户端提供高性能的服务。

GIS 应用服务器使用集群的方式有以下两种:

 

图3-1 使用本地集群服务

图3-2 使用其他集群服务

GIS 应用服务器使用集群的操作方法为:

访问 GIS 应用服务器的使用集群页面(http://gisserver:8090/iserver/manager/clusterusage),在“使用集群”选项卡中勾选“是否使用集群”复选框,选择使用本机或其它集群服务,分别对应图3-1和图3-2。如果选择了使用其它的集群服务,则需要添加集群服务地址和安全 Token(集群服务器开启安全时必选)。最后,保存变更即可。

GIS 应用服务器只有选择了“使用集群”才能通过集群系统中的服务器响应客户端请求,从而提升 GIS 服务的性能。

图4 使用集群

高级选项中用于添加集群过滤器,集群过滤器的实现请参见:实现集群过滤器,集群过滤器用于自定义负载均衡时,请求分发的逻辑。

配置集群

多个 GIS 服务器可以通过搭建集群,提高性能。默认情况下,SuperMap iServer 的 GIS 服务器均开启集群功能,随时可以接受子节点加入。如图3-1所示,标识2直接加入标识1的集群服务,就形成了一个简单的集群。值得说明的是,标识1支持多个 GIS 服务器的加入,同时标识1还可以加入别的集群(此时,就构成了多层集群)。

安全控制

集群父节点(如标识1所示)即集群服务器,其主要职责是监听和协调子节点执行相关任务,可以对整个集群系统进行安全控制,可以查看集群成员(子节点)并决定是否允许其加入集群。集群父节点可以“开启”安全控制,来控制子节点的加入。

如果父节点开启了安全控制:

  1. 非本机的子节点(相对于父节点不在同一 IP)在加入集群时,必须经过父节点“允许”才能加入集群;
  2. 如果父节点同时设置了 Token,非本机的子节点加入集群时就必须输入正确的 Token。

访问集群父节点的配置集群页面(http://clusterserver:8090/iserver/manager/clusterMembers),在安全控制中点击“受控加入”的开启按钮,可以设置安全 Token。开启安全控制后,在集群成员列表中,点击子节点对应的“允许”按钮,可以允许子节点加入集群,点击“禁止”按钮可以禁止子节点加入。

图5 配置集群

集群服务实例列表

在配置集群页面点击“查看集群主节点服务实例列表”可以获取当前集群体系中的服务实例列表,以及每一服务实例可以由哪些子节点提供。

集群成员列表

在配置集群页面可以查看集群成员列表,包括“普通成员列表”和“受控成员列表”。受控成员是指以受控的方式加入集群的子节点,参考受控集群

对于普通集群成员,点击“查看服务详情”可以看到在当前集群体系中当前子节点所提供的服务实例。如果已经开启安全控制,则需要执行“允许”操作让子节点完成加入集群。

集群转发配置

为提升集群系统请求转发的效率,iServer默认采用异步转发的方式来处理请求。您无须修改任何配置,即可在集群系统中实现请求的异步转发。

如果您需要通过自定义配置进一步提升集群系统请求转发的效率,您可以手动修改集群主节点系统配置文件(iserver-system.xml)的配置项,具体为:<clustering>中的<clusterRequestClientSetting>子项。

详细配置说明请参考:利用配置文件管理集群集群转发参数设置

加入集群

如标识2所示的服务器即为集群子节点,加入集群的方式为:

访问子节点的加入集群页面(http://clusterchild:8090/iserver/manager/clusterReporter),点击“添加报告器”,然后在“添加报告器”对话框中填入集群服务地址、安全 token(集群服务器开启安全时必选),勾选“报告器是否启用”的复选框。点击“确定”按钮完成 GIS 服务器向父节点的注册。(单机多进程集群的情况下,子节点向父节点的注册不受任何安全限制。)

图6 加入集群

报告器:用于将集群子节点(标识2所示)提供的 GIS 服务报告给集群服务器(父节点,标识1所示),以供集群服务器调用。“集群服务地址”即集群父节点的报告器地址,如集群服务器 clusterservice1的集群服务地址为 http://clusterservice1:8090/iserver/services/cluster,即 clusterservice1的报告器地址。支持添加多个报告器,使本机的 GIS 服务能被多个集群服务器使用。

受控集群

SuperMap iServer 支持子节点以受控的方式加入集群。这种集群配置方式简单快速,适合于子节点空闲的情况,子节点本身不需要对外提供服务而可以接受父节点的控制。子节点一旦开启了受控集群,就要受到父节点的完全控制,其自身原有的服务实例和服务管理器都将被禁用,父节点的服务实例和数据将同步到子节点。其中,服务组件集合对应的服务实例、空间处理服务将被过滤不同步到子节点。

子节点作为受控模式的集群成员,仅用于处理父节点转发的请求。

如上图所示,在一个集群体系中,可以同时存在受控的子节点(标识2)和非受控子节点(标识3)。子节点以受控方式加入集群的配置方法为:

<controllable>

      <address>http://clusterservice:8090/iserver/services/cluster</address>  

      <enabled>true</enabled>

      <isTileWorker>true</isTileWorker>     

      <token>-71 90 -24 -17 -115 80 -56 -17</token>

</controllable>

子节点开启受控集群后,父节点会自动将服务和相应的数据同步到子节点上,这样子节点就具有与父节点相同的服务,父节点就能把客户端请求转发给子节点处理。

搭建集群时的注意事项

  1. 如果集群包含的 GIS 服务器未使用 SuperMap iServer 产品包中带的 SuperMap iObjects Java,而是独立的 SuperMap Object Java,当使用地图服务进行出图时,可能会出现图片错位的情况。解决这一问题,需要进行如下设置:打开【SuperMap iObjects Java 安装目录】\Bin\SuperMap.xml 文件,把 CustomMapRatioEnable 参数设为 true,即:<CustomMapRatioEnable>true</CustomMapRatioEnable>。
  2. SuperMap iServer 是以 Servlet 的形式部署在 Servlet 容器中的,如果作为集群子节点的 SuperMap iServer 被迁移到另外一个端口不同的 Servlet 容器下时,需要手工更改 iserver-system.xml 配置文件(参见:iServer 配置文件说明)中<host>节点的 port 属性为新端口号(否则,就需要访问一次该集群子节点的服务,才能使该集群子节点被识别)
  3. 配置单机集群时,需要保证父节点、各个子节点分布使用不同的端口。以 SuperMap iServer 在 windows 平台的 ZIP 产品包为例,两个产品包之间配置集群时,需要保证不同产品包中的 Tomcat 使用不同的端口。修改 zip 包中 Tomcat 的端口号方法为修改%SuperMap iServer_HOME%/conf/server.xml 中的相关端口,如:<Server port="8016" ……>、<Connector port="8091" …… redirectPort="8454" ……>。

配置单机集群

单机集群的配置方法分为以下两种:

使用多个 iServer 产品包配置单机集群

以 SuperMap iServer 在 windows 平台的 ZIP 产品包为例,两个产品包之间配置集群时,需要保证不同产品包中的 Tomcat 使用不同的端口。修改 zip 包中 Tomcat 的端口号方法为修改%SuperMap iServer_HOME%/conf/server.xml 中的相关端口,如:<Server port="8016" ……>、<Connector port="8091" …… redirectPort="8454" ……>。

只要保证多个产品包的端口不同,就能分别启动服务,然后通过查看配置集群页面来搭建一个集群体系。

此方法可以用于其他中间件下的单机集群配置。

使用单个 iServer 产品包配置单机集群

SuperMap iServer 在 Tomcat 下支持指定配置目录启动,因此只需要设置不同的配置文件就可以使用单个 iServer 产品包配置单机集群。

具体使用方法为:

  1. 准备配置文件
  1. 启动服务

在 Tomcat 中,windows 环境下可使用如下命令来同时定制 Tomcat 的 server.xml 和 SuperMap iServer 的配置文件:

启动服务:

set JAVA_OPTS=%JAVA_OPTS% -Diserver.config="D:/WEB-INF1"

startup.bat -config="D:/server1.xml"

停止服务:

shutdown.bat -config="D:/server1.xml"