Запуск утилит в режиме резервного сервера

После получения извещения, что данный сервер должен быть резервным, он переходит в фоновый режим и начинает работу в режиме SLAVE_WAIT. В данном режиме управляющая программа периодически посылает запрос главному серверу на разрешение запуска этого сервера в SLAVE-режиме. От главного сервера он ожидает приема разрешения на запуск работы в SLAVE-режиме.

В режиме резервного сервера управляющая программа выполняет следующие действия:

  1. выбор рабочей БД.

    Как только разрешение на запуск получено, резервный сервер переходит в состояние SLAVE. В данном состоянии сначала определяется наиболее подходящий каталог для рабочей БД. Он подбирается по критерию самой актуальной информации.

  2. запуск сетевого драйвера клиента.

    После выбора каталога с рабочей БД производится запуск сетевого драйвера клиента dbc_tcp. При успешном запуске dbc_tcp сигналом извещает об этом управляющую программу.

  3. очистка контрольной точки.

    Управляющая программа запускает утилиту lhb для очистки контрольной точки данной БД (утилита lhb с ключом -stopinc). Очистка контрольной точки требуется для освобождения файлов системного журнала главного сервера и возможности их удаления.

  4. попытка продолжения докачки журнала.

    Если рабочая или резервная БД присутствует и в её каталоге есть lhb-файл, то производится попытка продолжить существующий lhb-архив. Это возможно, только если на главном сервере не было интенсивного изменения данных, и размер системного журнала не превысил максимально допустимое значение. Если этого не случилось, то контрольная точка не будет удалена главным сервером и сохранится возможность продолжения скачивания системного журнала (успешно продолжится докачка существующего системного журнала). Об окончании этого процесса утилита lhb информирует управляющую программу, и она сменит свое состояние на SLAVE_OK. Описанные далее пункты будут пропущены (в том числе и копирование (архивирование) БД при старте).

    Если же попытка продолжения скачивания системного журнала будет неудачна по причине отсутствия БД, lhb-файла или по неуспешному продолжению докачки, то будут произведены описанные ниже действия.

  5. сохранение копии БД.

    В случае использования устаревшего режима совместимости (/exchdir=0) и если рабочая БД имеет более актуальную БД, чем резервная БД, производится перемещение рабочей БД в архивный каталог. Наличие архивной БД необходимо на случай отказа главного сервера в ситуации, когда БД с главного сервера получена резервным сервером не полностью. Предыдущая БД в архивном каталоге при этом удаляется.

    В случае работы в режиме по умолчанию используется обмен каталогов и копирование никогда не выполняется. Для рабочего каталога выбирается каталог с наиболее старой БД, поскольку БД в нем будет замещена новой БД.

  6. очистка рабочего каталога.

    Выполняется предварительная очистка (удаление файлов) рабочего каталога от файлов БД. Таким образом, подготавливается место для получения новой БД с главного сервера.

  7. создание архивного файла.

    На следующем этапе, если это задано ключом командной строки /archivate, выполняется создание архивного файла резервной БД. По умолчанию в ОС типа UNIX для архивации используется архиватор pkzip. Местоположение каталога для архивного файла берется из ключа /barc. Если этот ключ не задан, по умолчанию архивный файл БД создается в каталоге архивной БД под именем DB.zip.

  8. первоначальное копирование данных.

    Следующим шагом является запуск утилиты lhb в режиме первоначального копирования данных (с ключом -startinc). Утилита горячего архивирования lhb размещает копию рабочей БД главного сервера в рабочем каталоге резервного сервера. Она сохраняет копируемые данные не в архивный файл (как обычно – архив lhb), а сразу же размещает их в файлы БД. При таком способе архивирования БД архивный файл утилиты lhb используется только для хранения служебной информации и не содержит собственно данных (а, следовательно, и не растет в объеме).

  9. передача информации о контрольной точке главному серверу.

    Сразу же после старта утилиты lhb анализируется выдаваемая ею информация об установленной контрольной точке. Процесс копирования рабочей БД может выполняться параллельно на несколько резервных серверов. Для каждого резервного сервера в системном журнале копируемой рабочей БД создается своя контрольная точка, которая идентифицируется только своим порядковым номером и датой создания.

    Утилита lhb сохраняет информацию о контрольной точке в выходном файле. Эта информация анализируется и передается главному серверу, чтобы исключить её удаление при росте системного журнала. Контрольные точки активных SLAVE-серверов главным сервером не удаляются.

  10. извещение о готовности.

    По окончании копирования данных (в режиме startinc или при попытке докачки системного журнала) утилита lhb сигналом информирует об этом управляющую программу. Управляющая программа генерирует событие SLAVE_OK, извещающее о готовности резервного сервера, и рассылает его всем остальным серверам системы резервирования. Если задан ключ /stproc, то вызывается обработчик событий, которому передается информация о размерах обеих БД и времени завершения копирования БД (докачки системного журнала) с главного сервера.

    Утилита lhb остается в состоянии WAIT для немедленного получения информации об изменившихся данных и сохранении её в файлах системного журнала. В дальнейшем по файлам системного журнала на резервном сервере может быть восстановлена вся измененная информация.

  11. смена своего состояния.

    С этого момента (окончание скачивания данных утилитой lhb) на резервном сервере в рабочем каталоге будет находиться готовая к использованию БД – копия рабочей БД главного сервера. Таким образом, данный резервный сервер готов в любой момент взять на себя функции главного сервера (находится в состоянии SLAVE_OK).

    Рабочая БД переводится в состояние SLAVE, что фиксируется в файле state рабочей БД вместе с текущим временем.

  12. запуск ядра СУБД ЛИНТЕР в специальном режиме.

    Для переноса данных из файлов системного журнала в файлы таблиц БД управляющая программа запускает ядро СУБД ЛИНТЕР в специальном режиме – режиме совместной работы с утилитой lhb. Ядро СУБД после переноса данных удаляет уже обработанные файлы системного журнала.

    Резервный сервер переходит в стационарный режим работы.