(TL;DR:最后一段)我正在运行在线服务,到目前为止一直在进行离线备份和简单监控以实现弹性和可用性。
弹性是相当手动的,但我相当有信心数据会存活下来。我有点担心数据不太安全,因为我必须主动备份它。由于 UPS 和网络故障,该网站曾多次关闭半天,因为我需要时间做出响应,并且关闭了好几天。
我不喜欢那样。
我一直在关注服务器集群、基于 XEN 的解决方案以及 PaaS 解决方案。我发现没有任何 PaaS 可以提供我所需的安全级别。我正在考虑拆分为低安全和高安全操作,但这只会解决我的托管问题。
我不需要极端的可伸缩性(但我希望 :) 或完美的正常运行时间,但我自然会喜欢它们。暂停几分钟是可以接受的。失去活动记忆很糟糕。丢失磁盘数据是不可接受的。违反安全(公开数据)是不可接受的。我只关心单个应用程序的生存,而不关心 cron 作业或它运行的操作系统(只要它偏执地安全,更喜欢 OpenBSD)。
问题:如何以永不在服务器集群上死机的方式运行应用程序(兼容 Linux 和 BSD)?
编辑:响应您的澄清请求:它是一种用于安全存储私钥的 Web 服务,这意味着可以通过 Internet 访问并在清除后执行私钥操作的 API。私钥很有价值,不能丢失。这些密钥与磁盘同步,因此不需要维护内存。我所说的不朽是指它可能会被暂停,但在暂停后它必须能够继续。内核升级不会是一个重大问题,因为它可能会导致计划内停机。这开始看起来像是复制磁盘和自动故障转移问题。
你问了很多问题,都集中在一个大球里。我怀疑你甚至不知道你在问他们中的一些人。
我试图挑选出重要的项目并为您提供一些指导。
加密您的备份。任何值得使用的备份软件(例如Bacula)都支持这一点。
没有人这样做,但它确实发生了。如果你想避免这种情况,你需要站点的分布式冗余副本,最好是并行冗余(请求一直发送到所有副本,并且数据在它们之间神奇地同步。
想想谷歌,因为这是一种预算我们在这里谈论。在正常运行时间游戏中,Nines 花费 Dollars。
听起来您正在寻找错误的解决方案,因为如果这
I do not require extreme scalability (yet, I hope :) or perfect uptime, but I'd naturally like them.
是真的,最经济的解决方案将是找到一个不同的数据中心(具有更好的基础设施和更严格的 SLA)。您正在追逐为快速而设计的东西以实现可靠——这两者并不相互排斥(事实上它们有些共生),但它们也不是连体双胞胎。
好的,
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 机器,您仍然需要这样做。
你不知道。在大多数集群(或与此相关的单个系统)上,您可以做的最好的事情是监视应用程序故障并以足够快的速度重新启动它,以至于您的用户不会注意到。
您最接近描述的事情是设置类似 VMWare HA 的东西(如果网络/数据中心(电源)问题是一个真正的问题,则跨地理分布的站点),并且使整个(虚拟)环境失败如果一个站点出现故障,则结束。
我希望你不要误会,但当你从我冰冷、死气沉沉、死气沉沉的手中撬开私钥时,你就可以获得我的私钥。任何不认同这种理念的人都对数据安全不够偏执。:-)
为了可用性,您需要在某处安装第二台服务器。如果您的位置不够好,第二件好事是购买服务器并将其托管在某个托管数据中心,不太安全 - 租用专用服务器(如机架空间),不太安全 - 订阅 VPS。我想您不需要花比这更少的钱,因为 VPS 很便宜(Amazon EC2 可免费使用 1 年)。
从您描述可用性要求的方式来看,只需向现有服务器添加单个 VPS 就足够了。
如果对于高安全级别的操作,您的单台服务器就足够了——您可以在 VPS 上使用低安全级别的服务器。如果仅靠您的服务器还不足以满足高安全性要求,那么您就没有什么可分割的了。
在两台服务器上拥有“永不消亡”的应用程序并不难——只需在服务器之间实时同步所有数据,使用一些集群数据库(我听说过 cassandra,但有很多集群数据库都适合)。它必须是一个文件系统文件,有 DRDB,但我建议无论如何都要尝试使用数据库并避免并发症。两列表呢:1. 文件名和路径和 2. 内容。然后将所有保存文件替换为存储到数据库,并将读取文件替换为从数据库获取。
基本上就这些了。您要实现的目标没有什么非常复杂或昂贵的。
免责声明:您决定所需的安全级别,我不建议将您的敏感数据存储在托管服务器上,我也不建议其他方式。