web-dev-qa-db-ja.com

Baculaは変数を使用してFileSetリソースを再利用します

同じアプリケーションの複数の環境が異なるサーバーにあります。ディレクトリ構造は非常に似ているので、それらすべてに1つの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"
  ...
}
3
ghm1014

ソリューションを数日使用した後、それは機能しているように見えるので、ここに行きます:

例まで、次の仕事があるとしましょう。

  • server1-env1-job
  • server2-env2-job
  • server2-env3-job

次に、-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
ghm1014

私はあなたがこれを行うことができるとは思わない-Baculaの設定ファイルは設定ファイルであり、プログラミング言語やシェルではありません。

実用的なオプションは次のとおりです。

  1. 各マシンで同一のディレクトリ構造を使用
    これはBaculaの観点から最も実用的な解決策です。 Bacula構成ファイルでの追加作業は最小限で済み、アプリケーションが「同一」である場合は最も理にかなっています。

  2. マシンごとにファイルセットを使用
    これは、ほぼ同一のファイルセットの束を維持しているという点で、オプション(1)よりも厄介です。ファイルセットを自動的に作成できる他のプロセスでBacula構成を生成する場合が最も実用的です。

  3. すべてのディレクトリを一覧表示する1つのファイルセットを使用
    これは機能しますが、新しいマシン(したがって新しいenv#ディレクトリ)を追加するたびに、グローバルファイルセットが変更され、完全バックアップがトリガーされます。

  4. ClientRunBeforeJobディレクティブを使用して、ファイルを均一な場所に配置します
    これは少し汚れていますが、機能します-バックアップを実行する前に、Bacula rsyncアプリ環境を別の場所に移動します。 (Linuxシステムを使用している場合は、mount --bindを使用して、他に影響を与えることなくアプリを均一な場所に配置することもできます。)
    このアプローチの主な欠点は、ストレージ要件が2倍になることです。つまり、アプリの本番コピーが実行され、バックアップを取るためにBaculaが作成するシャドウコピーがあります。

1
voretaq7