题 设置高可用性虚拟化环境


对于项目,我的任务是为网上商店和CMS系统规划高可用性设置。但是,该项目当然预算紧张。因此,高端解决方案可能不在预算范围内。

将有两台运行Web服务器(CMS,商店)的计算机,一台运行数据库的计算机,以及一台用于运行向合作伙伴提供订单所需的传真服务器的计算机。所有系统都运行Linux。所有这些组件都需要高度可用,并且应该支持透明故障转移。

为了降低硬件成本,我考虑了虚拟化环境。那里有很多信息,但我不确切地知道要开始。很明显,至少需要服务器作为虚拟机的主机,因此没有单点故障。

哪种方式是支持高可用性的最佳方式?

第一个问题是在这种情况下哪种虚拟化解决方案最好。需要某种管理界面。需要有一种方法将正在运行的虚拟机从一个主机移动到另一个主机,因此可以完成主机的维护。需要某种机制,以便在一台主机出现故障时仍可使用虚拟机。你能在这里找到有效解决方案的建议吗?

在大多数情况下,共享文件存储似乎是高可用性的先决条件(预计VMware vSphere相当昂贵)。但是,宁愿在虚拟机主机中投入更多资金,而不是在设置中添加另外两台服务器以提供冗余NFS文件存储。是否有可能只与两个虚拟机主机相处?解决方案可能是两个也使用这两个作为NFS主机。这样做有很多性能损失吗?

编辑: 我的目标是99.9%的可用性。但是,由于有正常的营业时间,因此无需24/7可用性,这提供了一些操作空间。必须以某种方式保证的可用时间是在上午10点到午夜之间。


8
2018-03-04 20:38




'高可用性'有多高?你是在拍摄1到9或6到9的可用性,还是介于两者之间?在你有具体要求之前,不可能说出你想要做的事情是否可以在给定的预算下实现。 - growse
是的,你是对的。我的目标是99.9%的可用性。 - spa
“99.9%”不仅仅是我们抛出的一句话。它相当于大约8.8小时的停机时间 一年。这会让你脱离在预算紧张的情况下被抛在一起的系统范围。如果您的预算有限,您是否可以支持该级别的可用性? - Rob Moir
@RobMoir - 我认为,如果你符合我在答案中列出的标准,那么在8小时内你就无法解决很多问题(预算仍然可能很小)。如果您确保高级警告,非工作时间,计划停机时间不计入您的SLA(非24/7软件)。 - Mark Henderson♦
@MarkHenderson我知道你是对的,我只是说这个过程需要一些思考和规划,不会“只是发生”(你需要确保你能在8小时内在现场获得备件,因为例如,所以你不想失去7个小时的“窗口”到邮局,或者发现你最喜欢的供应商选择当天在他们通常有库存的一些微不足道的电缆上缺货了) 。 - Rob Moir


答案:


总体而言,要实现高可用性,您需要:

  1. 多台服务器
  2. 多个一致的数据副本
  3. 可以在多个服务器之间访问的一致数据
  4. 一种在备用服务器上自动引导第二个实例的方法

1号就像听起来一样简单 - 购买两台相同的服务器。

数字2可以通过复制SAN(昂贵,非常快,非常可靠)或每个服务器上的复制文件系统来实现(便宜,速度和可靠性取决于您对所选技术的了解)。

数字3可以通过SAN(一个存储LUN,由两个服务器访问)或复制文件系统(两个单独的存储区域,每个服务器只能看到自己的存储区域)来实现。

4号可以通过心跳应用程序实现。

要以较小的预算执行此操作,假设VMWare vSphere,您可以使用SAN 要么VMWare现在提供了一个 自我复制的存储设备 它在两台可用于高可用性的服务器上提供两个不同的数据存储。 vSphere还提供内置心跳和高可用性配置。

要做到这一点 没有 预算,您可以沿着Xen路径前进,并使用DRBD在两个节点之间复制存储。然后设置heartbeat以切换活动DRBD存储节点和Xen实例,以便在第一台主机关闭时启动第二台主机上的VM。

使用这些基本建议你不会得到5到9(99.999%)的正常运行时间,但你可以 easilly 如果你知道自己在做什么,可以使用最便宜的方法获得3-nines(99.9%)。


13
2018-03-04 21:32





在讨论共享存储时,你会谈到“花费多少钱来购买这笔费用”。这当然是一个完全有效的点,钱很紧 到处

但如果您正在谈论高可用性,那么您还需要问“为什么 我们想要高可用性吗?“如果答案是,例如,”因为在线销售业务每小时超过2000美元,所以如果我们关闭了一小时,那么我们已经损失了2000美元“那么费用问题和负担能力可以成为“我们能负担得起  购买能够或大大改善我们的高可用性部署的东西?“

这是一个重要的细节,它会对你对预算的评论发挥作用 - IT'尾巴'不能通过坚持对一个小问题过于复杂和昂贵的解决方案来歪曲业务“狗”,但同时如果业务有在其IT基础设施的某些要求之后,它必须准备好为它们正确预算或调整其要求。

我认为虚拟化在提高系统可用性方面具有很大的潜力,但它不是一个魔杖。事情的硬件方面虽然很重要,但却非常依赖于软件需求 - 如果一个SQL服务器崩溃,如果前端应用程序正在进行谈话,那么SQL数据库集群就不会有任何问题。到数据库chokes因为它无法处理故障转移。

在数据中心中彼此相邻的两个“高可用”服务器仍然容易受到电源故障,盗窃等的影响。再次,取决于“为什么 我们这样做吗?“,您可能需要非常仔细地考虑这个方面,因为它会增加项目的很多部分的费用和复杂性。


9
2018-03-04 21:47



...no good having a SQL database cluster that falls over with no trouble in the event of one of the SQL servers crashing if the front-end application that talks to the database chokes because it can't handle the failover.  - 我无法强调这一点。我们有一个客户让我们在大型SAN上实施HA SQL Server集群,并且在一天结束时他们的软件必须在故障转移的情况下重新启动,因为它无法处理通信中断。当SQL Mirror和NLB足够时,这是一项昂贵的练习,这是徒劳的。 - Mark Henderson♦
听起来我们都从旧项目中得到了类似的伤疤 - Rob Moir
@MarkHenderson为什么通信中断(顺便说一句 - SAN还是网络)? - Nils


如果不知道您使用哪个数据库和应用程序服务器,我建议:

  • 在光伏模式下使用XEN> 3.2用于虚拟机(只是我个人最喜欢的) - 隔间或其他光线虚拟化解决方案也可能适合(OpenVZ来命名)。
  • 在每个物理节点上构建四台VM计算机
  • 使用本地RAID 5和SAS 3,5“磁盘 - 尽可能多的磁盘(5个是好的)
  • 使用15k RPM磁盘(您的DB需要它)
  • 使用DRBD和OCFS2提供廉价的“共享”存储,使用快速,安全,可靠的本地网络进行此连接(绑定直接互连非常快速和良好)。
  • 在应用程序级别上执行HA
  • 在成对的机器之间使用负载平衡,这样您就可以让8台机器执行并发任务

HA-例子:

  • Application-Server:在集群主动/主动模式下使用Tomcat
  • LVS:使用lvs的并发从属和主复制
  • Oracle-DB:使用RAC(我不知道OpenSource DB是否有相同的解决方案)

如果您在应用程序层上执行HA,则该层最了解如何复制会话。如果一个节点出现故障(计划内或计划外),幸存节点将接管 - 包括会话。


5
2018-03-04 21:29



“Oracle-DB:使用RAC” - 标准版未获得OCFS2的许可或支持。除此之外,一个非常翔实的答案。 - kubanczyk
@kubanczyk Oracle-RAC不仅仅是ocfs2。但是ocfs2是免费的。所以你可以随时使用它。 - Nils


你为什么要买自己的主机?为什么你找不到像这样的企业云/ IaaS提供商 BlueLock 要么 Terremark公司 这将提供您需要的基础设施。他们将提供像vSphere HA这样的服务(更像是减少停机时间而不是服务HA,但它是一种经济高效的解决方案),防火墙,LTM / SSL卸载器,SAN(带有冗余架子),监控/警报等。请注意,我们不是在这里谈论消费者云解决方案,所以要准备为价值付出代价。


2
2018-03-04 22:11



是的,你是对的。但是,设置包括用于传真传送的自定义硬件。因此云解决方案不会遗憾。 - spa
@spa,您仍然可以在其物理环境中配置自定义硬件,其余部分在虚拟环境中并桥接VLAN。 - HTTP500


您可以查看一体化虚拟化/存储复制解决方案。

ZFS文件系统使这成为可能,如 在这篇博客文章中概述

另一个选择是遵循本教程 详细介绍了使用Red Hat KVM的解决方案


2
2018-03-04 22:30