Bacula e più dispositivi a nastro, e così via


7

Bacula non utilizzerà contemporaneamente 2 dispositivi a nastro. (Cerca # - # - # per TL; DR)

Un piccolo sfondo, forse.

Nel tentativo di ottenere una soluzione di backup funzionante decente (il backup> 20 TB non è economico o facile) $dayjob, abbiamo acquistato un sacco di cose per farlo funzionare.

In primo luogo, c'è un autochanger Spectra Logic T50e, 40 slot di qualità LTO5 e quel robot ha una coppia di unità IBM HH5 Ultrium LTO5, collegate tramite FibreChannel Arbitrated Loop al nostro server di backup.

C'è il server di backup .. Un Dell R715 con 2x CPU AMD 62xx a 16 core e 32 GB di RAM. Yummy. Quel server ha 2 schede Emulex FCe-12000E e una scheda di rete 10GE Intel X520-SR a doppia porta.

Siamo stati anche venduti Commvault Backup (non NDMP).

Ecco dove diventa davvero complicato.

Spectra Logic e Commvault hanno entrambi inviato i rispettivi ingegneri, che hanno installato la libreria e il software. Commvault funzionava bene, nella misura in cui il controller funzionava bene. Il server Dell ha Ubuntu 12.04 server, esegue MediaAgent per CommVault e monta il nostro NAS BlueArc come NFS su alcuni punti di montaggio, come /homee alcuni elementi /mnt.

Durante il backup dai mountpoint NFS, stavamo vedendo ~ = 290GB/hrthroughput. Questo è CRAP, considerando che abbiamo 20 TB dispari da superare, in una finestra di backup <48 ore. Il massimo nominale su BlueArc è 700MB/s( 2460GB/hr), la velocità massima di scrittura nominale sui dispositivi a nastro è 140 MB / s, per unità, quindi è 492GB/hr(o raddoppia, per il throughput totale).

Quindi, il passo successivo è stato il benchmark delle prestazioni NFS con IOzone, e si è scoperto che otteniamo prestazioni di scrittura epiche (su> 20 thread), ed è come 1,5-2,5 TB / h di scrittura, ma le prestazioni di lettura stanno perdendo la speranza. Non potrei mai superare i 343GB / h al massimo. Supponiamo quindi che 343GB/hrsia un massimo teorico per le prestazioni di lettura sul NAS, quindi in teoria dovremmo essere in grado di ottenere tali prestazioni da a) CommVault eb) qualsiasi altro agente di backup.

Non è il caso. Commvault sembra darmi solo un 200-250GB/hrrendimento e, per sperimentazione, ho installato Bacula per vedere quale sia lo stato di avanzamento. Se, ad esempio, Bacula offrisse prestazioni e velocità costantemente migliori rispetto a Commvault, allora saremmo in grado di dire"**$.$ Refunds Plz $.$**"

# - # - #

Purtroppo, ho riscontrato un problema diverso con Bacula. Commvault sembra piuttosto felice di leggere da una parte del mountpoint con un thread e trasmetterlo in streaming su un dispositivo a nastro, mentre legge da un'altra directory con l'altro thread e scrive sulla seconda unità nell'autocambiatore.

Non riesco per la mia vita a far montare Bacula e scrivere su due unità nastro contemporaneamente .

Cose che ho provato:

  • Impostazione Maximum Concurrent Jobs = 20in Demone Director, File e archiviazione
  • Impostazione Prefer Mounted Volumes = nonella definizione lavoro
  • Impostazione di più dispositivi nella risorsa Cambio automatico.

La documentazione sembra essere molto incentrata su una singola unità, e ci sentiamo un po 'come se avessimo legato un razzo a un criceto, con questo. La maggior parte delle configurazioni di esempio Bacula sono per unità DDS4, scambio manuale di nastri e sistemi FreeBSD o IRIX.

Dovrei probabilmente aggiungere che non sono troppo infastidito se questo non è possibile, ma sarei sorpreso. Fondamentalmente voglio usare Bacula come prova per attaccarlo ai fornitori di software che sono troppo cari;)

Ho letto da qualche parte che @KyleBrandt ha fatto qualcosa di simile con una moderna soluzione a nastro ..

File di configurazione: 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
}

Per chiarire: stai cercando di fare un singolo lavoro scrivendo su entrambi gli slot nell'autocambiatore? Non credo che si può fare, ma io faccio penso che più lavori scriveranno ai dispositivi separati ...
voretaq7

1
Commvault consente a un singolo lavoro di scrivere su entrambi gli slot. Non credo sia troppo ingiusto aspettarsi che altri software facciano lo stesso.
Tom O'Connor,

1
Se quello che stai provando a fare è dimostrare le prestazioni, perché non eseguire solo 2 lavori contemporaneamente su dispositivi diversi, dimostrerà ciò che desideri.
EightBitTony,

1
Solo perché Commvault lo registra in un unico lavoro, non significa che non lo stia separando. Ad esempio Syncsort backup express esegue questa operazione tramite mountpoint e in genere esaurisce tutti i punti di mount dati in thread separati (nello stesso processo) prima che si estenda su un singolo processo su due nastri. Penso che ci siano alcuni buoni motivi per questo ... non chiedermi cosa sono :)
SpacemanSpiff

1
Sto pensando di abbandonare questa domanda e VTC troppo localizzato.
Tom O'Connor,

Risposte:


1

Quando si imposta un set di file in bacula, leggerà letteralmente il pathspec riga per riga e verrà eseguito il backup in questo modo.

Non creerà due thread per leggere i diversi percorsi dei file nell'agente.

Come ha detto @SpacemanSpiff, se si volesse fare questo, la strada da percorrere sarebbe quella di impostare diversi lavori, uno per ogni filespec di cui si voleva eseguire il backup.


0

Ho tre suggerimenti per te:

  • Usa più daemon di archiviazione. È possibile eseguire più daemon di archiviazione su porte diverse sullo stesso computer.
  • Utilizzare i lavori di base per la deduplicazione. Risparmia tempo e spazio.
  • Usa la compressione - se le tue unità nastro eseguono la compressione, bene e bene, ma potresti doverle ponderare e sperimentare la compressione bacula-fd. Ciò accade sul client e di conseguenza risparmia anche sulla larghezza di banda per un piccolo sacrificio di tempo della CPU.
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.