Bacula et plusieurs périphériques à bande, etc.


7

Bacula n'utilisera pas 2 périphériques de bande simultanément. (Recherchez # - # - # pour le TL; DR)

Un peu de fond, peut-être.

En train d'essayer d'obtenir une solution de sauvegarde qui fonctionne correctement (sauvegarder> 20 To n'est pas bon marché ou facile) $dayjob, nous avons acheté un tas de choses pour le faire fonctionner.

Tout d'abord, il y a une librairie Spectra Logic T50e, 40 emplacements de qualité LTO5, et ce robot a une paire de disques IBM HH5 Ultrium LTO5, connectés via une boucle arbitrée FibreChannel à notre serveur de sauvegarde.

Il y a le serveur de sauvegarde .. Un Dell R715 avec 2 processeurs AMD 62xx à 16 cœurs et 32 ​​Go de RAM. Délicieux. Ce serveur possède 2 cartes Emulex FCe-12000E et une carte réseau 10GE à double port Intel X520-SR.

Nous avons également été vendus Commvault Backup (non-NDMP).

Voici où cela devient vraiment compliqué.

Spectra Logic et Commvault ont tous deux envoyé des ingénieurs respectifs, qui ont configuré la bibliothèque et le logiciel. Commvault fonctionnait bien, dans la mesure où le contrôleur fonctionnait bien. Le serveur Dell a un serveur Ubuntu 12.04, et exécute le MediaAgent pour CommVault, et monte notre NAS BlueArc en tant que NFS sur quelques points de montage, comme /home, et quelques éléments /mnt.

Lors de la sauvegarde à partir des points de montage NFS, nous voyions ~ = 290GB/hrdébit. C'est CRAP, étant donné que nous avons une vingtaine de To à traverser, dans une fenêtre de sauvegarde <48 heures. Le maximum nominal sur le BlueArc est 700MB/s( 2460GB/hr), la vitesse maximale d'écriture nominale sur les unités de bande est de 140 Mo / s, par lecteur, c'est-à-dire 492GB/hr(ou doublez-le, pour le débit total).

Ainsi, la prochaine étape consistait à comparer les performances NFS avec IOzone, et il s'avère que nous obtenons des performances d'écriture épiques (sur> 20 threads), et c'est comme une écriture de 1,5 à 2,5 To / h, mais les performances de lecture sont désespérées. Je n'ai jamais pu dépasser un maximum de 343 Go / h. Supposons donc que le 343GB/hrest un maximum théorique pour les performances de lecture sur le NAS, alors nous devrions en théorie pouvoir obtenir ces performances a) CommVault, et b) tout autre agent de sauvegarde.

Pas le cas. Commvault semble ne me donner que du 200-250GB/hrdébit, et par expérimentation, j'ai installé Bacula pour voir où en est la situation. Si, par exemple, Bacula offrait des performances et des vitesses toujours meilleures que Commvault, alors nous pourrions dire"**$.$ Refunds Plz $.$**"

# - # - #

Hélas, j'ai trouvé un problème différent avec Bacula. Commvault semble assez heureux de lire à partir d'une partie du point de montage avec un thread, et de le diffuser sur un périphérique de bande, tout en lisant à partir d'un autre répertoire avec l'autre thread et en écrivant sur le 2ème lecteur de la librairie.

Pour ma vie, je ne peux pas faire monter et écrire Bacula sur deux lecteurs de bande simultanément .

Ce que j'ai essayé:

  • Configuration des Maximum Concurrent Jobs = 20démons Director, File et Storage
  • Réglage Prefer Mounted Volumes = nodans la définition du travail
  • Définition de plusieurs périphériques dans la ressource de librairie.

La documentation semble être très centrée sur un seul lecteur, et nous avons un peu l'impression d'avoir attaché une fusée à un hamster, avec celle-ci. La majorité des exemples de configurations Bacula sont pour les lecteurs DDS4, l'échange de bande manuel et les systèmes FreeBSD ou IRIX.

Je devrais probablement ajouter que cela ne me dérange pas trop si ce n'est pas possible, mais je serais surpris. Je veux essentiellement utiliser Bacula comme preuve pour le coller aux fournisseurs de logiciels qu'ils sont trop chers;)

J'ai lu quelque part que @KyleBrandt a fait quelque chose de similaire avec une solution de bande moderne ..

Fichiers de configuration: 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
}

Pour clarifier - essayez-vous d'avoir une seule tâche d'écriture sur les deux emplacements de la librairie? Je ne pense pas que vous pouvez le faire, mais je ne pense que plusieurs emplois écriront à des dispositifs séparés ...
voretaq7

1
Commvault permet à un seul travail d'écrire sur les deux emplacements. Je ne pense pas qu'il soit trop injuste de s'attendre à ce que d'autres logiciels fassent de même.
Tom O'Connor

1
Si ce que vous essayez de faire est de prouver les performances, pourquoi ne pas simplement exécuter 2 tâches en même temps sur différents appareils, cela prouvera ce que vous voulez.
EightBitTony

1
Ce n'est pas parce que Commvault le connecte sous un seul travail que cela ne le sépare pas. Par exemple, Syncsort backup express le fait par point de montage et épuisera généralement tous les points de montage donnés sur des threads séparés (dans le même travail) avant qu'il ne s'étende sur un seul travail sur deux bandes. Je pense qu'il y a de bonnes raisons à cela ... ne me demandez pas ce qu'elles sont :)
SpacemanSpiff

1
J'envisage d'abandonner cette question et VTC trop localisé.
Tom O'Connor

Réponses:


1

Lorsque vous configurez un ensemble de fichiers dans bacula, il lit littéralement le pathspec ligne par ligne et sauvegarde comme ceci.

Il ne créera pas deux threads pour lire les différents chemins d'accès aux fichiers dans l'agent.

Comme l'a dit @SpacemanSpiff, si vous vouliez le faire, la voie à suivre serait de configurer différents travaux, un pour chaque spécification de fichier que vous vouliez sauvegarder.


0

J'ai trois conseils pour vous:

  • Utilisez plusieurs démons de stockage. Vous pouvez exécuter plusieurs démons de stockage sur différents ports sur la même machine.
  • Utilisez les travaux de base pour la déduplication. Économise du temps et de l'espace.
  • Utilisez la compression - si vos lecteurs de bande effectuent une compression, c'est bien, mais vous devrez peut-être les comparer et expérimenter la compression bacula-fd. Cela se produit sur le client et, par conséquent, économise également de la bande passante pour un petit sacrifice de temps CPU.
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.