基于JMS的集群¶
介绍¶
基于数据目录共享和配置重新加载的不同组合,有几种方法可以使用geoserver实现集群部署。基于JMS的集群模块体系结构如下图所示:
此模块实现了一种健壮的主/副本方法,该方法利用面向消息的中间件(MOM),其中:
主服务器接受对内部配置的更改,将其保存在自己的数据目录中,但也通过MOM将它们转发给副本
复制副本不应用于从REST或用户界面更改其配置,因为它们被配置为注入主服务器通过MOM分发的配置更改
MOM用于使主服务器和副本以持久的方式交换消息
每个副本都有自己的数据目录,它负责保持与主副本的数据目录保持一致。如果一个副本再次上升时出现故障,他可能会收到一堆JMS消息,以使其配置与主副本的配置一致。
一个节点可以同时是主节点和副本节点,这意味着我们没有单一的故障点,即主节点本身
在主目录中,只允许一个主副本接收来自主副本的更改,其中每个副本都是通过一个主副本接收更改的。这样的消息传输GeoServer配置对象,这些对象由副本直接注入到它们自己的内存配置中,然后保存在其数据目录的磁盘上,完全不需要为每次配置更改重新加载配置。
为了使事情简单化,在默认配置中,MOM实际上嵌入并运行在每个地理服务器中,使用多播查找其对等端,从而允许在不需要单独部署MOM的情况下进行集群安装。
描述¶
GeoServer主/副本集成使用JMS、Spring和MOM(面向消息的中间件)实现,特别是ActiveMQ。图中的模式表示主/副本平台的完整高级设计。它由3个不同的角色组成:
GeoServer主服务器
GeoServer副本
妈妈(ActiveMQ)
这种结构允许:
队列故障转移组件(使用MOM)。
副本关闭是使用持久主题自动处理的(它将存储消息,以便在消息可用时,如果其中一个副本关闭,则会发生重新同步更改)
主服务器关闭不会影响任何副本同步过程。
这一全面部署包括:
作为纯主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_DIR 下 cluster 文件夹(例如。 ${{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/