❤️geoserver集群部署❤️(geoserver、jms集群部署 + redis、tomcat实现session + nginx负载均衡)

2023-05-16

由于条件原因,我是在同一台服务器上利用了三个tomcat配置geoserver集群(多台服务器配置基本上差不多)【为了后面好区分将三个tomcat分别命名为tomcat-geo1,tomcat-geo2,tomcat-geo3】。

一、准备工作

1、分别修改三个tomcat的server.xml,将其端口修改为:8083,8084,8085。

2、设置tomcat允许跨域

每一个tomcat安装目录下 conf > web.xml中添加如下这段:

<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>

3、下载geoserver版本及依赖

geoserver-2.19.1-war

geoserver-2.19-SNAPSHOT-activeMQ-broker-plugin

geoserver-2.19-SNAPSHOT-jms-cluster-plugin

下载地址:https://build.geoserver.org/geoserver

在这里插入图片描述
在这里插入图片描述

二、部署geoserver

1、将geoserver-2.19.1-war分别放入三个tomcat的webapps下。

2、启动三个tomcat ,分别访问测试下,IP:端口/geoserver,进入如下页面则表示成功:

在这里插入图片描述
3、数据同步

虽然现在三个geoserver服务都可以使用了,但是它们的数据并没有同步,为了避免geoserver服务过多的问题,

所以设置一个统一存放数据的位置,最好的方式是将该目录设置到一台NFS文件服务器上,但此处因为我们只有

一台机器,我们就创建一个统一的数据目录,命名为GEOSERVER_DATA_DIR。

所以此处需要对每个geoserver的数据目录重新指定一下,为了方便,我将缓存也都存放在同一目录中。

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

<!-- 数据目录 -->
<context-param>
	<param-name>GEOSERVER_DATA_DIR</param-name>
	<param-value>/DataDisk/geoserver/geoserver_data_dir</param-value>
</context-param>

 <!-- 缓存目录 -->
<context-param>
	<param-name>GEOWEBCACHE_CACHE_DIR</param-name>
	<param-value>/DataDisk/geoserver/geowebcache</param-value>
</context-param>

然后重启geoserver服务。

4、解压geoserver-2.19-SNAPSHOT-jms-cluster-plugin,然后将其中的jar全部复制到geoserver的WEB-INF/lib目录下。

5、将geoserver-2.19-SNAPSHOT-activeMQ-broker-plugin.war放入tomcat-geo1的webapps目录中,删除其中的

activemqBroker-2.16-SNAPSHOT\WEB-INF\classes目录下standalone-broker.properties和

applicationContext.xml。(经过多次测试发现这两个文件有无都无所谓)

6、配置geoserver的cluster,这里由于前面我设置了统一数据目录,所以三个geoserver生成的cluster文件夹也在

该目录下。打开cluster文件夹,里面应该有三个clusterConfig文件夹,各自放着cluster.properties和embedded-

broker.properties文件。

①、在clusterConfig文件夹中新建broker.xml文件,内容如下(直接复制即可,无需修改):

broker.xml

<?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>

②、修改embedded-broker.properties

在这里插入图片描述
③、修改cluster.properties

在这里插入图片描述
注意:如果有多个geoserver服务,但统一目录中的cluster文件夹下总的只有一个cluster.perties文件,解决方

法:找到每个tomcat下bin目录中的catalina.sh(linux下)或者catalina.bat(windows下)文件,再在文件中找到

JAVA_OPTS="$JAVA_OPTS $JSSE_OPTS"这话,在它的后面添加"JAVA_OPTS=%JAVA_OPTS% -D

CLUSTER_CONFIG_DIR=/DataDisk/geoserver/geoserver_data_dir/cluster/clusterConfig文件夹名"。然后重启

tomcat就有多个cluster.perties文件了。

在这里插入图片描述
7、重启全部geoserver服务,查看配置是否生效以及数据是否同步,如果每个geoserver的cluster Setting都如下

图,则说明配置成功。

在这里插入图片描述

8.验证

在任意一个geoserver上创建一个workspace,其他geoserver服务也同步。

8083
8084

三、session共享配置

1、下载tomcat9,nginx,redis的session共享包

链接: https://pan.baidu.com/s/16uh2aS_jR4QVj-mtBionTA

提取码: d66b

2、将里面的4个jar包导到t每个omcat的lib目录下。

3、修改redis-data-cache.properties文件,根据自己redis信息进行修改,修改完成将其放到每个tomcat的conf文件夹下。

4、在修改每个tomcat下conf文件夹下的context.xml文件

<Valve className="tomcat.request.session.redis.SessionHandlerValve" />
<Manager className="tomcat.request.session.redis.SessionManager"/>

在这里插入图片描述
5、重启各tomcat,在redis中查看结果,验证其session是否共享。

四、nginx负载均衡配置

修改nginx.conf配置

http节点中添加如下配置

upstream mygeoserver {
    server localhost:8083 max_fails=3 fail_timeout=30s;	
    server localhost:8084 max_fails=3 fail_timeout=30s;
    server localhost:8085 max_fails=3 fail_timeout=30s;
}

配置location(这里因为需求问题所以配置有点复杂)

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://mygeoserver/geoserver/;
    index  index.html index.htm index.jsp;
}

在浏览器地址栏中输入:IP+nginx中server端口+/geoserver即可访问。

参考地址:
https://docs.geoserver.geo-solutions.it/edu/en/clustering/index.html
https://docs.geoserver.geo-solutions.it/edu/en/clustering/clustering/active/installation.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

❤️geoserver集群部署❤️(geoserver、jms集群部署 + redis、tomcat实现session + nginx负载均衡) 的相关文章

  • 会话过期后如何重定向到登录页面?

    我有三个 JSF 2 0 Web 模块 当会话过期时我需要重定向到登录页面 我已经尝试过使用HttpSessionListener 它正在调用sessionDestroyed 事件方法 但我无法在那里转发 重定向请求 我认为这是因为没有Ht
  • ant install 部署 Tomcat webapp 因权限问题失败

    我一直在关注非常好的Tomcat6应用程序开发人员指南 http tomcat apache org tomcat 6 0 doc appdev index html 我已经抓住了他们的build xml其中包含名为的方便的 Ant 任务i
  • redis - 使用哈希

    我正在使用 redis 为我的 Web 应用程序实现社交流和通知系统 我是 redis 的新手 我对哈希值及其效率有一些疑问 我读过这篇很棒的文章Instagram 帖子 http instagram engineering tumblr
  • org.apache.tomcat.jdbc.pool.DataSource 不再位于 tomcat 7 dbcp jar 中?

    我正在尝试使用 tomcat dbcp jar 版本 7 0 30 为 tomcat dbcp 创建一个 spring 管理的独立池 然而 Tomcat的文档中提到的似乎是org apache tomcat jdbc DataSource类
  • 当我们第一次部署 WAR 文件时,某些代码可以运行吗?

    是否有任何方法或 API 可以使用 以便每当我部署新的 WAR 文件时 部分代码都应该执行 或者当 Tomcat 启动时 相应的 servlet 应该连续启动或运行一些代码 恢复一个老问题 因为唯一的答案没有显示任何例子 为了在部署 取消部
  • 从 exe/as 服务运行 tomcat 时出现 NoClassDefFoundError: org/apache/catalina/startup/Bootstrap

    我已经通过startup bat运行Tomcat 6 0 37服务器相当长一段时间了 现在我想将tomcat作为一项服务运行 在机器启动时自动启动 我使用bat创建了服务 service bat install 这成功地创建了服务 当尝试启
  • StackExchange.Redis的正确使用方法

    这个想法是使用更少的连接和更好的性能 连接会随时过期吗 对于另一个问题 redis GetDatabase 打开新连接 private static ConnectionMultiplexer redis private static ID
  • Eclipse 与 IntelliJ 热部署

    我的应用程序配置 Tomcat 8 Spring Spring MVC Hibernate 在 Eclipse 中 我创建了 Tomcat 服务器 并将我的应用程序添加到资源中 JSP JS CSS 和 JAVA 类热部署的工作原理就是这样
  • 如何在应用程序中创建会话对象

    在我的应用程序中 我想创建一个用于登录和注销的会话 我不知道如何使用会话 任何人都可以通过提供一些示例来帮助我 我认为会话对象应该是在应用程序开始运行时声明和初始化的静态对象 我遇到了这个问题 并决定将我的会话对象放入 utils 类中 该
  • Tomcat - 将旧上下文根重定向到新上下文根

    我们想要更改 Tomcat Web 应用程序的上下文根 并让旧的 URL 引导用户访问新命名的应用程序 http hostname oldappname http hostname newappname 实现此目的的一种方法是部署具有 ne
  • 由于 http 响应 405,无法执行 mvn tomcat:deploy

    我正在将 Tomcat 7 作为 Windows 服务运行 我想在我的项目根目录中进行 mvn tomcat 部署 但总是出现这个错误 你能帮我解决这个问题吗 INFO Deploying war to http localhost 808
  • REST - 复杂的应用程序

    我正在努力将 RESTful 原则应用到我正在开发的新 Web 应用程序中 特别是 为了实现 RESTful 每个 HTTP 请求本身都应该携带足够的信息 以便其接收者对其进行处理 从而与 HTTP 的无状态性质完全一致 该应用程序允许用户
  • Facebook-API 中的会话密钥和访问令牌

    有人可以向我解释一下什么是会话密钥和访问令牌吗 怎样才能抓住那两个人呢 为什么以及何时需要使用它们 什么时候是 一次性 什么时候不是 另外 他们之间有什么区别 请用Java 来做 我是一位刚接触 facebook API 的 Java 开发
  • 跨多个域的 ASP.NET 会话

    是否有合适的 NET 解决方案来在多个域上提供持久服务器会话 即 如果该网站的用户在 www site1 com 下登录 他们也将在 www site2 com 下登录 安全是我们正在开发的程序的一个问题 Thanks 它是否需要在会话中
  • Scala 使用的 Redis 客户端库建议

    我正在计划使用 Scala 中的 Redis 实例进行一些工作 并正在寻找有关使用哪些客户端库的建议 理想情况下 如果存在一个好的库 我希望有一个为 Scala 而不是 Java 设计的库 但如果现在这是更好的方法 那么仅使用 Java 客
  • 如何在geoserver中使用WPS进程生成MBtiles?

    如何在geoserver中生成mbtile 使用 openlayers 显示 geoserver 层 例如像这样调用wms层 new OpenLayers Layer WMS Kanpur http localhost 8080 geose
  • 显式删除会话cookie会产生什么影响?

    我使用 php session 来维护用户的会话 Session 在登录后创建 在注销或超时后销毁 我需要管理面板中的一个选项来强制注销任何用户 如果他在网站上处于活动状态 我怎样才能做到这一点 我正在考虑删除临时会话文件 这应该有效地破坏
  • 通过 AJP 将 REMOTE_USER 转发到 tomcat(例如用于 shibboleth)

    今天我刚刚遇到了以下问题 1 我将apache配置为基本身份验证 需要有效用户 这有效 2 我进一步配置 apache 将某些路径 在我的例子中为 idp 的请求转发到 tomcat servlet shibboleth IDP 结果是 s
  • Spring Boot,Websockets无法从Session获取用户(即java.security.Principal)

    与 一起工作Spring Boot 1 2 1 RELEASE and Spring Websockets 运行嵌入式时存在部署运行时问题Jetty 9 我不能伪造用户 java security Principal 当应用程序部署在本地主
  • MySQL 概念:会话与连接

    我对 MySQL 的概念有点困惑 会话与连接 当谈论连接到 MySQL 时 我们使用连接术语 连接池等 然而在 MySQL 在线文档中 http dev mysql com doc refman 4 1 en server system v

随机推荐

  • Linux下执行可执行文件提示:No such file or directory的解决方法

    最近在Linux下安装交叉编译链工具 xff0c 解压完成后执行却提示 xff1a No such file or directory 查了一下发现我是64位的Ubuntu系统但是执行的是32位程序 xff0c 缺少32位lib库所以无法执
  • C语言typeof详解

    typeof 是 GNU C 标准里特有的扩展 xff0c 标准的 ISO C 并没有这个关键字 xff0c 所以在编译的时候不能加任何 ISO 的 C 标准选项 xff0c 否则会报错 使用时加入 std 61 gnu90 即 GNU 的
  • S5PV210-uboot解析(二)-start.S解析

    start S解析 首先是头文件包含 include lt config h gt include lt version h gt if defined CONFIG ENABLE MMU include lt asm proc domai
  • MPV播放器快捷键

    MPV播放器快捷键 Location of user defined bindings config mpv input conf Lines starting with are comments Use SHARP to assign t
  • u-boot学习总结

    1 移植前准备 Ubuntu 配置ssh tftp nfs 烧写uboot前格式化SD卡 1 Unsupported SD reader 2 dev sdb is NOT identified Vmware出问题在控制面板 gt 程序和功能
  • setjmp和longjmp

    setjmp 和 longjmp 在C标准库 lt setjmp h gt 中 setjmp jmp buf j 必须首先被调用 它表示 使用变量 j 记录现在的位置 函数返回 0 longjmp jmp buf j int i 可以接着被
  • GNU C typeof

    typeof 是 GNU C 标准里特有的扩展 xff0c 标准的 ISO C 并没有这个关键字 xff0c 所以在编译的时候不能加任何 ISO 的 C 标准选项 xff0c 否则会报错 使用时加入 std 61 gnu90 即 GNU 的
  • linux内核常用宏container_of

    linux内核常用宏 container of 定义如下 xff1a linux 2 6 38 8 include linux kernel h container of cast a member of a structure out t
  • 【c语言】对结构体数组按照某项规则进行排序

    这是基于qsort 函数进行的简单排序 xff08 附带其他类型的数组使用qsort 进行的排序 xff09 目录 一 qsort 函数 二 compare 函数 1 结构体数组 1 xff09 升序实现 2 xff09 降序实现 2 整型
  • iOS TextFiled、TextView 关于键盘的收起以及处理键盘遮挡

    在iOS开发中 xff0c UITextFiled和UITextView是很常见的两个控件 xff0c 当我们设置好这两个控件后 xff0c 点击文字输入区域 xff0c 系统会自动弹出键盘 xff0c 但是如何收起键盘 点击哪里收起键盘
  • 【2023最新版】超详细Kali安装保姆级教程,Kali Linux环境配置和使用指南,看完这一篇就够了

    Kali 安装教程 第一步 xff1a 新建一台Debian虚拟机 1 xff09 选择客户机操作系统 2 xff09 设置虚拟机名称 存储位置 3 xff09 设置处理器 1颗1核心 设置内存2048MB 设置网络类型NAT 4 xff0
  • Mac Time Machine恢复系统 Time Machine还原系统教程

    Mac下的 Time Machine是一个OS X自带的非常强大的功能 xff0c 之前PC6小编有教大家如何设置 Time Machine的备份盘 xff0c 当我们的Mac系统崩溃时 xff0c 可以使用Time Machine来恢复系
  • selenium常用API介绍

    selenium常用API介绍 文本的清空与提交 br span class token punctuation span find element by id span class token punctuation span span
  • Beego打包部署到Linux

    Beego打包部署到Linux 打包 打开Terminal 定位到工程的 main go 文件夹目录 使用命令 bee pack be GOOS 61 linux 进行打包 打包成Windows 命令 bee pack be GOOS 61
  • MPV快捷键

    mpv keybindings Location of user defined bindings config mpv input conf Lines starting with are comments Use SHARP to as
  • RedHat 服务器离线安装不匹配软件引起的故障及修复

    转自 xff1a 学习日记 https www learndiary com 2022 02 redhat wrong installed package 这里简述一起在 RedHat 6 5 服务器上错误强制离线安装 CentOS 7 x
  • rancher rke环境清理

    如果删除容器失败情况下 xff0c 可以先停止docker再进行清除 bin bash 杀死所有正在运行的容器 docker kill docker ps a q 删除所有容器 docker rm f docker ps qa 删除所有容器
  • 硬盘安装Debian7(Wheezy)以及初级配置

    引子 xff1a 记得本科二年级的时候开始在Redhat Enterprise 5 下折腾嵌入式 xff0c 然后在开源社区的影响下迷恋fedora和它的激进气质 然后的然后 xff0c 逐渐觉得数学和算法才是王道 xff0c 准备在一个机
  • CMake 的常用命令

    目录 0 CMake常用的命令或函数 xff1a 1 定义项目 project 2 多个目录 add subdirectory 3 常用命令 add executable add library 4 常用命令 改变最终目标文件输出位置 5
  • ❤️geoserver集群部署❤️(geoserver、jms集群部署 + redis、tomcat实现session + nginx负载均衡)

    由于条件原因 xff0c 我是在同一台服务器上利用了三个tomcat配置geoserver集群 xff08 多台服务器配置基本上差不多 xff09 为了后面好区分将三个tomcat分别命名为tomcat geo1 xff0c tomcat