在 MS SQL Server 2014 AlwaysOn AG 设置中,我想为给定的可用性组安排备份作业。最终目标是让定期备份在同步的辅助节点上运行,最重要的是,不受特定辅助节点可用性的约束。
到目前为止我看到的方法是使用 SQL Server 调度程序,在所有正在运行的实例上设置相同的作业并将条件逻辑引入调度程序步骤以确定角色是主要角色还是次要角色。由于以下几个原因,这对我的用例不起作用:
- 我只想在辅助设备上运行一次计划操作,但我有多个辅助设备
- 我想确保它最终运行,不管是否还有任何辅助节点——如果没有辅助节点,它应该在主节点上运行
备份作业BACKUP LOG [...] WITH COMPRESSION, NOINIT, NOFORMAT
每 15 分钟运行一次。
现在,我正在考虑创建一个绑定到相应 AG 的故障转移集群角色的集群计划任务,但想知道是否有更简单和简化的方法来实现它。
这可以毫无问题地完成。请记住,您的系统应该被规范为能够承担 AlwaysOn 可用性组的同步机制的全部负载,加上所需的重做,再加上备份。您最不想看到的就是让您的 IO 系统不堪重负并导致中断或大量重做队列。这是假设它没有被主动用作可读的辅助 - 如果是,您将需要将其考虑在内并观察阻塞的重做线程。
有一个可用性组设置和一个系统功能可用于在您预期的指导方针内完成此操作。
第一个是设置,每个 AG,称为
AUTOMATED_BACKUP_PREFERENCE
有四个不同的选项。您所描述的那个被称为SECONDARY
将优先于主节点的任何辅助节点。选择的辅助节点由BACKUP_PRIORITY
每个副本设置,范围为 0-100,其中数字越大,它的权重就越大。如果次要副本的权重相同,则将选择在给定系统排序规则的情况下首先排序的副本。如果所有次要副本都失败,则将选择主要副本。等式的第二部分是系统函数,用于根据上一段中的值检查运行作业的副本是否是首选副本。该系统函数称为sys.fn_hadr_backup_is_preferred_replica()。给定一个数据库名称(AG 中的任何数据库),如果它不是首选副本,则返回值 0,如果是首选,则返回值 1。
在创建代理作业来完成此操作时,您需要将备份逻辑包装在
IF
条件中以检查首选副本。而已。将相同的代理作业放在所有副本上。请务必测试这是否真的是您想要和期望的。
我对Tivoli Storage FlashCopy Manager (TSM DP for SQL Server)有很好的经验。TSM DP 允许从可用性组中的任何节点进行备份。通过将备份和日志存储在一个 TSM 节点中来避免冗余备份。