geoserver的分布式部署采用基于JMS的集群部署,由geoserver(Master)、geroserver(Slave)、The MOM(消息相关中间件ActiveMQ)组成。ActiveMQ通过gs-jms-geoserver工程与geoserver集成在一起,省去了ActiveMQ的部署和配置。
在gs-web-app工程的pom.xml文件中增加community下的jms-cluster(gs-jms-commons、gs-jms-geoserver)模块依赖后,在geoserver主页上即可看到Cluster的相关菜单(Cluster Configuration),用于分布式部署配置:
配置页面中的brokerURL用于设定代理Url,可采用默认设置(VM+实例名称),当设置为failover(tcp://localhost:61616,tcp://localhost:61617)时,启动该进程时会卡死,设置为tcp://localhost:61616或者tcp://localhost:61617可行。activemq.transportConnectors.server.uri用于设定broker的侦听端口
多台服务器部署geoserver实例用于集群部署时,相互之间进行网络连接时,会通过主机名进行tcp连接,如tcp://GIS:61616,会报错WARN [network.DiscoveryNetworkConnector] - Could not start network bridge between: vm://instance9090?async=false&network=true and: tcp://GIS:61616 due to: java.net.UnknownHostException: GIS,需在/etc/hosts文件中增加GIS的主机IP标识。
多台机器上部署时,配置transportConnectors.server.uri时不能使用localhost,应将tcp://localhost:61616改为tcp://192.168.15.11:61616(别的机器在远程连接时会直接连接tcp://localhost:61616,因而报错),报错内容如下:
ERROR [multicast.MulticastDiscoveryAgent] - Failed to advertise our service: default.ActiveMQ-4.alive.%localhost%tcp://192.168.15.97:61617
java.io.IOException: Operation not permitted (sendto failed)
at java.net.PlainDatagramSocketImpl.send(Native Method)
at java.net.DatagramSocket.send(DatagramSocket.java:693)
at org.apache.activemq.transport.discovery.multicast.MulticastDiscoveryAgent.doAdvertizeSelf(MulticastDiscoveryAgent.java:419)
at org.apache.activemq.transport.discovery.multicast.MulticastDiscoveryAgent.doTimeKeepingServices(MulticastDiscoveryAgent.java:403)
at org.apache.activemq.transport.discovery.multicast.MulticastDiscoveryAgent.run(MulticastDiscoveryAgent.java:365)
at java.lang.Thread.run(Thread.java:745)
applicationContext.xml文件中的部分属性可在GeoServerApplication.properties中指定。如: