我们在 Windows Server 2016 上的 SQL 2017 中使用 AlwaysOn 可用性组,该组由我们主站点上的两台服务器和远程站点上的一台 DR 服务器组成。
我们最近进行了一次内部 IT 灾难恢复测试作为概念验证,在此期间公司其他人员继续使用主站点。我们隔离了远程 DR 网络以模拟主站点的灾难性故障,并测试了 DR 站点以确保我们可以启动并成功使用它。到目前为止,测试进行得非常顺利,但是在将事情恢复正常时我们遇到了一个重大问题。
由于测试期间主站点仍在使用中,我主要关心的是确保实时数据库不会被测试期间也使用的 DR 数据库损坏,所以我在打开 VPN 之前删除了 DR 数据库我希望主站点开始自动播种回 DR 站点。但是,因为我必须在 DR 站点上强制进行故障转移,所以在重新建立网络链接后,主站点检测到 DR 服务器已使用强制仲裁开关 (/fq) 启动,它基本上关闭了两个实时服务器。我无法强制故障转移回 Live 服务器,不得不重建集群。
问题:如何防止 Live 服务器检测到在 DR 站点上执行了强制故障转移?
我确实考虑在打开网络链接之前关闭 DR 服务器,但我仍然不确定当它联机时会发生什么。在任何情况下,远程数据库都需要从 Live 重新播种。
快照
假设使用虚拟机,请在源站点断开后对 DR 服务器进行快照。我可能会建议先关闭服务器,以便快照处于良好、干净的状态。完成 DR 测试后,关闭 DR 服务器,然后将其恢复为快照。这既简单又便宜。唯一的缺点是源站点在测试期间不受保护,并且由于快照的原因,DR 节点可能会慢一些,具体取决于您的存储基础架构。哦,您的主数据库必须有足够的磁盘空间来排队数据库复制,直到站点重新连接。
使用克隆
假设您正在使用虚拟机并且有足够的磁盘空间,克隆 DR 节点,关闭原始 DR 节点,然后对克隆进行测试。完成后,删除克隆并使原始 DR 节点联机。这解决了两个问题:1)您不必重新同步整个数据库,2)您不必逐出/加入集群节点。
这种方法的缺点是在测试期间,主服务器必须对所有数据进行排队,因此事务日志可能会变得非常大。在您执行的测试中,这种情况正在发生,因此您显然有足够的磁盘空间来存储日志,这不是问题。
使用更多克隆
一些组织在 DR 站点创建了一个“气泡”网络,无法与生产 DR 网络通信。然后克隆基础设施服务器(域控制器、DNS 等),并在气泡中使克隆上线。然后将需要参与 DR 测试的其他服务器克隆到气泡中。这允许您在 DR 测试期间保持真实的 DR 服务器在线和正常运行。除了真正的故障排除之外,这是最安全的,因为如果主站点在 DR 测试开始 5 小时后被破坏会发生什么?如果您断开了站点的连接,您将丢失 5 小时的数据。
当然,这样做的缺点是它可能成为一项艰巨的任务,需要大量的员工时间、硬件等。
Evict and Rejoin
正如上面评论中提到的,您可以在 DR 站点重新连接之前将 DR 节点从集群中逐出,然后将其重新加入集群并将节点添加回可用性组。这相当简单并且需要最少的硬件,但它确实有在 DR 测试期间使您的主站点不受保护的缺点。