arcserver是GIS应用服务器的一种,可以提供地图服务发布、缓存地图生产、要素服务查询、地图服务分析等多种GP服务。arcserver在提供服务的同时,其本身也是一种服务(相对于操作系统而言)。arcserver发布的站点服务使用tomcat发布(常见的如:http://localhost:6080/arcgis/)。我们可以在 server10.x\Server\framework\runtime\tomcat\bin(windows操作系统中)下找到tomcat 的痕迹。在配置多机负载均衡的时候,安装Web Adaptor会用到Web Server IIS。
作为一种网络服务,别的网络服务具有的要素,arcserver它都具有。如服务协议、IP、端口、所属用户、数据的共享读写等等。同样,由于它又是通过tomcat发布,tomcat具有的缺点,它也都具有。相比较而言,它又比其他的一些GIS服务器(如GeoServer、Mapserver、TileCache等)使用简单、易操作,基于这些优点,我们常常忽略它的缺点,它几乎成了webgis 中GIS服务器的标配,但是一旦发生问题,又是我们这些喜欢简单、易操作的选手们不愿看到的,甚至是一件非常棘手的问题。
1、账户问题
arcserver账户分为系统账户和站点账户。
系统账户是相对于操作系统而言的,它规定了arcserver对操作系统的共享、控制、读写、修改、特殊等权限。很多关于文件操作方面的问题都发生在这个层面。比如:不能注册数据集、arcserver集群不能共享访问、前后系统账户不一致遗留的配置文件,arcserver服务不能正常启动等等。倘若不能注册数据集,你必须确保你远程存储的操作系统具有与本地arcserver一样的账户和密码,也就是说,你的本机账户是arcgis ,密码是123456,那么你的远程操作系统也应该有类似的系统账户arcgis ,然后密码是123456,而且远程文件应该是可以供本机共享访问的,arcserver集群不能共享访问的解决方式也如以上。前后系统账户不一致遗留的配置文件问题,可以是单方面更改arcserver系统账户造成的,也可以是多次重装arcserver造成的,这时就需要更改现有配置文件,相应的系统用户配置文件既有在安装文件夹server下的,也有在config-store文件夹mathine下的,应当同时修改为一致,以上过程过于繁琐,另一种解决方式是在arcserver中的Configure ArcGIS Server Account配置引导程序中重新新建系统账户。如果是重新安装arcserver,那么须确保遗留的配置文件被清除干净,之后从新创建arcserver系统账户。
站点账户
在安装arcserver后,浏览器会跳出一个创建主站点的界面,这个页面的账户就是站点账户。很多时候我们其实是在跟这个账户打交道,比如发布地图服务,调用地图服务等等。相应的配置文件在 tomcat下和 config-store下面。在使用的过程中,我们常常会忘记该账户,可以在server\ArcGIS\Server\tools\下找到passwordreset命令。cmd窗口调用passwordreset命令:
键入:PasswordReset -l (查看主站点账户)
键入:PasswordReset -p 主站点账户(修改密码)
也或者打开config-store\security\super\super.json,查看当前主站点的账户和密码。
2、服务站点不能启动
arcserver站点服务就是我们上面提到的主站点,它以服务运行。倘若服务站点不能启动,我们不仅仅要考虑服务是否启动、其IP地址、端口是否正确,还需考虑apache、tomcat 等是否启动。应该说站点服务牵涉面是非常多的,需要一个一个排查。确认在浏览器输入了正确的网络地址,站点服务没有反应后,进入操作系统的服务策略里,找到arcserver服务项是开启状态的,此时arcserver站点服务有可能能够进入。如果arcserver服务项开启后,刷新或者过了几分钟后该服务又停了,则需要查看端口号是否被占用或者阻挡了,netstat命令查看是否有其他程序在使用6080端口(arcserver站点服务默认端口),有则停掉,再重启arcserver服务项,再回浏览器查看arcserver站点服务是否起来。确保防火墙开放了6080端口,再重启arcserver服务项,再回浏览器查看arcserver站点服务是否起来。如果以上arcserver站点服务还是没有起来,则重启apache服务项,顺带进入server10.x\Server\framework\runtime\tomcat\bin文件夹下,点击shutdown关闭tomcat,再点击startup启动tomcat,浏览器页面即可进入arcserver站点服务。当然不排除其他方面的原因,倘若你的浏览器不兼容,也可能进入不了站点服务;arcserver服务项并没有使用arcsrver系统账户,也可能启动不了。
3、不能发布服务
我们将做好的msd工程文件发布的时候有时候会出现服务发布失败的问题,进入calog或者站点服务器发现publishing工具是停止状态的。这种问题的出现常常是软件不兼容造成的。如果你的destop和server版本不一致也很容易造成这个问题,更多的是操作系统的版本与你当前的server版本不一致问题。此时可以在esri官网下载相应的补丁包,用以安装新的publishing工具确保服务能够发布。当然,publishing工具是一个GP服务工具,我们也可以自己将publishing写进GP工具集中。
重新构建publishing工具即可。
4、切图中断、切片不全
倘若你的数据量比较大,少则5t,多则10t,20t,arcserver切图是一件非常费时的任务,其io吞吐量是非常巨大的,较低IO的硬盘、网络传输、CPU都有可能造成切图中断。这时需要重新启动你的切片工具,选择recreate empty tiles即可。由于矢量范围过碎,切片会有黑块现象,这时你需要将status.gdb文件拷贝出来,找出切图失败的区域,重新切图,并将切后的瓦片重新导入原有切片数据集中。
5、修改arcserver web站点端口号
arcserver web站点服务使用tomcat发布,tomcat放置在C:\Program Files\ArcGIS\Server\framework\runtime\tomcat下,打开tomcat\conf \erver.xml配置文件,找到port字样,arcserver web站点服务默认为6080,你可改为常见的80 端口,同时在\arcgisserver\config-store\machines\GENUINE.MICROSOFT.COM.json文件中一并修改端口为80端口。以上也可以修改http://localhost:6080/arcgis/中的主机名,localhost改为gisserver,变成http://gisserver:80/arcgis/。当然,也可以使用Web Adaptor修改。
6、集群部署反向代理、负载均衡地理信息服务的调度量一般是比较大的,当前单个计算机IO吞吐、运算能力等性能指标并没有达到相应的水平,通常的考虑是做集群处理。而地理信息服务包含了地图服务、地图切片服务、要素服务、覆盖服务等多种服务,集群又做了进一步地划分,使用多机多服务集群方式满足客户端多样化的请求。同时,处于安全考虑,我们不希望服务器集群直接暴露在客户端,于是又产生了反向代理服务器中间层,使客户端的请求转发到集群服务器上(相反,正向代理:客户端不希望暴露在网络中,使用正向代理转发通信)。安装安装Web Adaptor将不同的服务器的arcserver配置进来。
官网也给出了一些常见问题的解决方式: https://resources.arcgis.com/zh-cn/help/main/10.2/index.html#/na/0154000004qt000000/
附件一:
一 服务发布:
- 在目录树中,浏览到地理数据库。
- 右键单击想要发布的地理数据库,然后单击共享为地理数据服务。
将显示共享为服务 窗口。
- 选择发布服务,然后单击下一步。
- 从选择连接下拉列表中选择要使用的 ArcGIS Server 连接。如果要使用的服务器连接并未列出,可单击连接到 ArcGIS Server 以创建与服务器的新连接。
- 还可以在发布服务窗口中输入新的服务名称。名称长度不能超过 120 个字符,并且只能包含字母数字字符和下划线。
单击下一步。
- 默认情况下,服务会发布到 ArcGIS Server 的根文件夹下。可以将服务组织到根目录下的子文件夹中。选择要将地理数据服务发布到其中的目标文件夹,或创建一个新文件夹用来存储地理数据服务。
- 单击继续。将打开服务编辑器对话框。
- 为地理数据服务设置所需属性。此处,您可以选择用户可对服务执行的操作,还可精细控制服务器显示服务的方式。
- 单击分析 。此操作将检查地理数据库是否能够发布到服务器。
- 对准备 窗口中列出的所有错误 () 一一进行修复,以便能够将地理数据库发布为服务。另外,您还可以修复警告和通知消息,以进一步改善地理数据服务的性能和外观。
- 修复错误以及警告和消息(可选)后,单击发布 。
二、切图工具箱
1、Convert map server cache storage format(转换服务缓存的存储格式)
利用该工具可以快速的切换地图缓存的格式,实现紧凑(compact)格式和松散(explode)格式之间的切换。其原理是对cache目录下,重新生成新的格式切片并且删除旧格式切片。该工具的输入参数是切图服务,但是在实际业务需求中存在只有缓存文件为没有服务的情况,如何实现切片间直接转换呢?目前AGS 不存在这样的工具,那么可以发一个空的切片服务,确保该切片服务的切片的schema和切片一样,然后将需要转换的切片导入到该服务下,然后在运用该工具实现格式间的转换。
2、Create Map Server Cache
该工具可以对动态地图服务创建切片
3、export map server cache
可以将指定的缓存服务的切片到处到指定的目录,其中可以指定导出的切片格式,是紧凑还是松散;指定到处级别和导出范围(通过感兴趣和加入要素的形式)
4、Generate Map Server Cache Tiling Schema
该工具用来生成地图缓存切片schema,该工具的应用场景一般是要对多个地图文档,采用相同的切图方案,故先使用该工具将切片方案到处。
5、Import Map Server Cache(导入地图切片缓存)
将切片或者切片包导入到服务缓存中,该工具可以用来对已有切片进行更新,可以指定更新的切片级别,更新切片的范围等。该工具默认的是在原有切片的上,叠加新的切片,以混合切片展现,如果勾选了overwrite tiles 就会覆盖现有切片。注意导入的切片和地图缓存必须使用相同的切片方案和存储格式。
6、Manage map server scales
可以对已有的地图或者影像服务中添加和删除比例级别
7、Manage Map Server Cache Tiles(管理地图缓存切片)
此工具用于创建新切片、恢复缺失切片、覆盖过时切片以及删除切片。
8、Manage Map Server Tiles Status(管理地图缓存状态)
每个切片服务都有个status.gdb 的文件,该文件用来记录切片的状态
附件二:Nginx配置反向代理和负载均衡
Nginx下载:http://nginx.org/en/download.html
利用Nginx做反向代理可以完成这一要求,此时出现的问题是,客户端的请求并没有到达内部的服务器中,而是直接跳至反向代理服务器的页面上,此时就需要关闭反向代理服务器与内部集群服务器冲突的端口。
打开nginx.conf文件
server {
listen <span style="color:#ff0000;">80</span>;
server_name <span style="color:#ff0000;">localhost</span>;
#charset koi8-r;
#access_log logs/host.access.log main;
location <span style="color:#ff0000;">/</span> {
root <span style="color:#ff0000;">html</span>;
index <span style="color:#ff0000;">index.html</span> index.htm;
}
}
1.在192.168.1.2 、192.168.1.3分别安装两个arcserver,端口都是6080,启动两个arcserver,nginx安装在192.168.1.4上,外部访问端口为8080,
2.在nginx.conf中配置反向代理的信息,需要在 server中添加如下信息:
server {
listen 8080;
server_name 192.168.1.4;
location / {
proxy_pass 192.168.1.2:6080;
proxy_pass 192.168.1.3:6080;
}
}
重启Nginx,访问192.168.1.4:8080,即可跳转至192.168.1.2或者192.168.1.3,有多少个需要代理的服务器,就加多少个server代理。
4.负载均衡
在上面的配置基础上,在nginx.conf的upstream中配置负责均衡的信息,设置轮询方式,如下:
#gzip on;
upstream mygisserver.com{
server 192.168.1.2:6080 weight=1;
server 192.168.1.3:6080 weight=1;
}
server {
listen 8080;
server_name 192.168.1.4;
location / {
proxy_pass http://mygisserver.com;
}
}
即可实现192.168.1.2,192.168.3到192.168.1.4的负载均衡。
附件二apache配置反向代理和负载均衡
修改apache配置文件httpd.conf
1、增加监听端口
Listen 8080
2、开启反向代理模块
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_connect_module modules/mod_proxy_connect.so
LoadModule proxy_ftp_module modules/mod_proxy_ftp.so
LoadModule proxy_http_module modules/mod_proxy_http.so
3、配置虚拟主机反向代理链接
ServerName 192.168.1.4
<VirtualHost *:8080>
ProxyPass / http://192.168.1.2:6080/
ProxyPassReverse / http://192.168.168.2:6080/
ProxyPass / http://192.168.1.3:6080/
ProxyPassReverse / http://192.168.168.3:6080/
</VirtualHost>
ProxyRequests On
3 负载均衡
Listen 8080
ServerName 192.168.1.4
<Proxy balancer://mysgisserver>
BalancerMember 192.168.1.2:6080
BalancerMember 192.168.1.3:6080 loadfactor=1
ProxySet lbmethod=byrequests
</Proxy>
<VirtualHost *:8080>
ProxyPass / "balancer://mysgisserver"
ProxyPassReverse / "balancer://mysgisserver"
</VirtualHost>
ProxyRequests On