Bacula 使用变量重用FileSet资源

Bacula 使用变量重用FileSet资源

我在不同的服务器上有多个相同应用程序的环境。目录结构非常相似,所以我想为它们全部使用一个 FileSet。例如:

- server1: /opt/env1/app/logs
- server1: /opt/env1/app/bin
- server1: /opt/env1/app/temp
- server1: /opt/env1/app/lib

- server2: /opt/env2/app/logs
- server2: /opt/env2/app/bin
- server2: /opt/env2/app/temp
- server2: /opt/env2/app/lib

- server2: /opt/env3/app/logs
- server2: /opt/env3/app/bin
- server2: /opt/env3/app/temp
- server2: /opt/env3/app/lib

我想要类似的东西:

FileSet {
  Name = "APP"
  Include {
    Options {
      signature = MD5
      Compression = GZIP
    }
    File = "/opt/${env}/app"
  }
  Exclude {
    File = "/opt/${env}/app/logs"
    File = "/opt/${env}/app/temp"
  }
}

然后:

Job {
  Name = "JOBENV1"
  #somehow set env variable as env1
  FileSet="APP"
  ...
}

Job {
  Name = "JOBENV2"
  #somehow set env variable as env2
  FileSet="APP"
  ...
}

Job {
  Name = "JOBENV3"
  #somehow set env variable as env3
  FileSet="APP"
  ...
}

答案1

经过几天的解决方案,它似乎起作用了,因此如下所示:

按照这个例子,假设我们有以下工作:

  • 服务器1-环境1-作业
  • 服务器2-环境2-作业
  • 服务器2-环境3-作业

然后假设 --job 作为约定,文件集应该如下所示:

FileSet {
  Name = "someapp-fileset"
  Include {
    Options {
      signature = MD5
      Compression = GZIP
    }
    File = "| bash -c \"echo %n | awk -F '-' '{print \$2}' | xargs -I ARG echo /opt/ARG\""
  }
  Exclude {
     File = "| bash -c \"echo %n | awk -F '-' '{print \$2}' | xargs -I ARG echo /opt/ARG/temp\""
     File = "| bash -c \"echo %n | awk -F '-' '{print \$2}' | xargs -I ARG echo /opt/ARG/logs\""
  }
}

有关文件集中命令执行的更多信息,请查看文档

完整备份和增量备份运行正常。

答案2

我不相信你能做到这一点——Bacula 的配置文件是配置文件,而不是编程语言或 shell。

您实际的选择是:

  1. 在每台机器上使用相同的目录结构
    从 Bacula 的角度来看,这是最实用的解决方案。它只需要在 Bacula 配置文件中进行最少的额外工作,并且如果您的应用程序“相同”,那么这是最有意义的。

  2. 每台机器使用一个文件集
    这比选项 (1) 更烦人,因为你现在要维护一堆几乎相同的文件集。如果你使用其他可以自动创建文件集的进程来生成 Bacula 配置,那么这是最实用的。

  3. 使用一个文件集列出所有目录
    这是可行的,但是每当您添加新机器(从而添加新env#目录)时,您都将更改全局文件集并触发完整备份。

  4. 使用ClientRunBeforeJob指令将文件放在统一的位置
    这有点不妥,但确实有效——rsync在备份之前,让 Bacula 将应用程序环境移到另一个位置。(如果您使用的是 Linux 系统,您也可以将mount --bind应用程序放在统一的位置,而不会影响其他任何内容。)
    这种方法的主要缺点是您需要双倍的存储需求:您有应用程序的运行生产副本,以及 Bacula 为进行备份而制作的影子副本。

相关内容