Bacula & Multiple Tape Devices 등


7

Bacula는 2 개의 테이프 장치를 동시에 사용하지 않습니다. ( TL; DR에 대한 #-#-# 검색 )

아마도 작은 배경 일 것입니다.

에서 합리적인 수준의 백업 솔루션 (20TB 이상을 백업하는 것이 저렴하거나 쉽지 않음)을 얻는 과정에서 $dayjob많은 작업을 수행하여 작동했습니다.

첫째, Spectra Logic T50e 오토 체인저, 40 슬롯의 LTO5 우수성이 있으며 로봇에는 FibreChannel Arbitrated Loop를 통해 백업 서버에 연결된 한 쌍의 IBM HH5 Ultrium LTO5 드라이브가 있습니다.

백업 서버가 있습니다. 2x 16 코어 AMD 62xx CPU 및 32GB RAM을 갖춘 Dell R715. 맛있는. 이 서버에는 2 개의 Emulex FCe-12000E 카드와 Intel X520-SR 듀얼 포트 10GE NIC가 있습니다.

Commvault Backup (비 -NDMP)도 판매되었습니다.

여기가 정말 복잡해집니다.

Spectra Logic과 Commvault는 각각 라이브러리와 소프트웨어를 설정하는 각 엔지니어를 보냈습니다. 컨트롤러가 정상적으로 작동하는 한 Commvault가 정상적으로 실행되었습니다. 델 서버는 우분투 12.04 서버를 가지고 있으며, 컴 볼트의 MediaAgent를 실행, 몇 마운트 포인트, 등으로 NFS 우리의 블루 아크 NAS를 장착 /home하고, 몇 가지 물건 /mnt.

NFS 마운트 포인트에서 백업 할 때 290GB/hr처리량이 ~ = 인 것으로 나타났습니다 . <48 시간 백업 창에서 20 홀 TB를 처리 할 수 ​​있다는 점을 고려하면 CRAP입니다. BlueArc의 정격 최대 값은 700MB/s( 2460GB/hr), 테이프 장치의 정격 최대 쓰기 속도는 드라이브 당 140MB / s이므로 492GB/hr전체 처리량의 두 배입니다.

따라서 다음 단계는 IOzone을 사용하여 NFS 성능을 벤치마킹하는 것이 었으며, 20 개 이상의 스레드에서 뛰어난 쓰기 성능을 얻었으며, 1.5-2.5TB / hr 쓰기와 비슷하지만 읽기 성능은 절망적입니다. 나는 최대 343GB / 시간 이상을 얻을 수 없었습니다. 따라서 343GB/hr이것이 NAS의 읽기 성능에 대한 이론상 최대 값 이라고 가정 하면 이론적으로 a) CommVault 및 b) 다른 백업 에이전트에서 해당 성능을 얻을 수 있어야합니다 .

그렇지 않습니다. Commvault는 200-250GB/hr처리량 만 제공하는 것으로 보이며 실험을 통해 Bacula를 설치하여 플레이 상태를 확인했습니다. 예를 들어 Bacula가 Commvault보다 지속적으로 더 나은 성능과 속도를 제공했다면"**$.$ Refunds Plz $.$**"

#-#-#

아아, 나는 Bacula와 다른 문제를 발견했다. Commvault는 마운트 지점의 한 부분에서 하나의 스레드로 읽고 다른 스레드가있는 다른 디렉토리에서 읽고 Autochanger의 두 번째 드라이브에 쓰는 동안 테이프 장치로 스트리밍하는 것이 매우 기쁜 것 같습니다.

나는 내 인생에서 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
}

명확히하기 위해-Autochanger의 두 슬롯 모두에 단일 작업을 작성하려고합니까? 난 당신이 그렇게 할 수 있다고 생각하지 않습니다,하지만 난 ... 그 여러 작업이 별도의 장치에 기록 할 것이라고 생각
voretaq7

1
Commvault를 사용하면 단일 작업이 두 슬롯 모두에 쓸 수 있습니다. 다른 소프트웨어가 같은 것을 기대하는 것이 너무 불공평하다고 생각하지 않습니다.
Tom O'Connor

1
수행하려는 작업이 성능을 입증하는 것이라면 다른 장치에서 동시에 2 개의 작업을 실행하는 것이 아니라 원하는 것을 증명할 수 있습니다.
EightBitTony 2018 년

1
Commvault가 하나의 작업에서 로그를 기록한다고해서 분리되지는 않습니다. 예를 들어, Syncsort backup express는 마운트 포인트별로이를 수행하며 두 개의 테이프에서 단일 작업을 확장하기 전에 주어진 모든 마운트 포인트를 동일한 작업에서 별도의 스레드로 소진합니다. 나는 :) 묻지 않는다 그들이 무엇인지 ... 이것에 대한 좋은 이유가 생각
SpacemanSpiff

1
이 질문을 포기하고 VTC가 너무 현지화되었습니다.
톰 오코너

답변:


1

bacula에서 파일 세트를 설정하면 문자 그대로 pathspec을 한 줄씩 읽고 다음과 같이 백업합니다.

에이전트에서 다른 파일 경로를 읽기 위해 두 개의 스레드를 작성하지 않습니다.

@SpacemanSpiff가 말했듯이, 이것을 원한다면 백업하려는 각 파일 사양마다 하나씩 다른 작업을 설정하는 것이 좋습니다.


0

세 가지 팁이 있습니다.

  • 여러 스토리지 데몬을 사용하십시오. 동일한 머신의 다른 포트에서 여러 스토리지 데몬을 실행할 수 있습니다.
  • 중복 제거에 기본 작업을 사용하십시오. 시간과 공간을 절약합니다.
  • 압축을 사용하십시오-테이프 드라이브가 잘 압축 된 경우 압축을 사용하고 bacula-fd 압축을 실험하고 실험해야 할 수도 있습니다. 이는 클라이언트에서 발생하며 결과적으로 적은 CPU 시간 희생을 위해 대역폭도 절약합니다.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.