(TL;DR:最后一段)我正在运行一项在线服务,到目前为止一直在进行离线备份和简单监控,以实现弹性和可用性。
恢复能力相当手动,但我对数据能够存活下来相当有信心。我有点担心数据不太安全,因为我必须主动备份数据。由于我需要时间响应,该网站曾多次宕机半天,有一次因为 UPS 和网络故障宕机了好几天。
我不喜欢那样。
我一直在研究基于 XEN 的服务器集群解决方案以及 PaaS 解决方案。我发现没有一个 PaaS 能够提供我所需的安全级别。我正在考虑分为低安全和高安全操作,但这只会转移我的托管问题。
我不需要极端的可扩展性(但我希望如此 :) 或完美的正常运行时间,但我自然会喜欢它们。停机几分钟是可以接受的。丢失活动内存很糟糕。丢失磁盘数据是不可接受的。违反安全性(公开数据)是不可接受的。我只关心单个应用程序的生存,而不是 cron 作业或它所运行的操作系统(只要它是偏执的安全,最好使用 OpenBSD)。
问题是:如何以永远不会在服务器集群上消失的方式运行应用程序(兼容 Linux 和 BSD)?
编辑:回应您对澄清的要求:这是一项用于安全存储私钥的 Web 服务,这意味着可以通过 Internet 访问并在清除私钥后执行私钥操作的 API。私钥很有价值,不能丢失。这些密钥与磁盘同步,因此不需要维护内存。我说的不朽是指它可能被暂停,但必须能够在暂停后继续运行。内核升级不会是一个重大问题,因为它可能会有计划的停机时间。这开始看起来像是复制磁盘和自动故障转移问题。
答案1
为了提高可用性,您需要在某个地方使用第二台服务器。如果您的位置不够好,第二个好办法是购买一台服务器并将其托管在某个主机托管数据中心,安全性较差 - 租用专用服务器(如机架空间),安全性较差 - 订购 VPS。我想您不需要花更少的钱,因为 VPS 很便宜(Amazon EC2 免费使用 1 年)。
根据您对可用性要求的描述,只需在现有服务器中添加单个 VPS 就足够了。
如果对于高安全操作,您的单个服务器就足够了 - 您可以在 VPS 上安装低安全服务器。如果您的服务器本身不足以满足高安全要求 - 您无需拆分。
让应用程序在两台服务器上“永不死机”并不难 - 只需在服务器之间实时同步所有数据,使用一些集群数据库(我听说过 cassandra,但有很多集群数据库可以适用)。它必须是文件系统文件,有 DRDB,但我建议无论如何都尝试使用数据库,避免复杂化。那么两列表呢:1. 文件名和路径和 2. 内容。然后,您将所有保存文件替换为 store-to-DB,并将读取文件替换为 get-from-DB。
基本上就是这样。您要实现的目标既不复杂也不昂贵。
免责声明:您决定需要哪种级别的安全性,我不建议将您的敏感数据存储在托管服务器上,也没有提出其他建议。
答案2
你问了很多问题,这些问题都包罗万象。我怀疑你甚至不知道自己在问其中的一些问题。
我试图挑出重要的问题并为你提供一些指导。
我有点担心数据不太安全,因为我必须主动备份数据。
加密您的备份. 任何值得使用的备份软件(例如巴库拉) 将支持这一点。
由于我需要时间响应,该网站曾多次宕机半天,有一次还因为 UPS 和网络故障宕机了好几天。
我不喜欢那样。
没人会这样做,但这种情况确实发生了。如果你想避免这种情况,你需要分布式冗余站点副本,最好平行线冗余(请求始终发送到所有副本,并且数据在它们之间神奇地同步。
想想谷歌,因为这就是我们在这里谈论的预算。在正常运行时间游戏中,Nines 花费美元。
我一直在研究基于 XEN 的服务器集群解决方案以及 PaaS 解决方案。我发现没有一个 PaaS 能够提供我所需的安全级别。我正在考虑分为低安全和高安全操作,但这只会转移我的托管问题。
听起来你正在寻找错误的解决方案,因为如果这I do not require extreme scalability (yet, I hope :) or perfect uptime, but I'd naturally like them.
是真的,最经济的解决方案就是找到一个不同的数据中心(具有更好的基础设施和更严格的 SLA)。
你追求的是为快速地为了要达到可靠的—— 两者并不互相排斥(事实上它们在某种程度上是共生的),但它们也不是连体双胞胎。
暂停几分钟是可以接受的。丢失活动内存很糟糕。丢失磁盘数据是不可接受的。违反安全规定(公开数据)是不可接受的。我只关心单个应用程序的生存,而不是 cron 作业或它所运行的操作系统(只要它是绝对安全的,最好使用 OpenBSD)。
OK,Halting for minutes is acceptable
意思是你很通情达理。很好。我们喜欢通情达理的人。
Losing active memory sucks
- 我同意你的说法,Skippy,我只是觉得你没有理由起诉。
服务器崩溃。即使是在维护最好的环境中也会发生这种情况,当服务器重新启动或断电时,活动内存 (RAM) 就会消失。你对此无能为力 - 这就是应该发生的事情。
Losing disk data is unacceptable
- 哦,伙计,现在你联合国这是合理的。
在现实世界中,磁盘会失效。当发生这种情况时,它们会带走所有数据,你会丢失自上次备份以来所做的一切。这就是为什么我们要备份(经常备份,这样我们就不会丢失太多了重要数据)。
由于您已经备份了,所以您正在尽一切努力缓解这种情况,因此当不可避免的磁盘故障(或操作系统崩溃和损坏)发生时,我的建议是打小猫的脸并开始恢复过程。
(您做有一个恢复过程,并且您定期对其进行测试,对吗?:-)
Breach of security (publicized data) is unacceptable
-- 对此我只想说“好吧,废话”,然后继续。我想不出有哪项服务会认为数据泄露是“可接受的”。
[I don't care] about . . . the OS . . . (as long as it's paranoidly secure, prefer OpenBSD)
-- 安全性不是操作系统的功能,而是您在其上应用的配置的功能。我可以在大约 5 秒钟内制造出一台不安全的 OpenBSD 机器。
忘记所有的营销炒作,忘记 OpenBSD(无可否认令人印象深刻的)记录:选择满足您需求的操作系统,然后花时间保护它。是的,您仍然必须对 OpenBSD 机器这样做。
问题是:如何以永远不会在服务器集群上消失的方式运行应用程序(兼容 Linux 和 BSD)?
你不需要。在大多数集群(或单个系统)上,你能做的最好的事情就是监控应用程序故障并快速重新启动,以免用户注意到。
最接近你所描述的情况是设置类似 VMWare HA 的东西(如果网络/数据中心(电源)问题确实令人担忧,则跨地理分布的站点),如果一个站点出现故障,则整个(虚拟)环境都会出现故障。
编辑:回应您的澄清请求:这是一个用于安全存储私钥的 Web 服务,这意味着可以通过 Internet 访问并在清除后执行私钥操作的 API。
我希望你不要误解,但当你从我冰冷、死寂、毫无生气的手中撬出我的私钥时,你就可以拥有它们。任何不认同这种理念的人对数据安全都不够警惕。:-)