目前公司需要搭建geoserver集群集成jms和jdbcstore的插件,实现数据保存在数据库,同时通过jms来同步集群的缓存数据
部署activeMQ
基本信息
####
包括注解包括你需要备注的信息
标签: 用于部署pod 服务,用于设置部署在指定标签节点 在高级设置里面可以设置
副本数即类似于克隆了多个镜像服务,他们的配置都是一样的
分层级类似于归类的作业,突出显示和归纳
配置容器
这部分主要是要注意要注意如果服务是需要暴露端口的必须要配置,否则服务启动会有问题,暴露的端口不是直接给外部访问,是节点的容器组IP的暴露出来的可以用于容器内部的通信
容器的镜像通常就是 dockerhub官方提供的,亦或者是内网的镜像仓库harbor部署的,
命令参数目前使用的少,看介绍可以替代dockerfile中 cmd部分执行的命令
环境变量即添加容器内部的环境变量,包括很多敏感的secret和key ,需要运行时使用便可以放在上面
资源请求/限制: 即对容器调用host的资源进行限制,不挤占其他服务的资源
挂载存储
这里主要是注意一点 挂载数据卷到容器中,倘若容器中的配置文件在挂载卷不存在,但是配置挂载会替换容器中的文件导致pod启动失败
还有配置路径也是需要注意
上面的路径的容器内的绝对路径
下面的子路径是相对路径但是相对的是 挂载的卷的的根节点 类似于 /var/lib/kubelet/pods/8c7ba28d-59bd-4ad3-a592-4212ad540939/volumes/kubernetes.io~glusterfs/pvc-02a2b3a6-bd84-4687-8c37-67eb0b4a1ed1
如果配置的是文件
那么下面挂载卷内的文件会替换上面容器绝对路径的文件
服务/应用路由
需要主要的要主要在服务定义 如果是暴露在集群内部那么选择clusterip只会容器上可以使用 通过集群的内部 IP 暴露服务,选择该值时服务只能够在集群内部访问。 这也是默认的 ServiceType。
如果选择nodePort那么则是需要在集群对外暴露端口通常都是五位数的端口,通过集群每个节点的端口监听和dns解析,
headless是没有任何配置 ** Service 并不会分配 Cluster IP,kube-proxy 不会处理它们, 而且平台也不会为它们进行负载均衡和路由。 DNS 如何实现自动配置,依赖于 Service 是否定义了选择算符**
tips
如果保存后pod启动有问题报
不挂载卷,可以直接启动,但是挂载就一直报
Back-off restarting failed container 这种一般都是容器启动的时有问题导致的运行失败,需要看日志,体现出来就是容器启动后没有一种运行的进程导致 被回收
优化目标
- 使用jdbcstore插件后大比例不 不显示空白
- 结果jdbcstore和jms插件的冲突
- 高版本(19)geoserver集群的部署
使用jdbcstore插件后大比例不 不显示空白
现象
在使用jdbcstore插件来实现数据的数据库保存,但是在预览图层时会出现放大到一定程度层级后空白 的情况
解决方法
在查询源码后知道新版的geoserver优化的SQL查询逻辑调用了
老版的geoserver实际执行的SQL
1 | -- 对比可以知道 在勾选Support on the fly geometry simplification 后 没有使用ST_Simplify 这个函数在 |
新版的geoserver实际执行的SQL
1 | -- 对比可以确定 新版本勾选 Support on the fly geometry simplification后 区别在于选用ST_AsTWKB作为简化内容导致的数据缺失 |
debug方法调用
org.geoserver.wms.GetMap#executeInternal
org.geotools.renderer.lite.StreamingRenderer#drawPlain
org.geotools.data.store.ContentFeatureSource#getReader(org.geotools.data.Query)
org.geoserver.wms.GetMapOutputFormat#produceMap
org.geoserver.wms.map.RenderedImageMapOutputFormat#produceMap(org.geoserver.wms.WMSMapContent, boolean)
renderer.paint(
org.geotools.data.postgis.PostGISDialect#encodeGeometryColumnSimplified
最后修改gt-jdbc-postgis jar下面的 org.geotools.data.postgis.PostGISDialect#isAggregatedSortSupported 然后重新打包替换
1 | static final Version V_1_5_0 = new Version("1.5.0"); |
保证无论碰到什么版本的geoserver使用老的方法
解决jdbcstore和jms插件的冲突
现象
启动失败会报MultipleBeansException org.geoserver.config.GeoServerLoader
解决方法
查询知道在 jms-cluster 下面有个 org.geoserver.config.ReadOnlyGeoServerLoader 继承了org.geoserver.config.DefaultGeoServerLoader
同时gs-jdbcconfig 下面 org.geoserver.jdbcconfig.JDBCGeoServerLoader也继承DefaultGeoServerLoader
导致冲突在org.geoserver.config.GeoServerLoaderProxy#lookupGeoServerLoader 会判断GeoServerLoader的类,如果是两个就报错
目前是默认使用JDBCGeoServerLoader 代码如下
1 | protected GeoServerLoader lookupGeoServerLoader(ApplicationContext appContext) { |
高版本(19)geoserver集群的部署
现象
集群挂载在同一个盘上面,修改一个jmx的配置,其他节点也跟着修改
解决方法
针对不同节点创建各自的配置文件,在挂载的时候配置映射文件