GeoServer 集群化部署方案
目前部署了三个节点,节点信息如下:
内网IP | 用户名 | 密码 |
---|---|---|
172.16.131.210 | root | xxxxx |
172.16.131.209 | root | xxxxx |
172.16.131.211 | root | xxxxx |
总体设计
总体技术是通过Nginx去做负载均衡,通过Redis和Tomcat实现session共享,通过MQ实现各个实例的同步
部署结构图
官网部署介绍
部署包版本信息
软件 | 版本 | 是否强依赖 | 部署方式 |
---|---|---|---|
Redis | latest | 否 | docker |
ActiveMQ | latest | 否 | docker |
Tomcat | apache-tomcat-9.0.52 | 是 | 直接部署(需要调整jar) |
GeoServer | geoserver-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