Bacula & Multiple Tape Devices и т. Д.


7

Bacula не будет использовать 2 ленточных устройства одновременно. (Поиск # - # - # для TL; DR)

Возможно, немного предыстории.

В процессе получения достойного рабочего решения для резервного копирования (резервное копирование более 20 ТБ не дешево или просто) $dayjob, мы купили несколько вещей, чтобы оно работало.

Во-первых, есть автоматический чейнджер Spectra Logic T50e, 40 слотов качества LTO5, и у этого робота есть пара накопителей IBM HH5 Ultrium LTO5, подключенных через FibreChannel Arbitrated Loop к нашему серверу резервного копирования.

Есть резервный сервер. Dell R715 с 2-мя 16-ядерными процессорами AMD 62xx и 32 ГБ оперативной памяти. Вкусно. Этот сервер имеет 2 карты Emulex FCe-12000E и двухпортовый сетевой адаптер Intel X520-SR 10GE.

Нам также продали Commvault Backup (не NDMP).

Вот где это действительно сложно.

Spectra Logic и Commvault отправили соответствующих инженеров, которые установили библиотеку и программное обеспечение. Commvault работал нормально, поскольку контроллер работал нормально. Сервер Dell имеет сервер Ubuntu 12.04, работает агент MediaAgent для CommVault и монтирует наш BlueArc NAS как NFS на несколько точек монтирования, например /home, и некоторые другие /mnt.

При резервном копировании с точек монтирования NFS мы видели ~ = 290GB/hrпропускную способность. Это CRAP, учитывая, что у нас есть 20 с лишним ТБ в окне резервного копирования <48 часов. Максимальное значение на BlueArc равно 700MB/s( 2460GB/hr), максимальное значение скорости записи на ленточных устройствах составляет 140 МБ / с на диск, так что это 492GB/hr(или вдвое больше для общей пропускной способности).

Итак, следующим шагом было сравнение производительности NFS с IOzone, и оказалось, что мы получаем эпическую производительность записи (для> 20 потоков), и это похоже на 1,5-2,5 ТБ / ч записи, но производительность чтения безнадежно безнадежна. Я никогда не мог получить выше, чем максимум 343 ГБ / ч. Итак, давайте предположим, что 343GB/hrэто теоретический максимум производительности чтения на NAS, тогда теоретически мы должны быть в состоянии получить эту производительность из a) CommVault и b) любого другого агента резервного копирования.

Не тот случай. Commvault, кажется, только когда-либо дает мне 200-250GB/hrпропускную способность, и из экспериментов я установил Bacula, чтобы посмотреть, каково состояние игры. Если, например, Bacula показала неизменно лучшую производительность и скорость, чем Commvault, то мы могли бы сказать,"**$.$ Refunds Plz $.$**"

# - # - #

Увы, я нашел другую проблему с Bacula. Commvault, кажется, очень рад, что читает из одной части точки монтирования одним потоком и передает его на ленточное устройство, в то время как читает из какого-то другого каталога с другим потоком и записывает на 2-й диск в устройстве автоматической смены.

Я не могу на всю жизнь заставить Bacula смонтировать и записать на два стримера одновременно .

Вещи, которые я пробовал:

  • Установка Maximum Concurrent Jobs = 20в директоре, файлов и хранилищ демонов
  • Настройка Prefer Mounted Volumes = noв определении задания
  • Настройка нескольких устройств в ресурсе Autochanger.

Документация кажется очень ориентированной на один привод, и мы чувствуем себя так, словно привязали ракету к хомяку, с этим. Большинство примеров конфигурации 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
Если то, что вы пытаетесь сделать, это доказать производительность, почему бы просто не запустить 2 задания одновременно на разных устройствах, это докажет, что вы хотите.
EightBitTony

1
То, что Commvault регистрирует его под одной работой, не означает, что оно не разделяется. Например, Syncsort Backup Express делает это по точке монтирования и, как правило, исчерпывает все заданные точки монтирования для отдельных потоков (в одном и том же задании), прежде чем охватить одно задание на двух лентах. Я думаю, что есть несколько веских причин для этого ... не спрашивайте меня, что они есть :)
SpacemanSpiff

1
Я собираюсь отказаться от этого вопроса, и VTC Too Localized.
Том О'Коннор

Ответы:


1

Когда вы устанавливаете набор файлов в bacula, он буквально читает строку pathspec и выполняет резервное копирование следующим образом.

Он не создаст два потока для чтения различных путей к файлам в агенте.

Как сказал @SpacemanSpiff, если вы захотите это сделать, дальнейший путь будет заключаться в настройке различных заданий, по одному для каждой спецификации файла, который вы хотите сделать резервную копию.


0

У меня есть три совета для вас:

  • Используйте несколько демонов хранения. Вы можете запустить несколько демонов хранилища на разных портах на одном компьютере.
  • Используйте базовые задания для дедупликации. Экономит время и пространство.
  • Используйте сжатие - если ваши ленточные накопители хорошо и хорошо работают со сжатием, но вам, возможно, придется взвесить его и поэкспериментировать со сжатием bacula-fd. Это происходит на клиенте и, следовательно, экономит полосу пропускания для небольшой потери времени процессора.
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.