基于JMS的集群

介绍

基于数据目录共享和配置重新加载的不同组合,有几种方法可以使用geoserver实现集群部署。基于JMS的集群模块体系结构如下图所示:

Geoserver的图形化集群解决方案

此模块实现了一种健壮的主/副本方法,该方法利用面向消息的中间件(MOM),其中:

  • 主服务器接受对内部配置的更改,将其保存在自己的数据目录中,但也通过MOM将它们转发给副本

  • 复制副本不应用于从REST或用户界面更改其配置,因为它们被配置为注入主服务器通过MOM分发的配置更改

  • MOM用于使主服务器和副本以持久的方式交换消息

  • 每个副本都有自己的数据目录,它负责保持与主副本的数据目录保持一致。如果一个副本再次上升时出现故障,他可能会收到一堆JMS消息,以使其配置与主副本的配置一致。

  • 一个节点可以同时是主节点和副本节点,这意味着我们没有单一的故障点,即主节点本身

在主目录中,只允许一个主副本接收来自主副本的更改,其中每个副本都是通过一个主副本接收更改的。这样的消息传输GeoServer配置对象,这些对象由副本直接注入到它们自己的内存配置中,然后保存在其数据目录的磁盘上,完全不需要为每次配置更改重新加载配置。

为了使事情简单化,在默认配置中,MOM实际上嵌入并运行在每个地理服务器中,使用多播查找其对等端,从而允许在不需要单独部署MOM的情况下进行集群安装。

描述

GeoServer主/副本集成使用JMS、Spring和MOM(面向消息的中间件)实现,特别是ActiveMQ。图中的模式表示主/副本平台的完整高级设计。它由3个不同的角色组成:

  1. GeoServer主服务器

  2. GeoServer副本

  3. 妈妈(ActiveMQ)

基于MOM的集群的组件图说明

这种结构允许:

  1. 队列故障转移组件(使用MOM)。

  2. 副本关闭是使用持久主题自动处理的(它将存储消息,以便在消息可用时,如果其中一个副本关闭,则会发生重新同步更改)

  3. 主服务器关闭不会影响任何副本同步过程。

这一全面部署包括:

  • 作为纯主GeoServer,此实例只能向主题发送事件。它不能充当复制品

  • 一组可以同时作为主服务器和副本使用的地理服务器。这些实例可以向主题发送和接收消息。它们可以作为主服务器(向其他订阅服务器发送消息)以及副本(这些实例也是主题的订阅服务器)。

  • 一组纯副本GeoServer实例,它们只能接收来自主题的消息。

  • 一组MOM代理,以便为每个地理服务器实例配置一组可用代理(故障转移)。每个代理使用共享数据库作为持久性。如果代理由于某种原因失败,那么仍然可以从共享数据库中写入和读取消息。

所有生成的代码都是基于springjms的,以确保不同MOM之间的可移植性,但是如果您查看模式,我们还利用ActiveMQ VirtualTopics来获得动态路由(您可以动态地附加主节点和副本)。

virtualTopics功能还有其他优势,请参见:http://activemq.apache.org/virtual-destinations.html

如上所述,在默认配置中,MOM运行在geoserver内部,简化了拓扑结构和设置工作。

安装

要将jms集群模块安装到现有GeoServer中,请参阅 安装JMS集群模块 第页

如何配置地理服务器实例

GeoServer的配置非常简单,可以使用提供的GUI或修改 cluster.properties 存储在 GEOSERVER_DATA_DIRcluster 文件夹(例如。 ${{GEOSERVER_DATA_DIR}}/cluster

要覆盖此配置文件的默认目标,必须设置 CLUSTER_CONFIG_DIR 变量定义的目标文件夹 cluster.properties 文件。这是 强制性的 如果要共享同一个GEOSERVER_DATA_DIR,但如果要为每个GEOSERVER提供自己的数据目录,则不需要。

如果是共享数据目录,则需要向运行地理服务器的每个JVM添加不同的系统变量,例如:

  • -DCLUSTER_CONFIG_DIR=/var/geoserver/clusterConfig/1 到运行第一个节点的JVM

  • -DCLUSTER_CONFIG_DIR=/var/geoserver/clusterConfig/2 到运行第二个节点的JVM

  • 等等。

如果目录丢失,GeoServer将创建它们并提供一个初始的 cluster.properties 合理违约。

实例名称

instance.name用于区分消息来自哪个geoserver实例,因此每个geoserver实例应使用不同的唯一(对于单个集群)名称。

代理URL

这个经纪人.url字段用于指示内部JMS机器在何处发布消息(主要GeoServer安装)或从何处使用消息(replicate GeoServer安装)。有许多选项可用于配置GeoServer实例和JMS代理之间的连接,有关完整列表,请检查http://activemq.apache.org/configuring-transports.html。在(推荐的)故障转移设置到位时,可以使用多个代理URL。看到了吗http://activemq.apache.org/failover-transport-reference.html有关如何配置的详细信息。注意:在目标代理被正确激活并可访问之前,GeoServer不会完成启动阶段。

限制和未来扩展

数据

没有数据通过JMS通道发送我们已经实施的集群解决方案是专门用于管理GeoServer内部配置的,没有数据在主服务器和副本之间传输。为此,使用外部机制(参考。 [地理服务器休息] ). 原则上,这本身不是限制,因为通常在集群环境中,数据存储在数据目录之外的共享位置。在我们的解决方案中,这是一个要求,因为每个副本都有自己的私有数据目录。

要避免的事情

  • 从不在主服务器上重新加载GEOSERVER目录 :每个主实例不应调用目录重新加载,因为这会将所有资源、样式等的创建传播到所有连接的副本。

  • 不要使用纯复制副本更改配置 :这将使特定副本的配置与其他副本不同步。

参考资料:

参考文献:

[JMS规范] Sun Microsystems-Java消息服务-版本1.1 2002年4月12日

[JMS] 斯奈德·博萨纳·戴维斯——动作中的ActiveMQ——曼宁

[GeoServer] http://docs.geoserver.org/

[地理服务器休息] http://docs.geoserver.org/latest/en/user/rest/index.html#rest

[活动MQ] http://activemq.apache.org/