当前位置:   article > 正文

geoserver集群部署

geoserver集群部署

环境准备

系统准备

操作系统IPjdk服务版本角色
CentOS710.139.164.112jdk1.8nfs
CentOS710.139.164.102jdk1.8geoser2.20slave
CentOS710.139.164.101jdk1.8geoser2.20master

挂载nfs

安装nfs客户端

两个机器都挂载
[root@geo2 ~]# yum -y install nfs-utils
上次元数据过期检查:0:19:28 前,执行于 2023年08月10日 星期四 09时11分02秒。
软件包 nfs-utils-1:2.5.1-5.ky10.x86_64 已安装。
依赖关系解决。
无需任何处理。
完毕!
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

挂载到相同目录

创建挂载目录
[root@geo1 ~]# mkdir /opt/nfs_data
将NFS挂载到此目录
[root@geo1 ~]# mount -o rw,nosuid,fg,hard,intr 10.139.164.112:/opt/basedata/nfs_data /opt/nfs_data
将挂载添加到配置文件
[root@geo1 ~]# vim /etc/fstab 
10.139.164.112:/opt/basedata/nfs_data /opt/nfs_data              nfs     defaults       0 0
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

软件准备

  • jdk1.8
  • geoserver 2.20

插件准备

插件下载地址:https://build.geoserver.org/geoserver/2.20.x/community-2022-09-01/ 根据版本选择下载

  • geoserver-2.20-SNAPSHOT-activeMQ-broker-plugin.zip
  • geoserver-2.20-SNAPSHOT-jms-cluster-plugin.zip

配置jdk

 [root@localhost local]# tar -zxvf jdk-8u151-linux-x64.tar.gz 
[root@localhost local]#mv jdk1.8.0_151 jdk
[root@localhost local]#cat >>/etc/profile<< EOF
JAVA_HOME=/usr/local/jdk
export PATH=\$JAVA_HOME/bin:\$PATH
EOF
 [root@localhost local]#source /etc/profile
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

安装tomcat

tar -zxvf apache-tomcat-9.0.56.tar.gz
mv apache-tomcat-9.0.56 tomcat
  • 1
  • 2

部署geoserver

上传geoserver的war包到tomcat的webapps目录。然后启动tomcat.war包会自动解压

在这里插入图片描述

配置geoserver数据存储目录

  • 在每个geoserver的WEB-INF/web.xml中添加这段:

          <context-param>
         <param-name>GEOSERVER_DATA_DIR</param-name>
         <param-value>/opt/nfs_data/geoserver_data/data</param-value>
      </context-param>
    
       <context-param>
          <param-name>GEOWEBCACHE_CACHE_DIR</param-name>
          <param-value>/opt/nfs_data/geoserver_data/geowebcache</param-value>
       </context-param>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

在这里插入图片描述

  • 创建数据目录及缓存目录

      mkdir -p /opt/nfs_data/geoserver_data/data
      mkdir -p /opt/nfs_data/geoserver_data/geowebcache
    
    • 1
    • 2

geoserver配置jms

解压jms的zip包
将解压后的所有.jar包复制到tomcat中webapps/geoserver/WEB-INF/lib目录下
重启tomcat,等待geoserver启动成功
  • 1
  • 2
  • 3

访问ip:8080/geoserver

在这里插入图片描述
默认的账号密码为 admin geoserver
各节点都需要完成上述操作

安装mq插件

将geoserver-2.18-SNAPSHOT-activeMQ-broker-plugin.zip解压
将其中的war包上传到主节点的tomcat中
启动tomcat后自动解压,将/usr/local/tomcat/apache-tomcat-9.0.37/webapps/activemqBroker-2.18-SNAPSHOT/WEB-INF/classes目录下的  standalone-broker.properties和applicationContext.xml删除
重启tomcat
以上操作在一个tomcat中完成即可
  • 1
  • 2
  • 3
  • 4
  • 5

修改tomcat 启动文件

修改tomcat bin目录下启动文件catalina.sh,指定数据文件位置,所有geoserve节点都要执行
找到下面的这段代码

JAVA_OPTS=“$JAVA_OPTS $JSSE_OPTS"
  • 1

修改为:

JAVA_OPTS="$JAVA_OPTS $JSSE_OPTS -DCLUSTER_CONFIG_DIR=/opt/nfs_data/geoserver_data/cluster/clusterConfig1"
其中的/clusterConfig1文件需要进行区分,如我这里master为/clusterConfig1另外一个节点就是/clusterConfig2
  • 1
  • 2

在这里插入图片描述

geoserver配置jms

解压jms的zip包
将解压后的所有.jar包复制到tomcat中webapps/geoserver/WEB-INF/lib目录下
重启tomcat,等待geoserver启动成功
启动成功后会在上述脚本设置的目录中生产对应的集群配置文件
在/opt/nfs_data/geoserver_data/cluster/clusterConfig1目录下生成cluster目录
其中包含以两个文件cluster.properties、embedded-broker.properties
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

新建broker.xml放入cluster文件内容如下(三个节点均要新建,内容相同)

在/opt/nfs_data/geoserver_data/cluster/clusterConfig1(此目录为上面脚本中指定的目录)目录下新建broker.xml文件内容如下(三个节点均要新建,内容相同)

vim broker.xml
  • 1

复制下面内容到文件中,无须修改

<?xml version="1.0" encoding="UTF-8"?>
<!--DOCTYPE beans PUBLIC "-//ACTIVEMQ//DTD//EN" "http://activemq.org/dtd/activemq.dtd" -->

<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
xmlns:jms="http://www.springframework.org/schema/jms" xmlns:amq="http://activemq.apache.org/schema/core"
xmlns:task="http://www.springframework.org/schema/task"
xsi:schemaLocation="http://www.springframework.org/schema/beans
                       http://www.springframework.org/schema/beans/spring-beans.xsd
                       http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-3.0.xsd
                       http://www.springframework.org/schema/context
                       http://www.springframework.org/schema/context/spring-context.xsd
                       http://www.springframework.org/schema/jms
                       http://www.springframework.org/schema/jms/spring-jms.xsd
                       http://activemq.apache.org/schema/core
                       http://activemq.apache.org/schema/core/activemq-core.xsd">

<!-- Allows us to use system properties as variables in this configuration 
    file -->
<bean id="activemq.propertyPlaceholderConfigurer"
    class="org.geoserver.cluster.impl.utils.JMSPropertyPlaceholderConfigurer">
    <property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE" />
    <property name="searchSystemEnvironment" value="true" />
    <property name="ignoreUnresolvablePlaceholders" value="false" />
    <property name="ignoreResourceNotFound" value="true" />
    <constructor-arg index="0" type="Resource">
        <value>embedded-broker.properties</value>
    </constructor-arg>
    <constructor-arg index="1" type="JMSConfiguration"
        ref="JMSConfiguration" />

</bean>

<broker id="broker" persistent="${activemq.broker.persistent}"
    useJmx="${activemq.jmx.useJmx}" xmlns="http://activemq.apache.org/schema/core"
    dataDirectory="${activemq.base}" tmpDataDirectory="${activemq.base}/tmp"
    startAsync="false" start="false" brokerName="${instanceName}">

    <!-- The managementContext is used to configure how ActiveMQ is exposed 
        in JMX. By default, ActiveMQ uses the MBean server that is started by the 
        JVM. For more information, see: http://activemq.apache.org/jmx.html -->
    <managementContext>
        <managementContext createConnector="${activemq.jmx.createConnector}"
            connectorPort="${activemq.jmx.port}" connectorHost="${activemq.jmx.host}" />
    </managementContext>

    <!--destinationInterceptors>
        <virtualDestinationInterceptor>
            <virtualDestinations>
                <virtualTopic name=">" prefix="Consumer.*.VirtualTopic."
                    selectorAware="false" />
            </virtualDestinations>
        </virtualDestinationInterceptor>
    </destinationInterceptors-->

    <!-- Configure message persistence for the broker. The default persistence 
        mechanism is the KahaDB store (identified by the kahaDB tag). For more information, 
        see: http://activemq.apache.org/persistence.html -->
    <amq:persistenceAdapter>

        <kahaDB directory="${activemq.base}/kahadb"
            lockKeepAlivePeriod="0" />

        <!-- <jdbcPersistenceAdapter dataDirectory="activemq-data" dataSource="#postgres-ds" 
            lockKeepAlivePeriod="0" /> -->
    </amq:persistenceAdapter>


    <!-- The systemUsage controls the maximum amount of space the broker will 
        use before slowing down producers. For more information, see: http://activemq.apache.org/producer-flow-control.html -->
    <systemUsage>
        <systemUsage>
            <memoryUsage>
                <memoryUsage limit="${activemq.broker.systemUsage.memoryUsage}" />
            </memoryUsage>
            <storeUsage>
                <storeUsage limit="${activemq.broker.systemUsage.storeUsage}" />
            </storeUsage>
            <tempUsage>
                <tempUsage limit="${activemq.broker.systemUsage.tempUsage}" />
            </tempUsage>
        </systemUsage>
    </systemUsage>

    <!-- The transport connectors expose ActiveMQ over a given protocol to 
        clients and other brokers. For more information, see: http://activemq.apache.org/configuring-transports.html -->
    <transportConnectors>
        <transportConnector name="openwire"
            uri="${activemq.transportConnectors.server.uri}" discoveryUri="${activemq.transportConnectors.server.discoveryURI}" />
    </transportConnectors>
    <networkConnectors xmlns="http://activemq.apache.org/schema/core">
        <networkConnector
            uri="${activemq.transportConnectors.server.discoveryURI}" />
    </networkConnectors>

    <!-- destroy the spring context on shutdown to stop jetty -->
    <shutdownHooks>
        <bean xmlns="http://www.springframework.org/schema/beans" class="org.apache.activemq.hooks.SpringContextHook" />
    </shutdownHooks>

</broker>

<!-- This xbean configuration file supports all the standard spring xml 
    configuration options -->

<!-- <bean id="postgres-ds" class="org.postgresql.ds.PGPoolingDataSource"> -->
<!-- <property name="serverName" value="localhost" /> -->
<!-- <property name="databaseName" value="activemq" /> -->
<!-- <property name="portNumber" value="5432" /> -->
<!-- <property name="user" value="postgres" /> -->
<!-- <property name="password" value="postgres" /> -->
<!-- <property name="dataSourceName" value="postgres" /> -->
<!-- <property name="initialConnections" value="1" /> -->
<!-- <property name="maxConnections" value="30" /> -->
<!-- </bean> -->

<!-- Oracle DataSource Sample Setup -->
<!-- <bean id="oracle-ds" class="org.apache.commons.dbcp.BasicDataSource" 
    destroy-method="close"> <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"/> 
    <property name="url" value="jdbc:oracle:thin:@localhost:1521:AMQDB"/> <property 
    name="username" value="scott"/> <property name="password" value="tiger"/> 
    <property name="poolPreparedStatements" value="true"/> </bean> -->

</beans>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116
  • 117
  • 118
  • 119
  • 120
  • 121
  • 122
  • 123
  • 124

集群配置

集群中只有一个节点是主节点,在这个节点新增数据,别的节点会根据activeMQ进行同步

修改各节点以下文件(文件路径为geoserver 数据目录下cluster目录中)

  • cluster.properties
  • embedded-broker.properties

修改embedded-broker.properties 修改下面行

activemq.jmx.host=      #本机ip
activemq.transportConnectors.server.uri=ip:端口
  • 1
  • 2

在这里插入图片描述

修改cluster.properties配置文件 只改brokerURL,其他参数默认

	#Thu Aug 10 10:53:05 CST 2023
toggleSlave=true
topicName=VirtualTopic.geoserver
connection=disabled
brokerURL=tcp\://10.139.164.101\:61616
durable=true
xbeanURL=./broker.xml
toggleMaster=true
embeddedBroker=enabled
CLUSTER_CONFIG_DIR=/opt/nfs_data/geoserver_data/cluster/clusterConfig2
embeddedBrokerProperties=embedded-broker.properties
connection.retry=10
instanceName=1a8bf8ee-f364-4e38-8812-4c8a9665449f
readOnly=disabled
group=geoserver-cluster
connection.maxwait=500
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

在这里插入图片描述
所有节点都要配置上述配置文件,配置文件基本相同。
重新启动各节点tomcat
访问geoserver 登录后可以看到cluster信息
在这里插入图片描述
此时有个问题,由于geoserver的配置是放在内存中的,所以修改配置信息时,无法进行同步
需要手动在从节点操作重读配置

测试数据同步

  • 主节点创建工作空间
    在这里插入图片描述
    在这里插入图片描述
    从节点查看数据是否同步成功
    在这里插入图片描述
    同步成功,如果遇到数据未能同步的,需要在服务器状态页面手动重新加载配置文件

在这里插入图片描述

配置tomcat 允许跨域

在tomcat安装目录里 找到conf文件夹。编辑web.xml,在大约4729行添加下面内容

  <filter>
    <filter-name>CorsFilter</filter-name>
    <filter-class>org.apache.catalina.filters.CorsFilter</filter-class>
    <init-param>
      <param-name>cors.allowed.origins</param-name>
      <param-value>*</param-value>
    </init-param>
  </filter>
  <filter-mapping>
    <filter-name>CorsFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

在这里插入图片描述

配置nginx代理

upstream backend {
    ip_hash;
    server ip:8080;
    server ip:8080;
    }


server {
        listen       9090;
        server_name  localhost;

        #charset koi8-r;
        client_max_body_size 1024m;
        #access_log  logs/host.access.log  main;
  location ^~ /geoserver/ {
        add_header Access-Control-Allow-Origin *;
        add_header Access-Control-Allow-Headers X-Requested-With;
        add_header Access-Control-Allow-Methods GET,POST,OPTIONS;
        # 解决504错误,单位:秒
        proxy_send_timeout 900s;
        proxy_read_timeout 900s;
        send_timeout 900s;
        proxy_set_header Host $http_host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_redirect http:// $scheme://;
        proxy_pass http://backend/geoserver/;
        index  index.html index.htm index.jsp;
 }

}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/人工智能uu/article/detail/758094
推荐阅读
相关标签
  

闽ICP备14008679号