基于MQ的GeoServer集群搭建(负载均衡,Session共享,JMS消息同步)

2023-05-16

GeoServer 集群化部署方案

目前部署了三个节点,节点信息如下:

内网IP用户名密码
172.16.131.210rootxxxxx
172.16.131.209rootxxxxx
172.16.131.211rootxxxxx

总体设计

总体技术是通过Nginx去做负载均衡,通过Redis和Tomcat实现session共享,通过MQ实现各个实例的同步

部署结构图

在这里插入图片描述

官网部署介绍

在这里插入图片描述

部署包版本信息

软件版本是否强依赖部署方式
Redislatestdocker
ActiveMQlatestdocker
Tomcatapache-tomcat-9.0.52直接部署(需要调整jar)
GeoServergeoserver-2.19.x-latest-war直接部署(需要调整jar)

1. docker 部署 redis

  • 拉取镜像 docker pull redis
  • 运行redis容器,并设置密码(不设置密码小心被攻击,这里没有将-v的外挂信息配置出来) docker run -p 6379:6379 --name gs-redis --requirepass “xxxxxxx”
  • 客户端连接测试连通性

2. 安装ActiveMQ

  • 拉取镜像 docker pull activemq
  • 运行activemq容器
    docker run --name=‘activemq’
    -itd
    -p 8161:8161
    -p 61616:61616
    -e ACTIVEMQ_ADMIN_LOGIN=admin
    -e ACTIVEMQ_ADMIN_PASSWORD=123456
    –restart=always
    -v /usr/soft/activemq:/data/activemq
    -v /usr/soft/activemq/log:/var/log/activemq
    webcenter/activemq:latest

3. 安装JDK(不做赘述)

4. 部署tomcat

GeoServer 部署
  • Geoserver jms jar包准备
    下载地址 https://build.geoserver.org/geoserver/
    下载 geoserver-2.19.x-latest-war.zip,geoserver-2.19-SNAPSHOT-jms-cluster-plugin.zip
  • 解压zip将war拷贝到tomcat webapps目录下
    unzip geoserver-2.19.x-latest-war.zip -d ./ 解压命名
  • 启动tomcat
    ./cataline.sh start
  • 停止tomcat
    ./cataline.sh stop
  • 将geoserver-2.19-SNAPSHOT-jms-cluster-plugin.zip 解压之后的jar拷贝到webapps/geoserver/WEB-INF/lib下面
  • 重启tomcat
    ./cataline.sh start
  • 停止tomcat
    ./cataline.sh stop
  • 进去到geoserver/data/cluster路径下,配置cluster.properties
    配置情况如下:
toggleSlave=true
topicName=VirtualTopic.geoserver
connection=enabled
brokerURL=tcp\://172.16.131.211\:61616
durable=true
xbeanURL=./broker.xml
toggleMaster=true
embeddedBroker=disabled
CLUSTER_CONFIG_DIR=/root/app/tomcat/apache-tomcat-9.0.52/webapps/geoserver/data/cluster/002
embeddedBrokerProperties=embedded-broker.properties
connection.retry=10
readOnly=disabled
instanceName=681a53e8-8d39-434f-ac0e-2156cc0a0f11
group=geoserver-cluster
connection.maxwait=500
  • 解释
    • connection 打开连接
    • brokerURL MQ 地址(上面docker启动的activeMQ地址)
    • embeddedBroker 关闭内嵌启动MQ,(网上的所有博客错误的地方,基本上没人解释为啥)

tomcat Redis Session

  • Tomcat Redis session共享jar准备
    链接: https://pan.baidu.com/s/16uh2aS_jR4QVj-mtBionTA
    提取码: d66b
    共四个jar
  • 将jar包里面的commons-pool2-2.7.0.jar/slf4j-api-1.6.4.jar替换成和GeoServer里面版本的jar,不然导致GeoServer启动不了,此处解决冲突问题
  • 将里面的4个jar包导到t每个tomcat的lib目录下。
  • 修改redis-data-cache.properties文件,根据自己redis信息进行修改,修改完成将其放到每个tomcat的conf文件夹下.
  • 在修改每个tomcat下conf文件夹下的context.xml文件
<Valve className="tomcat.request.session.redis.SessionHandlerValve" />
<Manager className="tomcat.request.session.redis.SessionManager"/>

部署Nginx

  • 拉起nginx镜像 docker pull nginx
  • 启动nginx docker run --rm -d -p 80:80 --name geoserver-nginx -v /app/nginx/www:/usr/share/nginx/html -v /app/nginx/conf/nginx.conf:/etc/nginx/nginx.conf -v /app/nginx/conf.d:/etc/nginx/conf.d -v /app/nginx/logs:/var/log/nginx nginx
  • 配置geoserver.conf
 upstream mygeoserver {
         ip_hash;
        server 172.16.131.210:8080;
        server 172.16.131.209:8080;
        server 172.16.131.211:8080;

}

server {
    listen       80;
    server_name  39.107.101.131;
    location /geoserver/ {
            proxy_pass http://mygeoserver/geoserver/;
            proxy_set_header  Host $host:$server_port;
    }
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   html;
    }
}

可以不配置ip_hash,因为统一做了session共享拦截

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

基于MQ的GeoServer集群搭建(负载均衡,Session共享,JMS消息同步) 的相关文章

  • 在会话 cookie 中存储大量数据会产生什么影响?

    谁能解释一下在会话中存储大量数据的缺点或给我指出一些阅读材料 我也很感兴趣在会话中存储数据和从数据文件读取数据之间是否有任何区别 如果您在会话中存储大量数据 则输入 输出性能会下降 因为会有大量读取 写入 默认情况下 PHP 中的会话存储在
  • session_regenerate_id 没有创建新的会话 id

    我有一个脚本 旨在完成当前会话并开始新的会话 我使用了一段代码 它在我的开发计算机上运行良好 但是 当我将其发布到生产服务器时 会话 ID 始终保持不变 以下是我重新启动会话的代码 session start SESSION array P
  • 如何将使用消息侦听器接收到的 JMS 消息转换为域对象

    我在用 春季3 1 1 ActiveMQ 5 6 0 我有两个 JMS 应用程序 应用程序 A 使用 JmsTemplate 使用 jmsTemplate convertAndSend msg 发送域对象 App B 使用消息监听器并注册了
  • Tomcat:Java 静态变量作用域、应用程序范围还是会话范围?

    java 静态变量是否在使用相同 web 应用程序的所有会话之间共享 或者每个会话都有自己的静态变量版本吗 换句话说 Tomcat 是为每个会话创建一组新的类 还是为整个 Web 应用程序创建一组新的类 Tomcat 创建一个ClassLo
  • WebSphere MQ v7.1 安全用户凭证

    运行 WebSphere MQ Server v7 1 的 Linux Server Box 我在 Linux 中创建了一个属于 mq users 组的用户 mq user 然后我创建了一个队列管理器QM TEST 并使用 MQSC 发出以
  • JMS 中的 MessageListener 和 Consumer 有什么区别?

    我是新来的JMS 据我了解Consumers能够从队列 主题中挑选消息 那么为什么你需要一个MessageListener因为Consumers会知道他们什么时候收到消息吗 这样的实际用途是什么MessageListener 编辑 来自Me
  • activemq 的优先级

    我们目前正在使用 JMS 和 activemq 5 5 1 开发一个应用程序 我们想为某些消息定义更高的优先级 这将使它们首先被消耗 设置生产者和消费者后 通过spring 3 1 JMSTemplate 优先级并不能完全发挥作用 事实上
  • Java和Android之间的交互

    我目前正在尝试研究如何将 Android 与现有的基于 java 的系统一起使用 基本上 我需要与 Android 应用程序进行通信 该系统当前使用 ActiveMQ 作为 JMS 提供程序在计算机之间传递对象数据 其中一台计算机上有一个显
  • Php 会话标头已经发送错误[重复]

    这个问题在这里已经有答案了 可能的重复 php 标头已发送错误 https stackoverflow com questions 3319207 php headers already sent error 我已附上我的代码 该代码用于
  • PHP session_destroy() 警告会话对象销毁失败[重复]

    这个问题在这里已经有答案了 我有这个 php 脚本 但在破坏会话时遇到问题 我收到这个警告 警告 session destroy 会话对象销毁失败 第 6 行 C xampp htdocs template nota finalizare
  • IBM Websphere MQ - 用于 Tomcat 部署的 EJB 和 MDB 迁移

    我已经为此苦苦挣扎了很长一段时间 我有一个 IBM Websphere MQ 它使用 EJB 和 MDB 以下是配置ejb mdb的地方
  • PHP7.1上读取会话数据失败

    分享一个我遇到的问题 现已解决 在我的开发机器上 我使用 PHP 运行 IIS 我升级到 PHP7 突然我的代码不再工作 返回此错误 session start 读取会话数据失败 用户 路径 C WINDOWS temp 看起来像是权限问题
  • Rails 中的会话、子域和 authlogic 问题

    我有一个带有 authlogic 身份验证的 Rails 应用程序和一个使用 subdomain fu 构建的 username domain com 结构 但是当从domain com转到username domain com时 我的会话
  • Firebase 3.0 会话持久性

    在 firebase 3 0 中使用会话持久性似乎是不可能的 这在以前的版本中是可能的 https www firebase com docs web guide login password html https www firebase
  • Tomcat 7 - 在哪里设置“系统属性”?

    自从升级到 Tomcat 7 以来 我的 Web 应用程序出现了问题 我的会话将继续null在我登录并尝试执行任何操作 提交请求 后 我读到设置以下内容可能会有所帮助 org apache tomcat util http ServerCo
  • 如何访问 Jinja2 模板(应用程序引擎上的 Bottle 框架)中的会话数据?

    我正在运行微框架Bottle http bottle paws de page docs在谷歌应用程序引擎上 我在用着Jinja2 http jinja pocoo org 2 对于我的模板 我正在使用Beaker http pypi py
  • Session_set_save_handler 未设置

    我在设置 session set save handler 时遇到问题 我将 php ini 配置为 session handler user 这个简单的测试失败了 Define custom session handler if sess
  • 即使浏览器关闭,如何保持 PHP 会话处于活动状态?

    即使用户不小心关闭了浏览器 如何才能保持用户的会话处于活动状态 例如 Facebook 如果您登录他们的网站并关闭选项卡或浏览器 当您再次打开浏览器并访问 Facebook 时 他们会自动检测活动用户 并且不会将您重定向到登录页面 我怎么做
  • 当请求来自网络服务器而不是网络浏览器时,HTTPSession 的创建如何工作?

    我有一个非常基本的问题 HTTPSession 的创建是如何工作的 我知道你们会因为我把这个问题视为类似的问题而解雇我 存在问题 但是我问这个问题是有原因的 我知道 httpsession 是 Web 浏览器所独有的 当我们第一次执行 Ht
  • ASP.Net 使用状态服务器和缓存增加 MaxProcesses(网络花园)

    我在 IIS7 上有一个 ASP Net 网站 我计划增加 MaxProcesses 以匹配服务器上的核心数量 4 核心 64 位 Windows Server 2008 根据我的阅读 如果我增加 MaxProcesses 来创建一个网络花

随机推荐