我们目前正在将单个 Web 服务器迁移到两个负载平衡的 Web 服务器,并且面临一些我们不太清楚如何解决的挑战。其中之一是当前的单个服务器托管将内容写入磁盘的应用程序。服务器上运行的应用程序期望当某些内容写入磁盘时,它稍后会实际存在,因此,双服务器架构也必须满足这一前提。
双服务器设置是几个 VMWare 实例,以 Windows Server 2008 R2 作为客户操作系统。这些实例出厂时不共享任何类型的文件系统,因此只需将应用程序移过来,它们就会中断,因为一个实例会将一些内容写入另一个实例上不存在的文件系统。
因此,我们需要在两个虚拟服务器之间共享一个文件系统。我们的主机建议在 SAN 上创建一个网络共享,并在每个虚拟机上单独映射此共享。由于 NTFS 权限等原因,这种方法效果不佳,因为共享需要由多个独立的 Web 应用程序访问,这些应用程序甚至不在同一个应用程序池中。
唯一可行的解决方案是将每个 Web 应用程序的“身份”硬编码到其web.config
文件中,但这意味着以明文形式保存密码,这让我感到很不舒服。
由于服务器是虚拟的,我在想:是否有可能以某种方式使 NAS 区域在客户操作系统中可用作物理磁盘?由于 VMWare 完全控制虚拟硬件,您可能会认为它能够在虚拟机中“伪造”本地硬盘,而这实际上是 NAS 上的一个文件夹,但到目前为止,我还没有找到任何说明如何以及是否可行的信息。
D:
因此,我不得不问一下出色的 Server Fault 社区:NAS 上的文件夹是否可以在两个虚拟机中用作物理驱动器(典型)?
答案1
简而言之,您尝试执行的操作将无法正常工作,我不确定 VMWare 是否可以使用共享文件夹作为磁盘,但我知道的是,2 个虚拟服务器无法共享同一个磁盘并同时访问它,原因与几乎没有其他应用程序可以做到的原因相同,两台机器无法同时写入同一个磁盘。基本上,当您尝试启动第二台服务器时,VMWare 会抛出一个错误,告诉您磁盘文件已被锁定。
答案2
您可以做的是将 SAN 用作共享 SCSI 驱动器,这样驱动器在两台机器上都显示为 D:,但只有其中一台可以同时使用它。这样您无法实现负载平衡,但可以获得冗余 - 如果另一台虚拟机发生故障,您可以切换到另一台虚拟机,它将接管驱动器并继续运行。
如前所述,同一个存储不能在两个地方主动使用。这就是为什么您通常会有一个数据库后端来处理此类应用程序的数据,以便您可以让多个客户端同时访问它。
答案3
您可以拥有一个后端存储服务器(或使用其中一个 Web 服务器),并通过 NFS(2008R2 支持此功能)将数据目录共享给其他服务器。这应该可以解决您的并发问题,并使存储看起来是服务器本地的。
如果您的 NAS 支持 NFS,您应该能够使用它来执行此操作。