LINUX.ORG.RU
ФорумAdmin

Bacula. Volume Name - неверная генерация имени для томов.

 , , ,


0

1

Добрый день. Прошу помощи у коллег ибо всю голову себе сломал... Имею bacula-sd и bacula-dir установленные на FreeBSD 9.2-RELEASE-p10, версии bacula - 7.0.5. В качестве БД используется MySQL (5.5.39 ). Данная система используется для архивирования файликов с windows серверов. Все задания запускаются в одно время:

Schedule {
    Name = "Clients-tsdf-01"
    Run = Level="Full" Pool="3-Days-New" Storage="stor-tsdf-1" sun-fri at 00:03
}
Schedule {
    Name = "Clients-tsdf-02"
    Run = Level="Full" Pool="3-Days-New" Storage="stor-tsdf-2" sun-fri at 00:03
}
Schedule {
    Name = "Clients-tsdf-03"
    Run = Level="Full" Pool="3-Days-New" Storage="stor-tsdf-3" sun-fri at 00:03
}
...
.

Описание job:

JobDefs {
    Name = "Clients-F10"
    Type = Backup
    Level = Full
    Messages = Standard
    Priority = 10
    Write Bootstrap = "/var/db/bacula/%c.bsr"
    Reschedule On Error	= yes
    Reschedule Interval	= 5 minutes
    Reschedule Times = 2
    Max Wait Time = 15 minutes
    # Max Run Time = time
    #Spool Data = yes
    # Заменяется из Scheduler.
    Pool = "pool-default"
    Storage = "stor-default"
}
.
Client {
	Name = "id1025"
	Address = tsdf-03.f10.local
	FDPort = 9102
	Catalog = MyCatalog
	Password = "Бла"
	File Retention = 15 days
	Job Retention = 15 days
	AutoPrune = yes
}

Job {
	Name = "id1025"
	Client = "id1025"
	JobDefs = "Clients-F10"
	Schedule = "Clients-tsdf-03"
	FileSet = "1CBases I:"
}
.
Client {
	Name = "id1003"
	Address = tsdf-04.f10.local
	FDPort = 9102
	Catalog = MyCatalog
	Password = "Бла"
	File Retention = 15 days
	Job Retention = 15 days
	AutoPrune = yes
}

Job {
	Name = "id1003"
	Client = "id1003"
	JobDefs = "Clients-F10"
	Schedule = "Clients-tsdf-04"
	FileSet = "1CBases O:"
}
.

Проблема в том, что задания, запущенные в один момент, получают одинаковый volume name, хотя на каждое задание у меня должен создаваться уникальный volume name:

Pool {
    Name = "3-Days-New"
    Pool Type = Backup
    Recycle Oldest Volume = yes
    Purge Oldest Volume = Yes
    Recycle = yes
    AutoPrune = yes
    Volume Retention = 3 days
    Use Volume Once = yes
    Maximum Volume Jobs = 1
    LabelFormat = "Vol-"
    #LabelFormat = "${Job}-${JobId}-3-Days-${Year}-${Month:p/2/0/r}-${Day:p/2/0/r}-${Hour}-${Minute}"
    #LabelFormat = "${Client}-3-Days-${Year}-${Month:p/2/0/r}-${Day:p/2/0/r}-${Hour}-${Minute}"
}
.

При попытке создать 2 volume с одинаковыми именами, то одно из них падает, хотя по одиночке все отлично работает: Успех!

Using Device "dev-tsdf-3" to write.
bacula-df.f10.local Labeled new Volume "Vol-1181" on file device "dev-tsdf-3" (/bacula-dev-1/dev-tsdf-3).
 Wrote label to prelabeled Volume "Vol-1181" on file device "dev-tsdf-3" (/bacula-dev-1/dev-tsdf-3)
bacula-df-f10-dir Volume used once. Marking Volume "Vol-1181" as Used.
TSDF-03-bacula-fd VSS Writer (BackupComplete): "Task Scheduler Writer", State: 0x1 (VSS_WS_STABLE)
...

Error: lib/bsock.c:208 bnet_host2ipaddrs() for host "bacula-df.f10.local" failed: ERR=Authoritative answer for host not found.
 Fatal error: Failed to connect to Storage daemon: bacula-df.f10.local:9103
bacula-df-f10-dir Start Backup JobId 2459, Job=id1003.2014-09-22_12.55.23_08
bacula-df-f10-dir Created new Volume="Vol-1181", Pool="3-Days-New", MediaType="File" in catalog.
 Using Device "dev-tsdf-5" to write.
 Fatal error: Bad response to Storage command: wanted 2000 OK storage
, got 2902 Bad storage

Подскажите, в какую сторону копать? Пробовал подсовывать в качестве генерации имени переменные, но толку ноль - все равно наступает момент когда задания собираются в кучку и забивают всю очередь и бекап не выполняется ни в какую.



Последнее исправление: averiniv (всего исправлений: 1)

Проблема в том, что задания, запущенные в один момент, получают одинаковый volume name, хотя на каждое задание у меня должен создаваться уникальный volume name:

У бакулы очень кривая «ленточно-ориентированная» архитектура, она просто не умеет писать одновременно более чем на один volume с одного устройства. Даже если устройство - это файловая система, которая не накладывает таких ограничений.

Если ты хочешь, чтобы у тебя все джобы были в отдельных файлах, то нужно поставить Maximum Concurrent Jobs = 1 для девайсов в конфиге стораджа.

Deleted
()
Ответ на: комментарий от sin_a

Проблема в том, что если другие настройки позволяют параллельное исполнение джобов, то Maximum Volume Jobs не сработает и бакула начнёт пытаться писать данные разных джобов в один том. С переменным успехом.

Deleted
()
Ответ на: комментарий от sin_a

If you are running multiple simultaneous jobs, this directive may not work correctly because when a drive is reserved for a job, this directive is not taken into account, so multiple jobs may try to start writing to the Volume. At some point, when the Media record is updated, multiple simultaneous jobs may fail since the Volume can no longer be written.

- из документации к Maximum Volume Jobs.

Deleted
()
Ответ на: комментарий от Deleted

Спасибо. Сейчас попробую выставить данный параметр равный 1. Сейчас имею вот такое вот описание Storage:

Storage {
  Name = "stor-tsdf-3"
  Address = bacula-df.f10.local
  SDPort = 9103
  Password = "Бла"
  Device = dev-tsdf-3
  Media Type = File
  Maximum Concurrent Jobs = 10
}

Ставил данное значение равное 10, так как планировал использовать spool, но от данной затеи пока отказался. Есть странность - если я пытаюсь воспроизвести ошибку на одних и тех же заданиях, стораджах и т.д., я ошибку получаю не всегда, в 10% случаев.

averiniv
() автор топика
Ответ на: комментарий от Deleted

Получается, если в настройках тома стоит использовать его единожды:

Use Volume Once = yes
, то bacula director игнорирует эту директиву и предлагает другому заданию данный том для записи?

Странная логика...

Как, на ваш взгляд, можно обойти эту проблему?

Выполнять по 1 заданию на storadge director я не могу позволить, так как не буду пролазить в окно бекапа...

averiniv
() автор топика
Ответ на: комментарий от averiniv

, то bacula director игнорирует эту директиву и предлагает другому заданию данный том для записи?

ИМХО bacula director как раз не игнорирует эту директиву. Но не игнорирует он её только после старта задания, и именно поэтому несколько заданий начинают писать в один том и фейлятся. Хотя, честно говоря, я тоже не до конца понимаю эту логику. У меня задания фейлились не сразу, а после записи нескольких файлов в том.

Я остановился на костыльном решении, когда для каждого клиента выделяется свой собственный девайс на сторадже (директория с файлами), а для каждого задания - свой пул. Вот тут описана похожая конфигурация: http://myunix.dk/2010/12/12/large-scale-disk-to-disk-backups-using-bacula-part-iv/.

Плюсы такого решения:

  • Бэкап нескольких клиентов может работать параллельно без всяких проблем.
  • 1 задание == 1 том, это очень сильно всё упрощает (расчёт retention period'ов, восстановление вручную и т.п.).
  • Логика работы проста, понятна и предсказуема.

Минусы:

  • Конфигурация сильно раздувается. Писать такое руками - жесть. У меня конфиги генерирует salt по шаблонам на jinja2. Но можно сделать то же самое на чём угодно: python, bash, m4...
  • Storage daemon не умеет перечитывать конфигурацию без перезапуска. Частично это можно решить добавлением кучи девайсов для новых клиентов «про запас». Но если бэкапы не делаются круглосуточно семь дней в неделю, то это не проблема.
Deleted
()
Ответ на: комментарий от Deleted

Это была моя первая конфигурация от которой я ушел, в тот момент, когда у меня стало около 4000 пулов, и когда поползли даты ротации.

Это слишком много, по этому решил оптимизировать используя всего два пула.

Получается придется к этому возвращаться, либо искать обход.

averiniv
() автор топика

Давно не брал я в руки бакулы. Кстати, по слухам, надо переползать на BareOS: Bacula RIP. Long live Bareos

Я в своё время не стал париться и просто завёл по пулу на клиента. Если бекап на диски, без ленточных устройств и прочего энтерпрайза - самое оно.

selivan ★★★
()
Ответ на: комментарий от selivan

Давно не брал я в руки бакулы. Кстати, по слухам, надо переползать на BareOS: Bacula RIP. Long live Bareos

Сейчас bareos архитектурно почти не отличается от бакулы. Те же ограничения, те же костыли для обхода.

Deleted
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.