Установка Firebird 3 на современные версии Linux: CentOS8 и Ubuntu 19
В этой статье мы опишем минимальный набор действий, необходимых для оптимальной установки СУБД Firebird версии 3.0 на новые дистрибутивы Linux. Для примеров выбраны CentOS 8 и Ubuntu 19.
Для «доставки» дистрибутива Firebird на целевую систему, в этом руководстве, выбран вариант загрузки tar.gz архива по ссылке с официального сайта проекта (firebirdsql.org).
Для самых нетерпеливых — сразу в бой:
Быстрая установка
Редактируем файл /etc/sysctl.conf , добавляя строку:
Сохраняем файл и применяем настройку:
sudo sysctl -p /etc/sysctl.conf
Дальнейшие инструкции различаются для CentOS 8 и Ubuntu 19, но ССЫЛКА и КАТАЛОГ обозначают ссылку с официального сайта проекта Firebird для загрузки дистрибутива и каталог, в который будет распакован дистрибутив в процессе загрузки.
На текущий момент (март 2020) актуален релиз Firebird 3.0.5 (вот ссылка на 64-битную версию).
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
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 строчку:
Желательно сделать комментарий, чтобы была понятна причина изменения этого параметра. Можно сначала отредактировать файл, а затем применить сохранённые в нём установки:
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 использует новый пакетный менеджер – dnf и он же «прозрачно» вызывается по команде yum . Поскольку для наших целей между ними нет разницы – в примерах будет yum .
Обновляем кэш метаданных: sudo yum makecache
Пакет libtomath находится в отдельном E(xtra)P(ackages for)E(nterprise)L(inux) репозитории, поэтому проверяем, что он уже подключен:
Опция «только из кэша» ( -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
Для управления пакетами предназначены утилиты 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
/usr/lib/x86_64-linux-gnu/libtommath.so.1
sudo ln -s libtommath.so.1 \ /usr/lib64/libtommath.so.0 sudo ln -s libncurses.so.6 \ /usr/lib64/libncurses.so.5
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\."
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*
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 посылает загружаемые данные на стандартный вывод, но не обрабатывает перенаправления и мы добавляем « ‑L », а wget , наоборот: обрабатывает перенаправления, но записывает данные в файл и мы ставим « ‑O‑ ». Для tar указываем использование gzip -фильтра и каталог, в который будет выполнена распаковка. По завершении процесса появится каталог вида Firebird‑3.0.5.33220‑0.amd64 с тремя файлами: install.sh , buildroot.tar.gz и manifest.txt .
В ходе предварительной подготовки мы отрегулировали значение системного параметра vm.max_map_count , проверили наличие и установили библиотеки ICU, ncurses и tommath. Убедились в правильности версий ncurses и tommath ( libncures.so.5 и libtommath.so.0 ) и создали необходимые симлинки.
Собственно установка делается очень просто. Переходим в каталог, куда был распакован архив дистрибутива Firebird, проверяем и, при необходимости, устанавливаем флаг «исполняемый» скрипту 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.