我们正在 Azure VM 中构建一个新的 SQL Server 2017 永远在线的集群。VM的数据盘布局如下
TempDb : 2 Azure Disk Read Cache
TempDBLog : 1 Azure Disk No Cache
UserDB : 3 Azure Disk Read Cache
UserDBLog : 2 Azure Disk No Cache
我的计划是创建一个多存储池,即带有 2 个 TempDB 磁盘的 TempDB 存储池,带有 3 个 User db Azure 磁盘的 UserDB 存储池。
但是,根据Microsoft关于 Azure VM 中 SQL Server 的文档:
如果您使用磁盘条带化技术,例如存储空间,您可以通过两个池来实现最佳性能,一个用于日志文件,另一个用于数据文件。但是,如果您计划使用 SQL Server 故障转移群集实例 (FCI),则必须配置一个池。
这适用于 Always-On 还是仅适用于共享存储 FCI。请指导我,请分享好的文章/文档以供参考。
谢谢
Azure 中的 FCI 将存储空间直接用于磁盘复制,我认为这是此要求的来源。对于 AG,您可以使用多个单独的磁盘或池。您应该确保相同的逻辑卷和路径在每个节点上可用,否则如果您在主节点上执行文件和文件组操作,AG 复制将停止。例如,如果您将文件 'g:\sql\data\foo.ndf' 添加到数据库,则该路径需要存在于所有其他集群节点上才能复制该更改。请参阅对失败的添加文件操作进行故障排除(Always On 可用性组)。
此外,无论您将 Tempdb 数据文件放在哪里,也将 Tempdb 日志放在那里。拆分出 tempdb 的日志是矫枉过正,因为它很可能没有得到充分利用,而且它的 IO 访问模式更像是 tembdb 数据文件而不是用户数据库日志文件。特别是事务提交不会刷新 tempdb 日志。
个人经验,没有链接,但我过去一直为客户构建这些链接。
您的磁盘性能随池中使用的磁盘数量而变化(最多 4 个,然后额外的磁盘并不能真正提高性能)。我不建议在一个池中使用少于 4 个磁盘,并将它们布置为 4xData、4xLog,并将 TempDB 放在 VM 的本地 SSD(驱动器 D:?)上(如果它对您可用)。否则,将其放在另一组 4 个磁盘上。TempDB 在服务器启动时重建,因此临时存储对他们来说是可以的。
您只需为存储的数据量付费(使用标准磁盘),因此获得 VM 允许的尽可能多的磁盘。这通常是选择 VM 的驱动因素,让足够的磁盘连接到它。
您需要将 VM 置于 FCI 中,这样 AG 才能工作,但由于它们不会共享磁盘,因此该规则不适用于您。这也是设置过程中的一个棘手时刻,因为您必须记住取消选中添加共享存储按钮。
最后的建议是确保您的见证与您的 SQL 服务器位于不同的资源组中。理想情况下使用云见证选项。
编辑:当 Azure 出现问题时,它更有可能一次发生在整个机架或机架子集上。所以很有可能你的primary和witness会同时宕机。辅助节点将无法自动进行故障转移,因为它永远不会获得法定人数。