Bacula & Multiple Tape Devices und so weiter

7

Bacula verwendet nicht 2 Bandgeräte gleichzeitig. (Suche nach # - # - # für die TL; DR)

Ein kleiner Hintergrund vielleicht.

Während $dayjobwir versuchten, eine anständige funktionierende Backup-Lösung zu finden (Backups von> 20 TB sind nicht billig oder einfach) , kauften wir eine Reihe von Dingen, damit es funktioniert.

Erstens gibt es einen Spectra Logic T50e-Autowechsler, 40 Steckplätze mit LTO5-Qualität und diesen Roboter mit zwei IBM HH5 Ultrium LTO5-Laufwerken, die über FibreChannel Arbitrated Loop mit unserem Backup-Server verbunden sind.

Es gibt den Backup-Server. Ein Dell R715 mit 2x 16-Kern-AMD 62xx-CPUs und 32 GB RAM. Lecker. Dieser Server verfügt über 2 Emulex FCe-12000E-Karten und eine Intel X520-SR 10GE-Netzwerkkarte mit zwei Ports.

Wir wurden auch Commvault Backup (Nicht-NDMP) verkauft.

Hier wird es wirklich kompliziert.

Spectra Logic und Commvault haben beide entsprechende Ingenieure geschickt, die die Bibliothek und die Software eingerichtet haben. Commvault lief einwandfrei, sofern der Controller einwandfrei funktionierte. Der Dell-Server verfügt über einen Ubuntu 12.04-Server, auf dem MediaAgent for CommVault ausgeführt wird, und stellt unseren BlueArc NAS als NFS an einigen Mountpunkten wie /homeund einigen anderen Dingen bereit /mnt.

Beim Sichern von den NFS-Mountpunkten wurde ~ = 290GB/hrDurchsatz festgestellt. Das ist CRAP, wenn man bedenkt, dass wir in einem Backup-Fenster von <48 Stunden 20 TB haben, um durchzukommen. Das Nennmaximum auf dem BlueArc ist 700MB/s( 2460GB/hr), die maximale Nennschreibgeschwindigkeit auf den Bandgeräten beträgt 140 MB / s pro Laufwerk. Das ist also 492GB/hr(oder das Doppelte für den Gesamtdurchsatz).

Der nächste Schritt bestand also darin, die NFS-Leistung mit IOzone zu vergleichen, und es stellt sich heraus, dass wir eine epische Schreibleistung (über> 20 Threads) erzielen. Dies entspricht einer Schreibleistung von 1,5 bis 2,5 TB / h, aber die Leseleistung ist hoffnungslos. Ich konnte nie höher als maximal 343 GB / h werden. Nehmen wir also an, dass dies 343GB/hrein theoretisches Maximum für die Leseleistung auf dem NAS ist, dann sollten wir theoretisch in der Lage sein, diese Leistung aus a) CommVault und b) jedem anderen Sicherungsagenten herauszuholen .

Nicht der Fall. Commvault scheint mir immer nur 200-250GB/hrDurchsatz zu geben, und aus Experimenten habe ich Bacula installiert, um zu sehen, wie der Stand der Dinge dort ist. Wenn Bacula zum Beispiel durchweg bessere Leistung und Geschwindigkeit als Commvault liefert, können wir das sagen"**$.$ Refunds Plz $.$**"

# - # - #

Leider habe ich ein anderes Problem mit Bacula gefunden. Commvault scheint ziemlich glücklich zu sein, mit einem Thread von einem Teil des Mountpoints zu lesen und diesen auf ein Bandgerät zu streamen, während er mit dem anderen Thread aus einem anderen Verzeichnis liest und auf das zweite Laufwerk im automatischen Wechsler schreibt.

Ich kann Bacula für mein ganzes Leben nicht dazu bringen, zwei Bandlaufwerke gleichzeitig zu mounten und zu schreiben .

Dinge, die ich versucht habe:

  • Einstellung Maximum Concurrent Jobs = 20in den Director-, Datei- und Speicher-Daemons
  • Einstellung Prefer Mounted Volumes = noin der Jobdefinition
  • Festlegen mehrerer Geräte in der Autochanger-Ressource.

Die Dokumentation scheint sehr auf ein einziges Laufwerk ausgerichtet zu sein, und wir haben das Gefühl, mit diesem eine Rakete an einen Hamster geschnallt zu haben. Die meisten Bacula-Beispielkonfigurationen beziehen sich auf DDS4-Laufwerke, manuelles Bandaustauschen und FreeBSD- oder IRIX-Systeme.

Ich sollte wahrscheinlich hinzufügen, dass es mich nicht sonderlich stört, wenn dies nicht möglich ist, aber ich wäre überrascht. Ich möchte Bacula grundsätzlich als Beweis dafür verwenden, dass die Softwareanbieter überteuert sind;)

Ich habe irgendwo gelesen, dass @KyleBrandt mit einer modernen Bandlösung etwas Ähnliches gemacht hat.

Konfigurationsdateien: 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
}
Tom O'Connor
quelle
Zur Verdeutlichung: Versuchen Sie, einen einzelnen Job in beide Steckplätze des automatischen Wechslers zu schreiben? Ich glaube nicht , dass Sie das tun können, aber ich tun denken , dass mehrere Aufträge separate Geräte schreiben werden ...
voretaq7
1
Mit Commvault kann ein einzelner Job in beide Slots schreiben. Ich denke nicht, dass es zu unfair ist, zu erwarten, dass andere Software dasselbe tut.
Tom O'Connor
1
Wenn Sie versuchen, die Leistung zu beweisen, warum nicht einfach zwei Jobs gleichzeitig auf verschiedenen Geräten ausführen, wird dies beweisen, was Sie wollen.
EightBitTony
1
Nur weil Commvault es unter einem Job protokolliert, heißt das nicht, dass es nicht getrennt wird. Beispielsweise führt Syncsort Backup Express dies über Mountpoint aus und erschöpft normalerweise alle angegebenen Mountpunkte für separate Threads (im selben Job), bevor ein einzelner Job über zwei Bänder verteilt wird. Ich denke, es gibt einige gute Gründe dafür ... frag mich nicht, was sie sind :)
SpacemanSpiff
1
Ich denke darüber nach, diese Frage aufzugeben und VTC Too Localized.
Tom O'Connor

Antworten:

1

Wenn Sie eine Dateigruppe in Bacula einrichten, wird die Pfadspezifikation buchstäblich Zeile für Zeile gelesen und wie folgt gesichert.

Es werden keine zwei Threads erstellt, um die verschiedenen Dateipfade im Agenten zu lesen.

Wie @SpacemanSpiff sagte, besteht der Weg in die Zukunft darin, verschiedene Jobs einzurichten, einen für jede Dateispezifikation, die Sie sichern möchten.

Matthew Ife
quelle
0

Ich habe drei Tipps für Sie:

  • Verwenden Sie mehrere Speicherdämonen. Sie können mehrere Speicherdämonen an verschiedenen Ports auf demselben Computer ausführen.
  • Verwenden Sie Basisjobs zum Deduplizieren. Spart Zeit und Raum.
  • Komprimierung verwenden - wenn Ihre Bandlaufwerke eine gute und gute Komprimierung durchführen, Sie diese jedoch möglicherweise abwägen und mit der Bacula-FD-Komprimierung experimentieren müssen. Dies geschieht auf dem Client und spart folglich auch Bandbreite für einen kleinen CPU-Zeitverlust.
Nearora
quelle