我有一个Windows平台上的数据stream,我以每秒钟约800个数据点的相当高的速度捕获到Mongodb。 我希望能够从公司外部获得这些数据,但是公司不希望将27017(mongod)向外界推出。 我已经设置授权和编译mongod的SSL。
如何将Mongo公开到外部服务器? 我的服务器坐在“免费”互联网的另一个位置,我希望每隔10秒钟从服务器获取最新的1000个数据点。 如果我无法前进,我将如何做到这一点?
我可以让mongo服务器把数据“推”到外部服务器(它有一个固定的IP)吗? FTP不是一个解决scheme,因为这个(我认为)数据stream太快了。
我可以以某种方式使用http或其他协议stream出来吗?
理想情况下,我会喜欢“原生”访问mongo服务器,因为这将允许我使用可滚动的游标,所以任何接近此function的解决scheme都是好的。 但是,如果这不可行或不实际,从受防火墙保护的服务器到外部服务器的stream式推送解决scheme也适用于我。
如果你的私人服务器一直处于开启状态,并且你的公司对你使用VPN(这是一个很大的做法,检查IT)是否合适,我会使用openVPN和可能的MongoDB副本集。
OpenVPN的安全/努力比例相当不错 – 它可以在大多数Linux发行版上作为标准软件包运行,在configuration文件上运行,有许多教程,使用静态密钥(简单安装)或TLS(每个客户端/服务器一个密钥)。
OpenVPN的HOWTO
你的“外部”服务器将是VPN服务器,MongoDB“master”将在启动时自动连接到它。
连接好服务器后,需要select是通过VPN查询“主”,还是使用“外部”的辅助MongoDB服务器进行同步,然后查询。
MongoDB的副本集允许一台服务器与主服务器保持“同步”。 它通常用于容错,但您也可以将其用于您的目的。
MongoDB地理冗余副本集 。
确保你的“外部”服务器是非投票的,优先级为0(这意味着它不会成为集群计算的一部分)
如果您向IT人员倾诉整个解决scheme,并且在开始依赖生产相关任务之前对其进行testing
一种可能性是build立一个用于Mongo数据库连接的SSH隧道 。 SSH隧道将encryptionMongostream量,SSH隧道是众所周知的技术。
看到:
对隧道已经有很好的build议(我赞成OpenVPN),但是在这里我会提出一个不同的方法。
为了获得一个特定的数据集,而不是将整个MongoDB数据暴露给远程服务器,最好是构build一个更紧密集中的Web API,它可以在任一位置运行。
哪种方法更好地工作主要取决于适合在公司networking中运行的东西的可用性以及所涉及的networking策略。 您可以非常紧密地lockingAPI的访问权限,以满足networkingpipe理员的关注。 例如,通过IPlocking访问权限,需要适当的validation,并且可能将其locking到特定的SSL密钥。
如果可能的话,最有效的方法可能是运行一个守护进程,靠近使用您提到的可放大光标的mongodb服务器,并将数据发送到远程Web服务器上的API。