我们正处于为我们的 ERP 和 CRM 应用程序(第三方)规划新数据库环境的早期阶段。目标是将 Always On 可用性组用于 HA、滚动补丁、只读辅助等。我们希望使用自动故障转移,而客户端应用程序不需要知道 HA。
我们有一台规格相当大的物理服务器。它将运行两个 SQL Server 实例:一个用于需要 SQL Server 2016 的 ERP 应用程序,另一个用于 2017 年更适合的 CRM 应用程序(这也允许我们授予系统管理员权限以获取 CRM 应用程序供应商的支持不影响 ERP 应用程序)。
我们还有一个相当成熟的 ESX 基础架构,并希望使用一些 VM 作为故障转移节点。这些不会像主服务器那样过时地构建,但我们将确保主服务器上的短时间中断或维护窗口具有可接受的性能。
我最初的想法是拥有两台故障转移虚拟机:一台用于 ERP 实例,一台用于 CRM。单个服务器似乎不能成为多个 Windows 故障转移集群的成员,即我无法使用 ERP VM 和物理服务器创建 ERP 集群,再加上具有 CRM VM 和同一物理服务器的 CRM 集群.
如果我改为构建一个三节点集群,并控制每个实例可以在哪些节点上运行,我是否会引起任何不愉快的副作用?我主要担心的是,如果我们开始向集群中添加更多的数据库服务器,仲裁投票可能会变得有点奇怪,并且即使可以托管该实例的所有节点仍在运行,我们也可能让一个实例意外停机。这甚至是一种风险,是否有合理的方法来减轻它?是否存在足够多的并发症,以至于我应该使用一个更强大的 VM 来处理这两个实例?
长话短说:
如果构建一个实例 1 只能在服务器 A 和 B 上运行,而实例 2 只能在服务器 A 和 C 上运行的三节点集群,我会搬起石头砸自己的脚吗?我应该只构建一个双节点集群(加上仲裁成员)并确保服务器 B 可以处理两个 SQL Server 实例吗?
我看不出有任何理由说明您会遇到任何问题。只需确保向集群添加文件共享或磁盘见证,因为这将确保仲裁中没有“怪异”。只要您正确设置了 AG,我就看不出有任何理由不使用您建议的方法。我能想到的唯一不利因素是,这将是一个额外的环境来管理和维护,但您已经在主服务器上拥有 2 个实例。您将使用 VM 进行只读连接吗?
鉴于你是
和
这个:
这真的不是一个好主意。共享一个 Windows VM 和一个更大的集群会产生不必要的复杂性和风险,基本上没有任何有用的交换。
只需为两个实例中的每一个创建单独的 VM,并根据需要在同一 ESX 主机上运行它们。
对于每一个,您都可以添加一个带有 AG 副本的辅助 VM 以实现 HA。