ВНИМАНИЕ!!!
При глубоком тестировании выявлено, что при некоторых условиях сторонние утилиты при обращении к одной копии Firebird используют security.fbk совершенно другой копии! Это не вызывает проблем, если не используется система безопасности и назначения прав, но в других случаях, само собой, проблемы возникают. Ведётся поиск решения...

Firebird 1.5 - устанавливаем несколько серверов

   Если возникла необходимость поставить несколько независимых серверов (например, нужен и Classic, и Super), это сделать несложно. Просто каждый сервер будет работать на своём порте. Однако штатная установка такого не предусматривает. Потому сделаем это вручную.

   Основная наша задача - сделать серверы совершенно независимыми. То есть чтобы для каждого существовала своя системная служба и даже своя запись в "Установка и удаление программ". Для этого нам придётся немного "поработать руками".

   Ниже описана методика, опробованная на Windows 2000 Server SP 4 Rus, Windows 2003 Server Standard Edition SP 2 Rus и на Windows 2003 Server Enterprise Edition SP 2 Rus.

   Итак, сначала планируем установку. Заранее подготовим табличку, где распишем, какое имя мы дадим каждому экземпляру сервера и на какой порт его настроим. Например:

Имя сервераТип сервераПорт сервераПримечание
Instance_1Classic3050Для Смета.РУ
Instance_2Super3051Для Кодос-ИКБ
Instance_3Classic3052Для экспериментов

   Приступаем. Начинаем установку, скажем, с третьего, который Instance_3. То есть просто запускаем инсталлятор (у меня это Firebird-1.5.0.4306-Win32.exe), указываем, что мы намерены устанавливать Classic Server, в качестве каталога для установки указываем, например,

C:\Program Files\Firebird\Firebird_1_5_Instance_3_port_3052

выбираем полную установку (чего жадничать?), отказываемся от использования Guardian (а зачем он нужен? единственное его предназначение - перезапустить службу, если с ней что случится, но с этим прекрасно справляются и штатные средства), ставим запуск в качестве службы, отказываемся от её автозапуска (потом настроим), и просим скопировать клиентскую библиотеку в системный каталог, сгенерировать GDS32.DLL и установить апплет управления. Вперёд! пара секунд, копирование файлов закончено. Отказываемся от запуска службы (рано ещё). Установка завершена. Отправляемся в каталог, куда мы установили сервер, находим там конфигурационный файл и вносим в него необходимые нам изменения. Раскомментируем строку, где указан порт (RemoteServicePort = 3050), и ставим там значение 3052 вместо значения по умолчанию 3050. Если надо, устанавливаем и другие параметры. Загружаем консоль управления, апплет "Службы". Запускаем только что установленную службу (её имя будет "Firebird Server - Default Instance"), убеждаемся, что она стартовала нормально. И сразу останавливаем службу.

   И вот теперь наступил момент, когда надо немножко "персонализировать" свежеустановленную копию сервера. Увы, это придётся делать вручную. Запускаем regedit -это единственный инструмент, который нам понадобится.

   Сначала отправляемся в ветку

HKLM\SOFTWARE\Firebird Project\Firebird Server\Instances

   Тут перечислены все экземпляры установленных в системе серверов с указанием их местонахождения. Наш, свеженький, фигурирует под именем DefaultInstance. Переименуем его в Instance_3.

   Теперь отправляемся ниже, в ветку

HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\FBDBServer_1_5_is1

   Это информация для деинсталляции нашего экземпляра сервера. Переименуем ветку в FBDBServer_1_5_Instance_3 и корректируем значение ключа DisplayName, чтобы можно было легко различать записи (там сейчас написано нечто типа "Firebird 1.5.0.4306 DefaultInstance", а мы напишем "Firebird 1.5.0.4306 Instance 3 port 3052 Classic").

   Итак, рюшечки поправили, нам предстоит поправить записи ещё в двух местах, но теперь уже будет правка серьёзная, в которой нельзя ошибиться.

   Отправляемся в

HKLM\SYSTEM\CurrentControlSet\Enum\Root\LEGACY_FIREBIRDSERVERDEFAULTINSTANCE

   Посмотрим. Тут есть подраздел 0000 с несколькими ключами и подраздел Control с одним ключом. Нам предстоит поправить как имя самого раздела, так и значение нескольких ключей. Однако система безопасности пока нам не позволит этого сделать - недостаточно прав. Дадим их себе. Для этого щёлкнем право кнопкой на разделе HKLM\SYSTEM\CurrentControlSet\Enum\Root, выберем пункт "Разрешения", и группе пользователей "Все" дадим право "Полный доступ". Сохраним изменения. Теперь вернёмся к нашему разделу. Изменим его имя (обратите внимание - только большие латинские буквы и цифры, никаких пробелов) на LEGACY_FIREBIRDSERVERINSTANCE_3_PORT_3052

   В разделе 0000 изменим значения ключей:

DeviceDesc = "Firebird Server - Instance 3 port 3052"
Service = "FirebirdServerInstance3port3052"

   В разделе Control изменим (обратите внимание - никаких пробелов) значение ключа

ActiveService = "FirebirdServerInstance3port3052"

   Обратите внимание - значения 0000\Service и Control\ActiveService должны совпадать! Потому после изменения значения 0000\Service можно просто его скопировать и затем вставить в Control\ActiveService.

   Тут - всё. Возвращаемся к разделу HKLM\SYSTEM\CurrentControlSet\Enum\Root и отбираем у группы "Все" право "Полный доступ". Сохраним изменения.

   Отправляемся в

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\FirebirdServerDefaultInstance

   Переименовываем раздел в FirebirdServerInstance3port3052. Обратите внимание - это значение должно совпадать с тем, что мы установили ранее для 0000\Service и Control\ActiveService! Но оно у нас уже в буфере обмена, так что опять используем вставку.

   Изменяем значение ключа

DisplayName = "Firebird Server - Instance 3 port 3052"

и создаём строковый параметр с именем Description и значением

Description = "Сервер Firebird версии 1.5.0.4306, режим Classic (многопоточный), имя экземпляра Instance 3, порт 3052."

   Переходим в подраздел Enum и изменяем значение ключа

0 = "LEGACY_FIREBIRDSERVERINSTANCE_3_PORT_3052\0000"

т.е. точно указываем установленное ранее имя подраздела в HKLM\SYSTEM\ CurrentControlSet\Enum\Root. Чтобы не ошибиться, лучше опять-таки воспользоваться Copy-Paste.

   Теперь следует повторить всё то же для нумерованных разделов ControlSet (ControlSet001, ControlSet003…). В одном из них наши изменения уже должны появиться, а вот в другом… если разделы/ключи есть и не изменились, нужно поправить, но если их нет - не надо их создавать, оставим как есть.

   А теперь… да всё собственно. Можно возвращаться назад и начинать установку следующего экземпляра сервера. Потом третьего… с той лишь разницей, что уже не нужно будет копировать клиентскую библиотеку в системный каталог и ставить апплет управления - они уже есть.

   И когда, наконец, все необходимые копии сервера установлены - просто перегружаем наш сервер. Все наши установки, изменения и исправления принимаются системой. По завершении перезагрузки первым делом смотрим журнал загрузки - не было ли каких проблем, связанных с нашими серверами. Если есть - лезем regedit-ом смотреть, где ошиблись, и исправлять, после чего опять перезагрузка - и так пока системные журналы не перестанут регистрировать проблемы.

   Теперь отправляемся в апплет управления службами и пробуем запустить каждый из экземпляров установленных нами сервисов. Если они не стартуют - путь известен: журнал, regedit, исправление, ребут. Если стартуют - для тех, которые нужны при загрузке, меняем запуск с "Вручную" на "Авто"… и можно даже не перегружаться. А можно и перегрузиться - ну так, для проверки.

   А для совсем уж проверки рекомендую запустить ProcessExplorer (а ещё лучше - установить его вместо диспетчера задач), и, запуская сервисы, смотреть за появлением процессов сервисов, а в свойствах процесса на вкладке TCP/IP убедиться, что каждый экземпляр слушает назначенный ему в файле конфигурации порт.

   Вот, собственно, и всё.

   Предполагаю, что для других версий Firebird и для версий InterBase методика может быть аналогичной. Ну разве что вместо FIREBIRD кое-где в реестре может оказаться INTERBASE или INTRBASE. Впрочем, кому надо - тот разберётся.

Два работающих одновременно Firebird

На главную страницу