UMGUM.COM (лучше) 

Bacula + Lotus Domino backup ( Резервное копирование "баз данных" Lotus Domino с помощью Bacula. )

1 января 2011  (обновлено 15 августа 2016)

OS: Lotus Domino Server на Windows 2003 в качестве "хостовой" операционной системы.
Application: Bacula v.3.2/v.5.2.

Как хорошо и просто делать инкрементальное резервирование данных Lotus Domino я не знаю. Не занимаюсь этой системой документооборота и взаимодействую с ней только со стороны. Каждый "чих" и "пых" подключенного к серверу клиента Lotus Notes вызывает изменение большущих файлов "баз данных" Lotus, которые в общем случае могут быть сохранены только целиком. Так и будем делать.

Чтобы сохранить "базы" Lotus в непротиворечивом состоянии считаю необходимым останавливать сервер Lotus перед резервным копированием данных.

Как правило, Lotus запускается в качестве системной службы. Следует выяснить точное имя этой службы:


# sc query

SERVICE_NAME: ALG
DISPLAY_NAME:
  TYPE               : 10  WIN32_OWN_PROCESS
  STATE              : 4  RUNNING
                          (STOPPABLE,NOT_PAUSABLE,IGNORES_SHUTDOWN)
  WIN32_EXIT_CODE    : 0 (0x0)
  SERVICE_EXIT_CODE  : 0 (0x0)
  CHECKPOINT         : 0x0
  WAIT_HINT          : 0x0
....
SERVICE_NAME: Lotus Domino Server (LotusDominoFullReplication)
DISPLAY_NAME: Lotus Domino Server (LotusDominoFullReplication)
  TYPE               : 110  WIN32_OWN_PROCESS  (interactive)
  STATE              : 4  RUNNING
                          (STOPPABLE, NOT_PAUSABLE, ACCEPTS_SHUTDOWN)
  WIN32_EXIT_CODE    : 0 (0x0)
  SERVICE_EXIT_CODE  : 0 (0x0)
  CHECKPOINT         : 0x0
  WAIT_HINT          : 0x0
....
SERVICE_NAME: Eventlog
DISPLAY_NAME:
  TYPE               : 20  WIN32_SHARE_PROCESS
  STATE              : 4  RUNNING
                          (NOT_STOPPABLE,NOT_PAUSABLE,ACCEPTS_SHUTDOWN)
  WIN32_EXIT_CODE    : 0 (0x0)
  SERVICE_EXIT_CODE  : 0 (0x0)
  CHECKPOINT         : 0x0
  WAIT_HINT          : 0x0
....

В середине - оно самое.

Далее всё просто. Пишем пару скриптов, корректно останавливающих, перед запуском резервирования, и запускающих, после такового, сервис Lotus.

Создадим на стороне клиента скрипт с именем "c:\custom\pre-backup-lotus.bat", исполняющий останов службы:

# Отключаем вывод скрипта в терминал
@echo off

set SUBJECT=Lotus Domino Server (LotusDominoFullReplication)
set WAIT=10

# Отдаём команду остановки службы
cmd.exe /c sc.exe stop "%SUBJECT%" >> %TEMP%\pre-backup-lotus.log

# Запускаем ожидание остановки с циклической проверкой
for /L %%i IN (1,1,%WAIT%) do (
  
  # Выжидаем тридцать секунд (способ извращённый, но иного не предусмотрено)
  ping -n 30 localhost > %TEMP%\sleep.txt

  # Проверяем успешность завершения работы Lotus Domino Server
  cmd.exe /c sc.exe query "%SUBJECT%" | FIND "STOPPED" > %TEMP%\sleep.txt

  # Единственный нормальный способ выхода из скрипта с передачей управления Bacula
  if %errorlevel% EQU 0 (exit 0)
)

# Отдаём команду запуска службы (на всякий случай, хуже не будет)
cmd.exe /c sc.exe start "%SUBJECT%" >> %TEMP%\pre-backup-lotus.log

# Завершаем исполнение скрипта с передачей сообщения о неудаче Bacula
exit 1

Так же создадим на стороне клиента скрипт с именем "c:\custom\post-backup-lotus.bat", исполняющий запуск службы:

# Отключаем вывод скрипта в терминал
@echo off

set SUBJECT=Lotus Domino Server (LotusDominoFullReplication)

# Отдаём команду запуска службы
cmd.exe /c sc.exe start "%SUBJECT%" >> %TEMP%\post-backup-lotus.log

exit 0

Закрываем скрипты от чтения, не говоря уже о записи, кем бы то ни было, кроме суперпользователя, во избежание.

Корректируем конфигурацию Bacula Director:

# cat /etc/bacula/bacula-dir.conf

....
Job {
  Name = "job-backup-test.domain.local"
  Type = Backup
  ....
  ClientRunBeforeJob = "c:/custom/pre-backup-lotus.bat"
  ClientRunAfterJob = "c:/custom/post-backup-lotus.bat"
  ....

Описываем область резервирования:

# cat /etc/bacula/bacula-dir.conf

....
FileSet {
  Name = "file-set-test.domain.local"
  Include {
....
    File = "c:\lotus\"
....

Объём резервируемых данных, как правило, настолько велик, что предварительное копирование таковых для скорейшего освобождения ресурса в подготовленное место с последующим извлечением Bacula не представляется возможным. Потому следует принять меры к тому, чтобы Lotus случайно не был запущен каким ни-будь "администратором".

По хорошему, в инфраструктуре с большим количеством серверов Lotus, хранящих критически важные данные, следует в обязательном порядке заиметь выделенный сервер репликаций, аккумулирующий данные и осуществляющих их резервирование в том или ином виде. Так будет гораздо лучше, нежели множить копии "баз данных" Lotus, содержащих практически идентичную информацию.


Заметки и комментарии к публикации:


Оставьте свой комментарий ( выразите мнение относительно публикации, поделитесь дополнительными сведениями или укажите на ошибку )