বেকুলা একই সাথে 2 টি টেপ ডিভাইস ব্যবহার করবে না। ( টিএল এর জন্য # - # - # অনুসন্ধান করুন ; ডিআর)
একটু ব্যাকগ্রাউন্ড, সম্ভবত।
এখানে একটি উপযুক্ত ওয়ার্কিং ব্যাকআপ সলিউশন (ব্যাক আপ> 20 টিবি সস্তা বা সহজ নয়) পাওয়ার চেষ্টা করার প্রক্রিয়ায় $dayjob
আমরা এটিকে কাজ করার জন্য একগুচ্ছ জিনিস কিনেছি।
প্রথমত, একটি স্পেকট্রা লজিক T50e অটোচ্যাঞ্জার, 40 স্লট LTO5 ধার্মিকতা, এবং সেই রোবোটের একটি জুড়ি আইবিএম এইচএইচ 5 আলট্রিয়াম এলটিও 5 ড্রাইভ পেয়েছে, যা আমাদের ব্যাকআপ সার্ভারের সাথে ফাইবারচ্যানেল আরবিট্রেটেড লুপের মাধ্যমে সংযুক্ত।
ব্যাকআপ সার্ভারটি আছে .. 2x 16 কোর এএমডি 62XX সিপিইউ সহ একটি ডেল আর 715, এবং 32 জিবি র্যাম। মুখরোচক। সেই সার্ভারটির 2 এমুলেক্স এফসি -12000 ই কার্ড এবং একটি ইন্টেল এক্স 520-এসআর ডুয়াল পোর্ট 10 জিই এনআইসি পেয়েছে।
আমাদেরও কমভল্ট ব্যাকআপ (নন-এনডিএমপি) বিক্রি করা হয়েছিল।
এখানে এটি সত্যিই জটিল হয়ে ওঠে।
স্পেকট্রা লজিক এবং কমভল্ট উভয়ই তাদের নিজ নিজ প্রকৌশলী প্রেরণ করেছিলেন, যারা গ্রন্থাগার এবং সফ্টওয়্যার সেটআপ করে। কম্বল্ট ঠিকঠাক চলছিল, যতক্ষণ না কন্ট্রোলার ঠিকঠাক কাজ করছিল। ডেল সার্ভারে উবুন্টু 12.04 সার্ভার রয়েছে এবং এটি কমভোল্টের জন্য মিডিয়া এজেন্ট চালায় এবং আমাদের ব্লুআরসিএন এনএএসকে NFS হিসাবে কয়েকটি মাউন্টপয়েন্ট, যেমন /home
, এবং কিছু স্টাফ এ মাউন্ট করে /mnt
।
এনএফএস মাউন্টপয়েন্টগুলি থেকে ব্যাক আপ নেওয়ার সময় আমরা ~ = 290GB/hr
থ্রুপুট দেখছিলাম। এটি একটি ক্র্যাপ, বিবেচনা করে একটি <48 ঘন্টা ব্যাকআপ উইন্ডোতে আমরা 20-টিরকম টিবি পেয়েছি। ব্লুআরকি-তে রেটড সর্বাধিক 700MB/s
( 2460GB/hr
), টেপ ডিভাইসগুলিতে রেট সর্বাধিক লেখার গতি প্রতি ড্রাইভে 140MB / s, তাই এটি 492GB/hr
(বা এটি মোট দ্বিগুণের জন্য দ্বিগুণ)।
সুতরাং, পরবর্তী পদক্ষেপটি ছিল আইওজোনের সাথে এনএফএসের পারফরম্যান্স, এবং এটি প্রমাণিত হয়েছে যে আমরা মহাকাব্য লেখার পারফরম্যান্স পেয়েছি (20 টি থ্রেড জুড়ে), এবং এটি 1.5-2.5TB / ঘন্টা লেখার মতো, তবে পড়ার পারফরম্যান্স হতাশ হয়ে পড়েছে। আমি সর্বোচ্চ 343 গিগাবাইট / ঘন্টা সর্বোচ্চ থেকে বেশি পেতে পারি না। সুতরাং আসুন ধরে নেওয়া যাক যে 343GB/hr
এনএএস-এ পড়ার পারফরম্যান্সের জন্য এটি তাত্ত্বিক সর্বাধিক, তবে আমাদের তত্ত্বগতভাবে এ পারফরম্যান্সটি ক) কম্বল্টের বাইরে নিয়ে যেতে সক্ষম হওয়া উচিত , এবং খ) অন্য কোনও ব্যাকআপ এজেন্ট।
ক্ষেত্র না. কম্বল্ট মনে হয় কেবল আমাকেই 200-250GB/hr
থ্রুপুট দেয় এবং পরীক্ষার বাইরে, আমি সেখানে খেলার অবস্থা কী তা দেখার জন্য বকুলাকে ইনস্টল করেছিলাম। উদাহরণস্বরূপ, যদি বকুলা কম্বল্টের চেয়ে ধারাবাহিকভাবে আরও ভাল পারফরম্যান্স এবং গতি দেয় তবে আমরা বলতে সক্ষম হব"**$.$ Refunds Plz $.$**"
# - # - #
হায়, আমি বকুলার সাথে একটি আলাদা সমস্যা পেয়েছি। কমভল্ট একটি থ্রেড সহ মাউন্টপয়েন্টের এক অংশ থেকে পড়ে এবং টেপ ডিভাইসে প্রবাহিত করতে, অন্য থ্রেডের সাথে অন্য কোনও ডিরেক্টরি থেকে পড়া এবং অটোচ্যাঞ্জারে ২ য় ড্রাইভে লেখার জন্য বেশ আনন্দিত বলে মনে হচ্ছে।
আমি আমার জীবনের জন্য বকুলাকে একই সাথে দুটি টেপ ড্রাইভের জন্য মাউন্ট করতে এবং লিখতে পারি না ।
যে জিনিসগুলি আমি চেষ্টা করেছি:
- সেট
Maximum Concurrent Jobs = 20
পরিচালক এ, ফাইল এবং সংগ্রহস্থল ডেমন Prefer Mounted Volumes = no
কাজের সংজ্ঞা সেট করা হচ্ছে- অটোচ্যাঞ্জার রিসোর্সে একাধিক ডিভাইস সেট করা।
ডকুমেন্টেশন মনে হয় খুব সিঙ্গল-ড্রাইভ কেন্দ্রিক, এবং আমরা কিছুটা মনে করি যেমন আমরা একটি রকেট হ্যামস্টারে আটকে রেখেছি, এটি দিয়ে। বেশিরভাগ উদাহরণস্বরূপ বকুলা কনফিগারেশনগুলি ডিডিএস 4 ড্রাইভ, ম্যানুয়াল টেপ অদলবদল এবং ফ্রিবিএসডি বা আইআরআইএক্স সিস্টেমের জন্য।
আমার সম্ভবত যুক্ত করা উচিত যে এটি সম্ভব না হলে আমি খুব বেশি বিরক্ত হচ্ছি না , তবে আমি অবাক হব। আমি মূলত বেকুলাকে সেই সফ্টওয়্যার বিক্রেতাদের কাছে আটকে রাখার জন্য প্রমাণ হিসাবে ব্যবহার করতে চাই যে তারা অতিরিক্ত মূল্যে রয়েছে;)
আমি কোথাও পড়েছি যে @ কাইলব্র্যান্ড একটি আধুনিক টেপ সমাধানের সাথে একই রকম কাজ করেছে ..
কনফিগারেশন ফাইলসমূহ: ব্যাকুলা-ডিরকনফ f
#
# 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
}