ArchLinux是近年来比较火的Linux滚动更新发行版。经过近一年多的测试、实验,笔者认为,ArchLinux尽管在许多地方略显激进,但仍旧适合做OSM数据渲染服务器使用。这里,和大家分享一下收获。
配置好的镜像文件可从 百度云盘下载7Z压缩包。该镜像已经对地名进行了汉化。
方案选取
为了架设一个快布式、可更新的环境,笔者做了大量测试,这里把基本构想说一说。
- 虚拟化。为了便于快速发布与测试,OSM瓦片服务应该是虚拟化的。这里,采用 Oracle Virtual Box 虚拟机作为基础工具。使用虚拟机的一大好处是“后悔药”,不断借助snapshot,支持回退到过去的还原点。另一大好处是快速部署,无论宿主是什么操作系统,直接拷贝过去就能运行。当然,坏处显而易见。首先,性能有损失,64GB内存,要留出8GB左右给宿主。其次,磁盘性能也有一些损失,但不是太大。
- 系统可更新。作为提供服务的操作系统,应该是可持续更新的。对OSM这类需要手工配置很多参数的服务器(特别是汉语翻译),重新安装一个发行版的代价很高。相对而言,使用滚动更新版的Archlinux,则代价较小。尽管滚动更新版会有滚挂的可能(很大程度上是因为内核更新与库更新不同步造成的),但虚拟机的Snapshot功能很好的避免了这个问题。如果滚挂了,直接恢复回去,隔几天再试,相关库已经跟上内核的版本,就OK了。
- 数据可更新。OpenStreetMap全球数据PBF格式2017年1月镜像达到34GB,以国内的网速条件,使用changeset保持实时更新是不现实的。首先,从国外站点下载34GB的镜像就需要数天,外加导入的时间,初始数据导入后,距离最新镜像已经有1个礼拜的时间差了。在switch2osm文章里也说到“Keeping the data up-to-date can be resource intense, in particular because after the import you may already be multiple days behind”。其次,changeset的下载和更新需要不断进行,这种实时更新对系统性能的消耗非常大。因此,笔者采取另一种模式,即定期重新导入。
- 系统、数据更新策略。保留一个未导入数据的纯净虚拟镜像,并不断滚动更新。每个季度或每半年,使用该镜像完整导入一次OSM数据。
性能与成本
为了在有限的成本下,完成数据的快速导入,需要一套较为合理的机器配置。性能较好的物理服务器动辄十几万,在公司账务比较吃紧的情况下,自己动手攒一台,还是不错的。这里给出笔者的配置。
器件 | 型号 | 预算 |
---|---|---|
CPU | Intel Core i7 6700K 4GHz | 2650 |
主板 | ASUS Z170 PRO GAMING | 1700 |
内存 | Kingston Fury DDR4 2400 64G (16GBx4) | 4600 |
系统盘 | SANDISK 240G | 550 |
数据盘 | SAMSUNG 850 EVO 1TB SATA3 | 2600 |
其他 | 机箱、电源、散热、上架托盘等 | 2000 |
合计 | 不含显示器 | 14100 |
在这个配置下,两块固态硬盘,分别存放虚拟机的 root、home分区、var\ database 分区
硬盘 | 虚拟机VDI | 说明 |
---|---|---|
SANDISK 240G | root.vdi | 根、home,存放 planet.OSM PBF及node缓存 |
SAMSUNG 850 EVO | var.vdi | 瓦片缓存,即存储栅格图像的分区 |
SAMSUNG 850 EVO | database.vdi | 数据库表空间 |
这样配置的好处是,两块固态硬盘分担了读写,性能堪比RAID. | ||
导入时,osm2pgsql 使用三个重要参数 | ||
-C32000 提供32GB的临时缓存 | ||
–drop 不保留三个中间表,即planet_osm_nodes,planet_osm_ways,planet_osm_rels | ||
–flat-nodes “./flat_node” 使用文件 flat_node 而不是数据库存放节点信息 | ||
进一步优化,导入全球数据仅耗时42737s |
在完全导入后,进一步压缩VDI 的大小,任务就完成了。
效果截图
]
]
]
部署说明
1、默认虚拟网络为NAT格式,内部IP 10.0.2.15 (DHCP)
2、适合自己的域名。默认没有域名,仅用机器名 archosm作为域名。因此,如果不修改,外部无法访问。详情及优化策略请参考虚拟计算机内部的桌面readme.
发布地址
http://www.goldenhawking.org:8088/如下(限于动态域名,可能访问不畅)。