目录

上一个主题

12.5. 设置代理

下一个主题

12.7. 总结


12.6. 避免服务故障

GeoServer是一个很棒的软件,核心开发人员每天都会遇到bug,增强现有功能,并提供新功能。 尽管如此,站点的配置也很谨慎,但是还会遇到GeoServer传递地图的故障问题。 在最简单的情况下,它只会影响一些特定的请求;更常见的情况是,它会暂停一段时间, 有时需要重新启动它才能使它再次工作。

几乎所有的软件应用程序都会遇到这种情况,无论是专有的还是开源的,免费的还是非常昂贵的。 避免故障是你无法控制的,但是你应该学会如何避免服务中断。

您需要高可用性或容错配置。实际上,这是软件部署中一种非常常见的方法, 您将在这里学到的是任何类型的软件服务的最佳实践,而不仅仅是地图服务。

那么,如何获得容错配置呢?这都是关于冗余,如果你不能避免故障,你还可以消除一个单一的故障点。 在容错配置中,单点故障是硬件和软件的一部分,如果它失败了,就没有备用的伙伴来成功地完成它的工作。

基本思想很简单,但很有效。如果两个地理服务器并行工作,它们可能不会同时中断。 因此,当您(甚至更好地说,是一个自动化过程)恢复损坏的实例时, 另一个GeoServer将继续处理用户的请求。从用户的角度来看,这是没有问题的; 他只能体验到响应时间的减慢。当然,这个模型不仅仅可以用GeoServer的两个实例来实现; 您可能有很多实例。这种模式不仅会使你的系统更加可靠,而且会大大提高你的网站的性能。

当然,只有两个地理服务器是不够的。首先,它们的配置需要同步;此外, 还需要一种在实例之间共享请求的方法。实际上, 您需要一个负载平衡器来跨服务器池分发请求负载。

image279

图 12.10 image279

上图显示了容错配置的所有组件。从右边开始,我们找到了两个用通常用于数据库的符号设计的存储库: 一个保存配置文件,另一个存储数据。如前几章所述,GeoServer的配置包含在一个文件夹中。 这个文件夹包含在war中;所以当您在Tomcat上部署它时,它包含在geoserver文件夹中。 您可以将它放在外部文件系统上,以便所有实例都可以访问它。

请注意,为避免访问争用出现单点故障和损坏, 您不能简单地在服务器上复制配置文件夹并让所有GeoServer指向该文件夹。 您需要将其复制到一个特殊的文件系统上,该文件系统应同时安装在多个服务器上。 这些文件系统称为“群集文件系统”。 当然,同样的问题也适用于不在

一个 RDBMS ,例如,shapefiles。有关详细信息,请查看 http://en.wikipedia.org/wiki/Clustered_file_system .

数据存储可以是RDBMS,例如PostGIS服务器,或者包含shapefile和地理参考图像的文件夹。

向左走,你会发现两个地理服务器。注意连接到数据和配置的线路。它们的样式不同, 只是为了使连接的项更清晰,但它们的功能是相同的。 每个GeoServer需要访问相同的配置存储和数据存储,以公开完全相同的层。

在地图服务器的左边有几个web服务器。您了解到它们充当GeoServer的代理, 在这里它们还可以平衡它们之间的负载。我们将在 操作时间–配置群集 现在您应该注意, 每个web服务器都连接到每个GeoServer。这样,如果其中一个失败, 另一个将把请求转发到地图服务器。

在web服务器前面有一个 路由器 . 从逻辑角度来看,它是一个平衡器, 将所有web服务器与一个IP地址相关联。它可以是硬件或软件组件; 请参见 http://en.wikipedia.org/wiki/Load_ 平衡(计算)用于讨论和实现列表。

最终我们找到了用户。他们不知道体系结构的复杂性;他们只是有一个入口点让map服务转发请求。 集群配置负责处理请求,将它们发送到GeoServer并返回响应。

有一个重要的事实要记住。WMS、WFS和WCS是无状态的。在客户端请求之间没有要维护的会话状态, 因此不需要在服务器之间同步会话数据。用户请求可以由server1填写,然后发送到server2。 请求的主体包含server2处理请求所需的所有信息。 这大大降低了复杂性,您可以通过实现负载平衡和冗余来对配置进行集群。

12.6.1. 操作时间–配置群集

在配置模式中,我们没有提到硬件。当然, 在单个物理服务器上部署所有组件时具有软件冗余不是一个好主意。 您可以将每个组件部署到单独的服务器上(在现代服务器场中,它们可能是虚拟的), 但基本思想是,您不应该在一台计算机上拥有组件的所有实例。

为了简单起见,为了节省您购买大量硬件的时间,我们将在以下部分使用一台Linux机器:

1.作为第一步,我们将从GeoServer web存档中重新定位配置文件夹。停止Tomcat服务:

~$sudo service tomcat stop

2.现在将文件夹移动到外部位置:

~$ sudo mv /opt/apache-tomcat-7.0.27/webapps/geoserver/data /opt/geoserver_config

3.现在你必须编辑 web.xml 使GeoServer知道新配置文件夹的文件:

~$ sudo vi /opt/apache-tomcat-7.0.27/webapps/geoserver/WEB-INF/ web.xml

4.找到以下注释代码片段:

<!--
<context-param>
<param-name>GEOSERVER_DATA_DIR</param-name>
<param-value>C:eclipseworkspacegeoserver_trunkcite\confCiteWFSPostGIS</param-value>
</context-param>
-->

5.删除第一行和最后一行以取消注释,并在 param-value 元素:

<context-param>
<param-name>GEOSERVER_DATA_DIR</param-name>
<param-value>/opt/geoserver_config</param-value>
</context-param>

6.保存文件,然后重新启动Tomcat服务:

~$sudo service tomcat

7.登录GeoServer并检查配置是否正确读取。现在我们需要第二个Tomcat实例。 再次停止Tomcat服务,并将其复制到新位置:

~$ sudo cp -r /opt/apache-tomcat-7.0.27 /opt/new_apachetomcat-7.0.27

8.有了两个不同的服务器,您就可以让Tomcat的配置保持原样,并且它可以完美地工作。 但是,当您在同一台计算机上启动它们时,它们会尝试绑定到同一个TCP端口(例如,8080用于HTTP协议), 其中一个会失败。打开 server.xml 带有编辑器的新Tomcat文件:

~$ sudo vi /opt/new_apache-tomcat-7.0.27/conf/server.xml

9.找到以下代码这是第一行未注释的代码,然后修改 服务器端口 到 8105 :

<Server port="8105" shutdown="SHUTDOWN">

10.现在查找配置HTTP连接器的代码部分。改变 连接器端口 到 8180 :

<Connector port="8180" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />

11.向下滚动,直到找到 AJP 连接器并将端口号修改为 8109

<Connector port="8109" protocol="AJP/1.3" redirectPort="8443" />

12.保存并关闭文件。在启动两个Tomcat服务器之前,我们需要为JVM添加两个参数, 否则集成的GWC将锁定 data 文件夹,只有一个地理服务器可以启动:

~$ sudo vi /etc/init.d/tomcat

13.就在线路设置之后 -server 参数,插入以下内容:

GWC="-DGWC_DISKQUOTA_DISABLED=true -DGWC_METASTORE_DISABLED=true"

14.添加 GWC 行设置中的变量 JAVA_OPTS

export JAVA_OPTS="-Djava.awt.headless=true $HEAP $NEW $RMIGC $PGC $PERM $DEBUG $DUMP $SERVER $GWC"

15.保存文件,然后打开新Tomcat服务器的启动脚本:

$ sudo vi /opt/new_apache-tomcat-7.0.27/bin/catalina.sh

16.在初始注释之后插入新行,并设置相同的参数:

JAVA_OPTS="-DGWC_DISKQUOTA_DISABLED=true -DGWC_METASTORE_DISABLED=true"

17.保存文件。

18.现在我们可以启动两个Tomcat服务器了。您可以使用服务命令实用程序启动旧的。 要启动新创建的启动脚本,请使用默认启动脚本:

~$ sudo /opt/new_apache-tomcat-7.0.27/bin/startup.sh

19.现在打开浏览器,指向http:// localhost / geoserver, 并转到http:// localhost:8180 / geoserver。 转到“图层预览”页面; 现在,您将看到与预期相同的图层列表。

20.现在我们需要为两个Tomcat服务器设置一个代理并添加一个平衡器。 这是由 apache httpd mod_proxy_balancer . 使用以下脚本启用它:

~$ sudo a2enmod proxy_balancer
~$sudo service apache2 restart

21.为了更改代理配置,必须编辑 httpd.conf 文件:

~$ sudo vi /etc/apache2/httpd.conf

22.我们需要修改 ProxyPass 指令。注释上一行中插入的行 操作时间–配置代理 节, 通过插入 # 行开头的字符。然后插入以下代码:

ProxyPass /geoserver balancer://geoserver
<Proxy balancer://geoserver>
    BalancerMember ajp://localhost:8009/geoserver
    BalancerMember ajp://localhost:8109/geoserver
    Order deny,allow
    Deny from all
    Allow from 127.0.0.1
</Proxy>

23.保存文件并重新启动Apache服务。现在打开浏览器并转到 http://localhost/geoserver . Apache将把您的请求转发到两个geoserver之一。

24.您可能想知道平衡器如何工作,如何平衡请求, 以及服务器故障时会发生什么。 Apache mod_proxy_balancer带有实用的界面来管理和监视平衡器。 您必须在httpd.conf文件中显式公开它:

~$ sudo vi /etc/apache2/httpd.conf

25.插入以下代码:

<Location /balancer-manager>
    SetHandler balancer-manager
    Order Deny,Allow
    Deny from all
        Allow from 127.0.0.1
</Location>

26.从浏览器中打开 http://localhost/balancer-manager

image280

图 12.11 image280

27.从web界面,您可以监视配置的每个节点的主要参数。状态将告诉您节点是否正在工作或是否已关闭。 在它旁边,您可以找到自服务启动以来每个节点处理的请求数。这个 方法 字段显示如何分发请求。 执行加权请求计数的默认模式是 请求 . 您也可以将其修改为 交通事故 ,以执行加权流量字节计数平衡。 默认情况下,为每个节点分配了相等的负载,但可以使用 负载系数 参数。 让我们更改配置,将75%的请求拆分到一个节点,其余25%的请求拆分到另一个节点:

<Proxy balancer://geoserver>
    BalancerMember ajp://localhost:8009/geoserver loadfactor=1
    BalancerMember ajp://localhost:8109/geoserver loadfactor=3
    Order deny,allow
    Deny from all
        Allow from 127.0.0.1
</Proxy>

28.重新启动Apache服务,然后打开GeoServer web界面,并导航它以发送一些请求。 如果现在再次打开balancer manager界面,则页面应如下所示:

image281.jpg

图 12.12 image281.jpg

29.也可以将节点设置为主机备用。如果节点失败,平衡器将获取对它的请求。 要设置备份,必须插入 status=+H 参数:

<Proxy balancer://geoserver>
    BalancerMember ajp://localhost:8009/geoserver status=+H
    BalancerMember ajp://localhost:8109/geoserver
    Order deny,allow
    Deny from all
        Allow from 127.0.0.1
</Proxy>

刚刚发生了什么?

您学习了如何配置简单而有效的高可用性配置。在本节中,我们没有介绍任何路由器; 此任务通常由网络工程师执行,您可以放心地知道它必须完成。

小测验-生产环境

问题1。如何为JVM优化环境?

1.您应该使用64位的JVM版本;它的性能比32位的要好得多。

2.必须在服务器上启动控制台窗口并设置全局环境变量。

3.必须在用于启动GeoServer的脚本中为JVM启动参数设置自定义值。

问题2。如何减少地图服务的停机时间?

1.使用改进的硬件。

2.优化数据。

3.为配置的每个组件设置冗余项。