同じアプリケーションの複数の環境が異なるサーバーにあります。ディレクトリ構造は非常に似ているので、それらすべてに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"
...
}
ソリューションを数日使用した後、それは機能しているように見えるので、ここに行きます:
例まで、次の仕事があるとしましょう。
次に、-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\""
}
}
ファイルセット内のコマンドの実行の詳細については、 ドキュメント を参照してください。
完全バックアップと増分バックアップは正常に実行されています。
私はあなたがこれを行うことができるとは思わない-Baculaの設定ファイルは設定ファイルであり、プログラミング言語やシェルではありません。
実用的なオプションは次のとおりです。
各マシンで同一のディレクトリ構造を使用
これはBaculaの観点から最も実用的な解決策です。 Bacula構成ファイルでの追加作業は最小限で済み、アプリケーションが「同一」である場合は最も理にかなっています。
マシンごとにファイルセットを使用
これは、ほぼ同一のファイルセットの束を維持しているという点で、オプション(1)よりも厄介です。ファイルセットを自動的に作成できる他のプロセスでBacula構成を生成する場合が最も実用的です。
すべてのディレクトリを一覧表示する1つのファイルセットを使用
これは機能しますが、新しいマシン(したがって新しいenv#
ディレクトリ)を追加するたびに、グローバルファイルセットが変更され、完全バックアップがトリガーされます。
ClientRunBeforeJob
ディレクティブを使用して、ファイルを均一な場所に配置します
これは少し汚れていますが、機能します-バックアップを実行する前に、Bacula rsync
アプリ環境を別の場所に移動します。 (Linuxシステムを使用している場合は、mount --bind
を使用して、他に影響を与えることなくアプリを均一な場所に配置することもできます。)
このアプローチの主な欠点は、ストレージ要件が2倍になることです。つまり、アプリの本番コピーが実行され、バックアップを取るためにBaculaが作成するシャドウコピーがあります。