Для «доставки» дистрибутива Firebird на целевую систему, в этом руководстве, выбран вариант загрузки tar.gz архива по ссылке с официального сайта проекта (firebirdsql.org).
Для самых нетерпеливых — сразу в бой:
Быстрая установка
Редактируем файл
/etc/sysctl.conf
, добавляя строку:vm.max_map_count = 256000
Сохраняем файл и применяем настройку:
sudo sysctl -p /etc/sysctl.conf
Дальнейшие инструкции различаются для CentOS 8 и Ubuntu 19, но
ССЫЛКА
и КАТАЛОГ
обозначают ссылку с официального сайта проекта Firebird для загрузки дистрибутива и каталог, в который будет распакован дистрибутив в процессе загрузки.На текущий момент (март 2020) актуален релиз Firebird 3.0.5 (вот ссылка на 64-битную версию).
CentOS 8
sudo yum -y install epel-release
sudo yum -y makecache
sudo yum -y install libicu libtommath tar
ln -s libncurses.so.5 /usr/lib64/libncurses.so.5
ln -s libtommath.so.1 /usr/lib64/libtommath.so.0
curl -L ССЫЛКА|tar -zxC /tmp
Ubuntu 19
sudo apt-get -y install libncurses5 libtommath1
ln -s libtommath.so.1 /usr/lib/x86_64-linux-gnu/libtommath.so.0
wget -O- ССЫЛКА|tar -zxC /tmp
Собственно установка СУБД Firebird:
cd /tmp/КАТАЛОГ
sudo ./install.sh
Если вы хотите лучше понимать, что чего служат эти действия – читайте дальше.
Основная часть
Небольшая преамбула
Предполагается, что уже ОС установлена в минимальном варианте и настроен доступ к публичным репозиториям или к их локальным копиям.
Предполагается, что у читателя есть базовые знания о Linux и, СУБД Firebird.
Планирование
На сервере СУБД рекомендуется выделять отдельные разделы для временных файлов (
/tmp
), файлов баз данных и локальных бэкапов.К временным относятся lock-файлы, файлы сортировок, файлы «материализации» глобальных временных таблиц (GTT) и таблиц мониторинга. Файлы сортировок и глобальных временных таблиц расположены в
/tmp
, файлы mon$-таблиц и lock-файлы – в /tmp/firebird
.Файлы сортировок «удаляются» (
unlink
) сразу после создания, поэтому их нельзя «увидеть» в листинге каталога – только в списке описателей (handles) процесса (помечены как deleted
):sudo ls -lhF /proc/`pgrep firebird`/fd
В листинге псевдокаталога
/proc/…/fd/
отображаются симлинки, а фактическую информацию о файле даёт:sudo stat -L /proc/`pgrep firebird`/fd/НОМЕР
где
НОМЕР
– описатель (дескриптор) интересующего файла.Вместо вызова «
pgrep исполняемый-файл
» можно сразу подставить идентификатор интересующего процесса.Временные файлы могут быть очень большими, поэтому для
/tmp
рекомендуется выделять не менее 20-30 ГБ. Следует учитывать, что размер файлов сортировок зависит только от объёма данных, явно или неявно сортируемых в запросе и один-единственный пользователь может «создать» гигабайты временных файлов.Раздел для файлов баз данных должен вмещать файлы всех баз. плюс, как минимум, копию файла самой большой базы. Следует учитывать рост файлов баз в перспективе на несколько лет вперёд.
Раздел локальных бэкапов должен вмещать, как минимум, по одному архиву бэкапов всех баз плюс бэкап самой большой базы. Желательно, чтобы на этом разделе было и место для восстановления самой большой базы. Следует учитывать рост бэкапов и архивов бэкапов в перспективе на несколько лет вперёд.
Предварительная подготовка
Сервер СУБД Firebird 3.0 динамически выделяет и освобождает системную память, что может приводить к её фрагментации. Например, после единовременного отключения от суперсервера большого числа пользователей, могут возникают ошибки при новых подключениях.
Фрагментацию памяти контролирует системный параметр
vm.max_map_count
, по умолчанию – 64K. Рекомендуется увеличить его значение вчетверо:sudo sysctl vm.max_map_count=256000
Чтобы новое значение устанавливалось при перезагрузке системы, добавляем в файл
/etc/sysctl.conf
строчку:vm.max_map_count = 256000
Желательно сделать комментарий, чтобы была понятна причина изменения этого параметра. Можно сначала отредактировать файл, а затем применить сохранённые в нём установки:
sudo sysctl -p /etc/sysctl.conf
Установка необходимых пакетов
Исполняемые файлы СУБД Firebird 3.0 Linux зависят от библиотек ncurses (
libncurses.so.5
), ICU (без привязки к версии и без отображения в выводе ldd
) и tommath (libtommath.so.0
). Для загрузки и распаковки архива сборки потребуются утилиты gzip
, tar
и curl
или wget
. Версии ICU, gzip
, tar
и curl
/wget
– несущественны.Работа с пакетами зависит от системы и от используемого в системе пакетного менеджера, поэтому рассмотрим их поочерёдно.
CentOS 8
CentOS 8 использует новый пакетный менеджер –
dnf
и он же «прозрачно» вызывается по команде yum
. Поскольку для наших целей между ними нет разницы – в примерах будет yum
.Обновляем кэш метаданных:
sudo yum makecache
Пакет libtomath находится в отдельном E(xtra)P(ackages for)E(nterprise)L(inux) репозитории, поэтому проверяем, что он уже подключен:
yum -C repolist
Опция «только из кэша» (
-C
или --cache-only
) используется, чтобы исключить ненужные проверки и загрузки, ускорив работу yum. Если в списке нет epel-репозитория – устанавливаем его и обновляем кэш метаданных:sudo yum install epel-release &&
sudo yum makecache
Подтверждаем запросы, при необходимости сверяя значения pgp-ключей с уже известными из доверенного источника.
Если возникли проблемы при загрузке метаинформации репозитория с https-ресурсов, то редактируем файл
/etc/yum.repos.d/epel.repo
, заменяя https://
на http://
и повторяем команду обновления кэша.Проверяем статус нужных пакетов (команда сложена, в примере вывода отфильтрован 32-разрядный пакет):
yum -C list ncurses libicu libtommath gzip tar curl wget |
grep -v i686
Installed Packages
curl.x86_64 7.61.1-11.el8 @anaconda
gzip.x86_64 1.9-9.el8 @anaconda
ncurses.x86_64 6.1-7.20180224.el8 @anaconda
Available Packages
libicu.x86_64 60.3-1.el8 BaseOS
libtommath.x86_64 1.1.0-1.el8 epel
tar.x86_64 2:1.30-4.el8 BaseOS
wget.x86_64 1.19.5-8.el8_1.1 AppStream
Видим, что
curl
, gzip
и ncurses
размещены в псевдорепозитории установщика (anaconda
), а tar
– исключён из минимальной установки системы. Мажорные версии libncurses
и libtommath
больше, чем требуется: 6 и 1 вместо 5 и 0, соответственно. Если один и тот же пакет и установлен и доступен – для него выпущено обновление. Устанавливаем недостающие пакеты:sudo yum install libicu libtommath tar
Ubuntu 19
Для управления пакетами предназначены утилиты
apt
, apt?get
и apt?cache
. Первая рассчитана на интерактивную работу, а две последние – на использование в скриптах. Имена пакетов немного другие и включают версию.Проверяем статус нужных пакетов (команда сложена, пример вывода сокращён и отфильтрованы 32-разрядные пакеты):
apt list libncurses? libicu?? libtommath? gzip tar curl wget |
grep -v i386
curl 7.65.3-1
gzip 1.10-0 [upgradable…]
libicu63 63.2-2 [installed]
libncurses5 6.1
libncurses6 6.1 [installed,automatic]
libtommath1 1.1.0
tar 1.30 [installed]
wget 1.20.3 [installed]
Пакеты, для которых в квадратных скобках указано
installed
/upgradable
– установлены. Доступен, но не установлен ncurses5
, вместо curl
установлен wget
. Устанавливаем недостающие пакеты:sudo apt?get install libncurses5 libtommath1
Создание симлинков
Поскольку
libtommath.so.1
и libncurses.so.6
обратно совместимы с libtommath.so.0
и libncurses.so.5
, то для Firebird достаточно создать симлинки на имеющиеся версии библиотек.Находим
libtommath.so.1
(libncurses.so.?
расположены в этом же каталоге ):find /usr -name libtommath.so.1
CentOS:
/usr/lib64/libtommath.so.1
Ubuntu:
/usr/lib/x86_64-linux-gnu/libtommath.so.1
Создаём симлинки.
CentOS:
sudo ln -s libtommath.so.1 /usr/lib64/libtommath.so.0
sudo ln -s libncurses.so.6 /usr/lib64/libncurses.so.5
Ubuntu:
sudo ln -s libtommath.so.1 /usr/lib/x86_64-linux-gnu/libtommath.so.0
Проверяем результат (команда сложена, примеры вывода сокращены):
ls -lhF $(dirname `find /usr -name libtommath.so.1`) |
grep "lib\(ncurses\|tommath\)\.so\."
CentOS:
libncurses.so.5 -> libncurses.so.6*
libncurses.so.6 -> libncurses.so.6.1*
libncurses.so.6.1*
libtommath.so.0 -> libtommath.so.1*
libtommath.so.1 -> libtommath.so.1.1.0*
libtommath.so.1.1.0*
Ubuntu:
libncurses.so.5 -> libncurses.so.5.9
libncurses.so.5.9
libncurses.so.6 -> libncurses.so.6.1
libncurses.so.6.1
libtommath.so.0 -> libtommath.so.1
libtommath.so.1 -> libtommath.so.1.1.0
libtommath.so.1.1.0
Загрузка дистрибутива СУБД Firebird.
На официальном сайте проекта Firebird (firebirdsql.org) публикуются ссылки на дистрибутивы «официальных» выпусков (releases) и «ежедневных» сборок (snapshot build).
Официальные выпуски для линукса доступны в виде архивов (tar.gz) и пакетов deb/rpm, а сборки – только в виде архивов. Мы будем рассматривать «общий установщик» (generic installer из tar.gz).
Архив сборки требуется загрузить и распаковать, но мы совместим оба этих процесса. Распаковка делается в
/tmp
, URL обозначает ссылку на загружаемый архив.curl:
curl -L URL | tar -zxC /tmp
wget:
wget -O– URL | tar -zxC /tmp
По умолчанию
curl
посылает загружаемые данные на стандартный вывод, но не обрабатывает перенаправления и мы добавляем «?L
», а wget
, наоборот: обрабатывает перенаправления, но записывает данные в файл и мы ставим «?O?
». Для tar
указываем использование gzip
-фильтра и каталог, в который будет выполнена распаковка. По завершении процесса появится каталог вида Firebird?3.0.5.33220?0.amd64
с тремя файлами: install.sh
, buildroot.tar.gz
и manifest.txt
.Установка Firebird
В ходе предварительной подготовки мы отрегулировали значение системного параметра
vm.max_map_count
, проверили наличие и установили библиотеки ICU, ncurses и tommath. Убедились в правильности версий ncurses и tommath (libncures.so.5
и libtommath.so.0
) и создали необходимые симлинки.Собственно установка делается очень просто. Переходим в каталог, куда был распакован архив дистрибутива Firebird, проверяем и, при необходимости, устанавливаем флаг «исполняемый» скрипту
install.sh
:chmod +x install.sh
запускаем инсталяционный скрипт:
sudo ./install.sh
нажатием клавиши Enter подтверждаем начало установки, а по получении запроса – вводим пароль sysdba.
Скрипт установки автоматически запускает
systemd
-юнит firebird-superserver
(умалчиваемая архитектура Firebird 3.0). Сервис Firebird будет работать с параметрами по умолчанию для суперсервера: страничный кэш в 2048 страниц (на базу), буфер сортировок в 64 МБ (общий) и подключение только клиентов третьей версии. Просмотр параметров firebird.conf
:grep -v ^# firebird.conf | grep -v ^$
Следует учитывать, что новые значения из
firebird.conf
будут активированы только после перезапуска сервиса Firebird.При подборе значений параметров следует учитывать, что есть три основных «потребителя»: страничный кэш (для базы), буфер сортировок (общий) и память, выделенная сервером для клиентских подключений. Управлять можно только первыми двумя – объём памяти клиентских подключений зависит от количества и текста кэшированных запросов, их планов и задействованных в запросах объектов базы. Оценка памяти клиентских подключений делается только эмпирически и может меняться при изменении клиентских приложений и/или объектов базы.
Для суперсервера на хостах с малым объёмом памяти (до 12-16 ГБ) не следует выделять для страничного кэша и буфера сортировки более трети-четверти от общего объёма ОЗУ.
Если количество баз не фиксировано и может меняться – общий объём памяти страничного кэша следует делить на максимальное количество баз, которые могут быть на сервере. Размер страничного кэша задаётся в страницах и его надо отдельно пересчитывать в байты.
Для переключения на архитектуру классика требуется, как минимум, явно указать
ServerMode
в firebird.conf
, уменьшить там же страничный кэш (не более 2K), уменьшить буфер сортировок (суммарный допустимый объём всех сортировок, поделённый на максимальное количество подключений), запретить и остановить юнит firebird-superserver
, разрешить и запустить юнит firebird-classic.socket
.Использование архитектуры суперклассик в Firebird 3.0 не имеет особого смысла: «надёжность» – как у суперсервера и такой же общий буфер сортировок. Нет общего страничного кэша и «потери» на синхронизацию разных подключений между собой такие же, как у классика.
Следует помнить, что в Firebird 3.0 часть параметров (страничный кэш, размеры лок-файла, хэш-таблицы и некоторые другие) можно задавать в
databases.conf
индивидуально для каждой базы. Для суперсервера полезно, например, задать маленькое значение DefaultDbCachePages
в firebird.conf
и установить индивидуальные страничные кэши нужным базам в databases.conf
.Вопросы по статье задавайте в комментариях, или пишите письма на наш адрес поддержки support@ibase.ru.
kichik91
Здравствуйте, скольки ядерный процессор будет оптимальным для использования FB 3? Я имею в виду имеет ли смысл процессор с кол-вом ядер более 24? Так как для 2.5 вроде как не имеет…
AlexeyKovyazin Автор
Добрый день. Нет ограничений на число ядер — видел и 56 и 64 прилично загруженными. В 2.5 надо использовать Classic или SuperClassic, а лучше — мигрировать на 3-ку.