Bacula y múltiples dispositivos de cinta, etc.

7

Bacula no utilizará 2 dispositivos de cinta simultáneamente. (Busque # - # - # para el TL; DR)

Un poco de historia, tal vez.

En el proceso de tratar de obtener una solución de copia de seguridad de trabajo decente (hacer copias de seguridad> 20 TB no es barato ni fácil) $dayjob, compramos un montón de cosas para que funcione.

En primer lugar, hay un cambiador automático Spectra Logic T50e, 40 ranuras de bondad LTO5, y ese robot tiene un par de unidades IBM HH5 Ultrium LTO5, conectadas a través de FibreChannel Arbitrated Loop a nuestro servidor de respaldo.

Está el servidor de respaldo. Un Dell R715 con 2 procesadores AMD 62xx de 16 núcleos y 32 GB de RAM. Sabroso. Ese servidor tiene 2 tarjetas Emulex FCe-12000E y una NIC Intel X520-SR de doble puerto 10GE.

También nos vendieron Commvault Backup (no NDMP).

Aquí es donde se pone realmente complicado.

Spectra Logic y Commvault enviaron ingenieros respectivos, que configuraron la biblioteca y el software. Commvault funcionaba bien, en la medida en que el controlador funcionaba bien. El servidor Dell tiene un servidor Ubuntu 12.04, ejecuta MediaAgent para CommVault y monta nuestro BlueArc NAS como NFS en algunos puntos de montaje, como /home, y algunas cosas más /mnt.

Al retroceder desde los puntos de montaje NFS, estábamos viendo ~ = 290GB/hrrendimiento. Eso es una mierda, teniendo en cuenta que tenemos 20 TB para superar, en una ventana de respaldo de <48 horas. El máximo nominal en el BlueArc es 700MB/s( 2460GB/hr), la velocidad máxima de escritura nominal en los dispositivos de cinta es de 140 MB / s, por unidad, por lo que es 492GB/hr(o el doble, para el rendimiento total).

Entonces, el siguiente paso fue comparar el rendimiento de NFS con IOzone, y resulta que obtenemos un rendimiento de escritura épico (en más de 20 hilos), y es como escribir de 1.5-2.5TB / hr, pero el rendimiento de lectura no tiene esperanzas. Nunca podría obtener más de 343 GB / h como máximo. Así que supongamos que 343GB/hres un máximo teórico para el rendimiento de lectura en el NAS, entonces, en teoría, deberíamos poder obtener ese rendimiento de a) CommVault yb) cualquier otro agente de respaldo.

No es el caso. Parece que Commvault solo me da 200-250GB/hrrendimiento y, por experimentación, instalé Bacula para ver cuál es el estado del juego. Si, por ejemplo, Bacula ofreciera un rendimiento y velocidades consistentemente mejores que Commvault, entonces podríamos decir"**$.$ Refunds Plz $.$**"

# - # - #

Por desgracia, encontré un problema diferente con Bacula. Commvault parece muy feliz de leer desde una parte del punto de montaje con un subproceso y transmitirlo a un dispositivo de cinta, mientras lee desde otro directorio con el otro subproceso y escribe en la segunda unidad en el cambiador automático.

Por mi vida no puedo hacer que Bacula monte y escriba en dos unidades de cinta simultáneamente .

Cosas que he probado:

  • Configuración Maximum Concurrent Jobs = 20en el Director, archivos y demonios de almacenamiento
  • Establecer Prefer Mounted Volumes = noen la definición de trabajo
  • Configuración de múltiples dispositivos en el recurso Autochanger.

La documentación parece estar centrada en una sola unidad, y nos sentimos un poco como si hubiéramos atado un cohete a un hámster, con este. La mayoría de las configuraciones de ejemplo de Bacula son para unidades DDS4, intercambio manual de cintas y sistemas FreeBSD o IRIX.

Probablemente debería agregar que no estoy demasiado molesto si esto no es posible, pero me sorprendería. Básicamente quiero usar Bacula como prueba para adherir a los proveedores de software que son demasiado caros;)

Leí en alguna parte que @KyleBrandt ha hecho algo similar con una solución moderna de cinta ...

Archivos de configuración: 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
fuente
Para aclarar, ¿está tratando de tener un solo trabajo escribiendo en ambas ranuras en el cambiador automático? Creo que no se puede hacer eso, pero yo hago pensar que varios puestos de trabajo escribir en dispositivos separados ...
voretaq7
1
Commvault permite que un solo trabajo escriba en ambas ranuras. No creo que sea demasiado injusto esperar que otro software haga lo mismo.
Tom O'Connor
1
Si lo que está tratando de hacer es demostrar el rendimiento, ¿por qué no solo ejecuta 2 trabajos al mismo tiempo en diferentes dispositivos, demostrará lo que desea?
EightBitTony
1
El hecho de que Commvault lo registre en un solo trabajo no significa que no lo separe. Por ejemplo, Syncsort Backup Express hace esto por punto de montaje, y típicamente agotará todos los puntos de montaje dados para separar los hilos (en el mismo trabajo) antes de que abarque un solo trabajo en dos cintas. Creo que hay algunas buenas razones para esto ... no me pregunten cuáles son :)
SpacemanSpiff
1
Estoy considerando abandonar esta pregunta y VTC demasiado localizado.
Tom O'Connor

Respuestas:

1

Cuando configura un conjunto de archivos en bacula, literalmente leerá la ruta específica línea por línea y realizará una copia de seguridad de esta manera.

No creará dos hilos para leer las diferentes rutas de archivo en el agente.

Como dijo @SpacemanSpiff, si quisiera hacer esto, el camino a seguir sería configurar diferentes trabajos, uno para cada especificación de archivos que desea respaldar.

Matthew Ife
fuente
0

Tengo tres consejos para ti:

  • Usa múltiples demonios de almacenamiento. Puede ejecutar múltiples demonios de almacenamiento en diferentes puertos en la misma máquina.
  • Use trabajos base para la desduplicación. Ahorra tiempo y espacio.
  • Utilice la compresión: si sus unidades de cinta hacen compresión, bien y bien, pero es posible que deba sopesarla y experimentar con la compresión bacula-fd. Eso sucede en el cliente y, en consecuencia, también ahorra ancho de banda para un pequeño sacrificio de tiempo de CPU.
Nearora
fuente