Baculaと複数のテープデバイスなど


7

Baculaは2つのテープデバイスを同時に使用しません。(TL; DRの#-#-#を検索)

少し背景かもしれません。

で動作する適切なバックアップソリューション(20TBを超えるバックアップは安くなく、簡単ではありません)を取得する過程で$dayjob、それを機能させるために多くのものを購入しました。

まず、Spectra Logic T50eオートチェンジャー、LTO5の40スロットがあり、そのロボットには、IBM HH5 Ultrium LTO5ドライブのペアがあり、FibreChannelアービトレーテッドループを介してバックアップサーバーに接続されています。

バックアップサーバーがあります。2x16コアAMD 62xx CPUと32GBのRAMを搭載したDell R715。美味しい。そのサーバーには2つのEmulex FCe-12000EカードとIntel X520-SRデュアルポート10GE NICがあります。

Commvault Backup(非NDMP)も販売されました。

ここが本当に複雑になるところです。

Spectra LogicとCommvaultはどちらも、ライブラリとソフトウェアをセットアップしたそれぞれのエンジニアを派遣しました。コントローラーが正常に動作している限り、Commvaultは正常に動作していました。DellサーバーにはUbuntu 12.04サーバーがあり、CommVaultのMediaAgentを実行し、BlueArc NASをNFSとしていくつかのマウントポイントにマウント/home/mntます。

NFSマウントポイントからバックアップすると、〜= 290GB/hrスループットが表示されました。48時間未満のバックアップウィンドウで20奇数TBを通過できることを考えると、これはCRAPです。BlueArcの定格最大値は700MB/s2460GB/hr)であり、テープデバイスの定格最大書き込み速度はドライブあたり140MB / sであるため、それは492GB/hr(または合計スループットの2倍)です。

したがって、次のステップはIOzoneでNFSパフォーマンスをベンチマークすることでした。それにより、(20スレッドを超える)壮大な書き込みパフォーマンスが得られ、1.5〜2.5 TB /時の書き込みのようですが、読み取りパフォーマンスは絶望的です。最大343 GB /時を超えることはできませんでした。それで、これ343GB/hrがNASの読み取りパフォーマンスの理論上の最大値であると仮定しましょう。理論的には、a) CommVault、およびb)その他のバックアップエージェントからそのパフォーマンスを引き出せるはずです。

そうではありません。Commvaultで200-250GB/hrスループットが得られるように思われるだけで、実験から、Baculaをインストールしてプレイの状態を確認しました。たとえば、BaculaがCommvaultよりも一貫して優れたパフォーマンスと速度を提供した場合、次のように言うことができます。"**$.$ Refunds Plz $.$**"

#-#-#

残念ながら、Baculaには別の問題が見つかりました。Commvaultは、1つのスレッドでマウントポイントの一部から読み取り、それをテープデバイスにストリーミングし、他のスレッドで他のディレクトリから読み取り、オートチェンジャの2番目のドライブに書き込むことは非常にうれしいようです。

私の人生では、Baculaが2つのテープドライブに同時にマウントして書き込むことはできません。

私が試したこと:

  • 設定 Maximum Concurrent Jobs = 20Directorで、ファイルおよびストレージデーモン
  • Prefer Mounted Volumes = noジョブ定義での設定
  • オートチェンジャリソースで複数のデバイスを設定する。

ドキュメンテーションは非常に単一ドライブ中心であるようであり、これを使ってロケットをハムスターに固定したような感じがします。Bacula構成の例の大部分は、DDS4ドライブ、手動テープスワッピング、およびFreeBSDまたはIRIXシステム用です。

これが不可能な場合でも、あまり気にしないことを追加する必要がありますが、驚かれることでしょう。私は基本的に、Baculaを高額なソフトウェアベンダーに固執する証拠として使用したいと考えています。

@KyleBrandtが最新のテープソリューションで同様のことを行ったことをどこかで読みました。

設定ファイル: bacula-dir.conf

#
# Default Bacula Director Configuration file

Director {                            # define myself
  Name = backuphost-1-dir
  DIRport = 9101                # where we listen for UA connections
  QueryFile = "/etc/bacula/scripts/query.sql"
  WorkingDirectory = "/var/lib/bacula"
  PidDirectory = "/var/run/bacula"
  Maximum Concurrent Jobs = 20
  Password = "yourekiddingright"         # Console password
  Messages = Daemon
  DirAddress = 0.0.0.0
  #DirAddress = 127.0.0.1
}

JobDefs {
  Name = "DefaultFileJob"
  Type = Backup
  Level = Incremental
  Client = backuphost-1-fd 
  FileSet = "Full Set"
  Schedule = "WeeklyCycle"
  Storage = File
  Messages = Standard
  Pool = File
  Priority = 10
  Write Bootstrap = "/var/lib/bacula/%c.bsr"
}

JobDefs {
  Name = "DefaultTapeJob"
  Type = Backup
  Level = Incremental
  Client = backuphost-1-fd
  FileSet = "Full Set"
  Schedule = "WeeklyCycle"
  Storage = "SpectraLogic"
  Messages = Standard
  Pool = AllTapes
  Priority = 10
  Write Bootstrap = "/var/lib/bacula/%c.bsr"
  Prefer Mounted Volumes = no

}

#
# Define the main nightly save backup job
#   By default, this job will back up to disk in /nonexistant/path/to/file/archive/dir
Job {
  Name = "BackupClient1"
  JobDefs = "DefaultFileJob"
}

Job {
  Name = "BackupThisVolume"
  JobDefs = "DefaultTapeJob"
  FileSet = "SpecialVolume"
}
#Job {
#  Name = "BackupClient2"
#  Client = backuphost-12-fd
#  JobDefs = "DefaultJob"
#}

# Backup the catalog database (after the nightly save)
Job {
  Name = "BackupCatalog"
  JobDefs = "DefaultFileJob"
  Level = Full
  FileSet="Catalog"
  Schedule = "WeeklyCycleAfterBackup"
  # This creates an ASCII copy of the catalog
  # Arguments to make_catalog_backup.pl are:
  #  make_catalog_backup.pl <catalog-name>
  RunBeforeJob = "/etc/bacula/scripts/make_catalog_backup.pl MyCatalog"
  # This deletes the copy of the catalog
  RunAfterJob  = "/etc/bacula/scripts/delete_catalog_backup"
  Write Bootstrap = "/var/lib/bacula/%n.bsr"
  Priority = 11                   # run after main backup
}

#
# Standard Restore template, to be changed by Console program
#  Only one such job is needed for all Jobs/Clients/Storage ...
#
Job {
  Name = "RestoreFiles"
  Type = Restore
  Client=backuphost-1-fd                 
  FileSet="Full Set"                  
  Storage = File                      
  Pool = Default
  Messages = Standard
  Where = /srv/bacula/restore
}

FileSet {
  Name = "SpecialVolume"
  Include {
    Options {
      signature = MD5
    }
  File = /mnt/SpecialVolume
  }
  Exclude {
    File = /var/lib/bacula
    File = /nonexistant/path/to/file/archive/dir
    File = /proc
    File = /tmp
    File = /.journal
    File = /.fsck
  }
}


# List of files to be backed up
FileSet {
  Name = "Full Set"
  Include {
    Options {
      signature = MD5
    }
    File = /usr/sbin
  }

  Exclude {
    File = /var/lib/bacula
    File = /nonexistant/path/to/file/archive/dir
    File = /proc
    File = /tmp
    File = /.journal
    File = /.fsck
  }
}

Schedule {
  Name = "WeeklyCycle"
  Run = Full 1st sun at 23:05
  Run = Differential 2nd-5th sun at 23:05
  Run = Incremental mon-sat at 23:05
}

# This schedule does the catalog. It starts after the WeeklyCycle
Schedule {
  Name = "WeeklyCycleAfterBackup"
  Run = Full sun-sat at 23:10
}

# This is the backup of the catalog
FileSet {
  Name = "Catalog"
  Include {
    Options {
      signature = MD5
    }
    File = "/var/lib/bacula/bacula.sql"
  }
}

# Client (File Services) to backup
Client {
  Name = backuphost-1-fd
  Address = localhost
  FDPort = 9102
  Catalog = MyCatalog
  Password = "surelyyourejoking"          # password for FileDaemon
  File Retention = 30 days            # 30 days
  Job Retention = 6 months            # six months
  AutoPrune = yes                     # Prune expired Jobs/Files
}

#
# Second Client (File Services) to backup
#  You should change Name, Address, and Password before using
#
#Client {
#  Name = backuphost-12-fd                
#  Address = localhost2
#  FDPort = 9102
#  Catalog = MyCatalog
#  Password = "i'mnotjokinganddontcallmeshirley"         # password for FileDaemon 2
#  File Retention = 30 days            # 30 days
#  Job Retention = 6 months            # six months
#  AutoPrune = yes                     # Prune expired Jobs/Files
#}


# Definition of file storage device
Storage {
  Name = File
# Do not use "localhost" here    
  Address = localhost                # N.B. Use a fully qualified name here
  SDPort = 9103
  Password = "lalalalala"
  Device = FileStorage
  Media Type = File
}

Storage {
  Name = "SpectraLogic"
  Address = localhost
  SDPort = 9103
  Password = "linkedinmakethebestpasswords"
  Device = Drive-1
  Device = Drive-2
  Media Type = LTO5
  Autochanger = yes
}



# Generic catalog service
Catalog {
  Name = MyCatalog
# Uncomment the following line if you want the dbi driver
# dbdriver = "dbi:sqlite3"; dbaddress = 127.0.0.1; dbport =  
  dbname = "bacula"; DB Address = ""; dbuser = "bacula"; dbpassword = ""
}

# Reasonable message delivery -- send most everything to email address
#  and to the console
Messages {
  Name = Standard

  mailcommand = "/usr/lib/bacula/bsmtp -h localhost -f \"\(Bacula\) \<%r\>\" -s \"Bacula: %t %e of %c %l\" %r"
  operatorcommand = "/usr/lib/bacula/bsmtp -h localhost -f \"\(Bacula\) \<%r\>\" -s \"Bacula: Intervention needed for %j\" %r"
  mail = root@localhost = all, !skipped            
  operator = root@localhost = mount
  console = all, !skipped, !saved
#
# WARNING! the following will create a file that you must cycle from
#          time to time as it will grow indefinitely. However, it will
#          also keep all your messages if they scroll off the console.
#
  append = "/var/lib/bacula/log" = all, !skipped
  catalog = all
}


#
# Message delivery for daemon messages (no job).
Messages {
  Name = Daemon
  mailcommand = "/usr/lib/bacula/bsmtp -h localhost -f \"\(Bacula\) \<%r\>\" -s \"Bacula daemon message\" %r"
  mail = root@localhost = all, !skipped            
  console = all, !skipped, !saved
  append = "/var/lib/bacula/log" = all, !skipped
}

# Default pool definition
Pool {
  Name = Default
  Pool Type = Backup
  Recycle = yes                       # Bacula can automatically recycle Volumes
  AutoPrune = yes                     # Prune expired volumes
  Volume Retention = 365 days         # one year
}

# File Pool definition
Pool {
  Name = File
  Pool Type = Backup
  Recycle = yes                       # Bacula can automatically recycle Volumes
  AutoPrune = yes                     # Prune expired volumes
  Volume Retention = 365 days         # one year
  Maximum Volume Bytes = 50G          # Limit Volume size to something reasonable
  Maximum Volumes = 100               # Limit number of Volumes in Pool
}

Pool {
  Name = AllTapes
  Pool Type = Backup
  Recycle = yes
  AutoPrune = yes                     # Prune expired volumes
  Volume Retention = 31 days         # one Moth
}

# Scratch pool definition
Pool {
  Name = Scratch
  Pool Type = Backup
}

#
# Restricted console used by tray-monitor to get the status of the director
#
Console {
  Name = backuphost-1-mon
  Password = "LastFMalsostorePasswordsLikeThis"
  CommandACL = status, .status
}

bacula-sd.conf

#
# Default Bacula Storage Daemon Configuration file
#

Storage {                             # definition of myself
  Name = backuphost-1-sd
  SDPort = 9103                  # Director's port      
  WorkingDirectory = "/var/lib/bacula"
  Pid Directory = "/var/run/bacula"
  Maximum Concurrent Jobs = 20
  SDAddress = 0.0.0.0
#  SDAddress = 127.0.0.1
}

#
# List Directors who are permitted to contact Storage daemon
#
Director {
  Name = backuphost-1-dir
  Password = "passwordslinplaintext"
}

#
# Restricted Director, used by tray-monitor to get the
#   status of the storage daemon
#
Director {
  Name = backuphost-1-mon
  Password = "totalinsecurityabound"
  Monitor = yes
}


Device {
  Name = FileStorage
  Media Type = File
  Archive Device = /srv/bacula/archive
  LabelMedia = yes;                   # lets Bacula label unlabeled media
  Random Access = Yes;
  AutomaticMount = yes;               # when device opened, read it
  RemovableMedia = no;
  AlwaysOpen = no;
}


Autochanger {
   Name = SpectraLogic
   Device = Drive-1
   Device = Drive-2
   Changer Command = "/etc/bacula/scripts/mtx-changer %c %o %S %a %d"
   Changer Device = /dev/sg4
}

Device {
   Name = Drive-1
   Drive Index = 0
   Archive Device = /dev/nst0
   Changer Device = /dev/sg4
   Media Type = LTO5
   AutoChanger = yes
   RemovableMedia = yes;
   AutomaticMount = yes;
   AlwaysOpen = yes;
   RandomAccess = no;
   LabelMedia = yes

}

Device {
   Name = Drive-2
   Drive Index = 1
   Archive Device = /dev/nst1
   Changer Device = /dev/sg4
   Media Type = LTO5
   AutoChanger = yes
   RemovableMedia = yes;
   AutomaticMount = yes;
   AlwaysOpen = yes;
   RandomAccess = no;
   LabelMedia = yes
}

# 
# Send all messages to the Director, 
# mount messages also are sent to the email address
#
Messages {
  Name = Standard
  director = backuphost-1-dir = all
}

bacula-fd.conf

#
# Default  Bacula File Daemon Configuration file
#

#
# List Directors who are permitted to contact this File daemon
#
Director {
  Name = backuphost-1-dir
  Password = "hahahahahaha"
}

#
# Restricted Director, used by tray-monitor to get the
#   status of the file daemon
#
Director {
  Name = backuphost-1-mon
  Password = "hohohohohho"
  Monitor = yes
}

#
# "Global" File daemon configuration specifications
#
FileDaemon {                          # this is me
  Name = backuphost-1-fd
  FDport = 9102                  # where we listen for the director
  WorkingDirectory = /var/lib/bacula
  Pid Directory = /var/run/bacula
  Maximum Concurrent Jobs = 20
  #FDAddress = 127.0.0.1
  FDAddress = 0.0.0.0
}

# Send all messages except skipped files back to Director
Messages {
  Name = Standard
  director = backuphost-1-dir = all, !skipped, !restored
}

明確にするために-オートチェンジャの両方のスロットに単一のジョブで書き込みをしようとしていますか?私はあなたがそれを行うことができるとは思わないが、私はやる ...その複数のジョブが別々のデバイスへの書き込みになると思う
voretaq7

1
Commvaultでは、1つのジョブで両方のスロットに書き込むことができます。他のソフトウェアが同じことをすることを期待するのは不公平ではないと思います。
トムO'Connor

1
あなたがやろうとしていることがパフォーマンスを証明することであるなら、なぜ2つのジョブを同時に異なるデバイスに対して実行するだけではなく、それはあなたが望むことを証明するでしょう。
EightBitTony

1
Commvaultが1つのジョブの下でログに記録するからといって、それを分離しないわけではありません。たとえば、Syncsort Backup Expressはこれをマウントポイントで実行し、通常、2つのテープにまたがる単一のジョブにまたがる前に、指定されたすべてのマウントポイントを(同じジョブ内の)別のスレッドに排出します。これにはいくつかの正当な理由があると思います...それらが何であるか私に尋ねないでください:)
SpacemanSpiff

1
私はこの質問をやめることを検討しています、そしてVTCはローカライズされました。
トムO'Connor

回答:


1

baculaでファイルセットを設定すると、文字どおりパススペックが1行ずつ読み取られ、次のようにバックアップされます。

エージェント内の異なるファイルパスを読み取るために2つのスレッドを作成しません。

@SpacemanSpiffが言ったように、これを実行したい場合は、バックアップするファイル仕様ごとに1つずつ、異なるジョブをセットアップする方法が先に進みます。


0

3つのヒントがあります。

  • 複数のストレージデーモンを使用します。同じマシンの異なるポートで複数のストレージデーモンを実行できます。
  • 重複除外にはベースジョブを使用します。時間とスペースを節約できます。
  • 圧縮を使用する-テープドライブが適切に圧縮を行う場合は、圧縮と比較して、bacula-fd圧縮を試す必要があります。これはクライアントで発生するため、CPU時間を少し犠牲にしても帯域幅が節約されます。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.