ZooKeeper-分布式利器(4)——ArcGIS Serve
ArcGIS Server和ArcGIS GeoEvent Server在应对分布式环境时,用到了ZooKeeper。
10.5 ZooKeeper in ArcGIS
在10.5版本,ArcGIS Server与 ArcGIS GeoEvent Server使用的是同一个ZooKeeper,位于ArcGIS Server安装目录\framework\runtime\zookeeper。通过zkCli可以连接ArcGIS Server中的ZooKeeper。zkCli -server localhost:2181。
通过ls查看文件目录节点,get查看节点内容数据,可以整理出这样一个目录。
![](https://img.haomeiwen.com/i5650937/17e8c390df1f6b13.png)
![](https://img.haomeiwen.com/i5650937/371921bf2ea33701.png)
ArcGIS GeoEvent Server
对于ArcGIS GeoEvent Server来说,zookeeper中保存着它的所有配置。
![](https://img.haomeiwen.com/i5650937/89938e6099ecb38b.png)
包括与ArcGIS Server的连接信息、连接器、注册文件夹、GeoEvent定义、GeoEvent服务、地理围栏、流服务等等。其中的配置信息有的是以json数据显示,例如ArcGIS Server的连接信息。有的是以xml显示,例如连接器的相关信息。但无论是何种格式,配置信息都存入了对应的Znode节点的内容中。
![](https://img.haomeiwen.com/i5650937/d1a50a5e97c59254.png)
ArcGIS GeoEvent Server集群中的多台机器的zookeeper也组成了一个集群,里面的配置信息是一样的,由于和后面Server集群的原理相似,暂不演示。可以说,通过zookeeper集群,实现了GeoEvent Server集群中,各台机器间的配置同步。
ArcGIS Server
在ArcGIS Server单机部署且运行正常时,查看Server下面的state、stopping节点的数据。记录的是机器的状态
![](https://img.haomeiwen.com/i5650937/9625142d426ec86d.png)
![](https://img.haomeiwen.com/i5650937/6e1e75da311d197e.png)
现在准备了第二台机器,名叫250winpro.esrichina.com,安装了ArcGIS Server但没有创建站点。
hosts文件如下
192.168.100.96 121winpro.esrichina.com
192.168.100.250 250winpro.esrichina.com
第二台机器加入站点成功后,使用客户端连接新机器的zookeeper。
![](https://img.haomeiwen.com/i5650937/64333a67551a950b.png)
发现新机器100.250的zookeeper中的内容和100.96机器一样。
![](https://img.haomeiwen.com/i5650937/d38a468e2974fa1c.png)
既然内容一致,那他们是不是同一个zookeeper呢?查看zookeeper配置,一目了然。
![](https://img.haomeiwen.com/i5650937/8ce670f720a15ec6.png)
他们同属于同一个zookeeper集群。
现在我停止集群中的100.96机器,模拟ArcGIS Server机器因意外终止。连接到96的zkCli开始内容开始刷新大量无法连接的信息。连接到100.250的zkCli刷了几下,最终稳定住了,如图所示。
![](https://img.haomeiwen.com/i5650937/9a3c48480acf3b0d.png)
这时再查看zookeeper配置,发现只剩下了100.250的server。
![](https://img.haomeiwen.com/i5650937/9277f57b99eb6c8b.png)
和Rest 中的现象对应。可以得出结论,ZooKeeper真实反映了集群中各机器的状态。
![](https://img.haomeiwen.com/i5650937/acbcf1809ea7697c.png)
总结
ZooKeeper在分布式环境中最实用的两个案例,就是 1.同步各服务器配置、2.实时更新可用服务器列表。
ArcGIS GeoEvent集群使用ZooKeeper做配置的同步,ArcGIS Server集群使用 zookeeper 同步集群状态、更新获取可用的Server列表,这一点类似于上一篇文章中的实例。可以说是物尽其用了。