Прежде чем перейти к статье, хочу вам представить, экономическую онлайн игру Brave Knights, в которой вы можете играть и зарабатывать. Регистируйтесь, играйте и зарабатывайте!
В этой статье мы опишем минимальный набор действий, необходимых для оптимальной установки СУБД Firebird версии 3.0 на новые дистрибутивы Linux. Для примеров выбраны CentOS 8 и Ubuntu 19.
Для «доставки» дистрибутива Firebird на целевую систему, в этом руководстве, выбран вариант загрузки tar.gz архива по ссылке с официального сайта проекта (firebirdsql.org).
Для самых нетерпеливых — сразу в бой:
Редактируем файл
Сохраняем файл и применяем настройку:
Дальнейшие инструкции различаются для CentOS 8 и Ubuntu 19, но
На текущий момент (март 2020) актуален релиз Firebird 3.0.5 (вот ссылка на 64 битную версию).
CentOS 8
Ubuntu 19
Собственно установка СУБД Firebird:
Если вы хотите лучше понимать, что чего служат эти действия – читайте дальше.
Основная часть
Небольшая преамбула
Предполагается, что уже ОС установлена в минимальном варианте и настроен доступ к публичным репозиториям или к их локальным копиям.
Предполагается, что у читателя есть базовые знания о Linux и, СУБД Firebird.
Планирование
На сервере СУБД рекомендуется выделять отдельные разделы для временных файлов (
К временным относятся lock-файлы, файлы сортировок, файлы «материализации» глобальных временных таблиц (GTT) и таблиц мониторинга. Файлы сортировок и глобальных временных таблиц расположены в
Файлы сортировок «удаляются» (
В листинге псевдокаталога
где
Вместо вызова «
Временные файлы могут быть очень большими, поэтому для
Раздел для файлов баз данных должен вмещать файлы всех баз плюс, как минимум, копию файла самой большой базы. Следует учитывать рост файлов баз в перспективе на несколько лет вперёд.
Раздел локальных бэкапов должен вмещать, как минимум, по одному архиву бэкапов всех баз плюс бэкап самой большой базы. Желательно, чтобы на этом разделе было и место для восстановления самой большой базы. Следует учитывать рост бэкапов и архивов бэкапов в перспективе на несколько лет вперёд.
Предварительная подготовка
Сервер СУБД Firebird 3.0 динамически выделяет и освобождает системную память, что может приводить к её фрагментации. Например, после единовременного отключения от суперсервера большого числа пользователей, могут возникают ошибки при новых подключениях.
Фрагментацию памяти контролирует системный параметр
Чтобы новое значение устанавливалось при перезагрузке системы, добавляем в файл
Желательно сделать комментарий, чтобы была понятна причина изменения этого параметра. Можно сначала отредактировать файл, а затем применить сохранённые в нём установки:
Установка необходимых пакетов
Исполняемые файлы СУБД Firebird 3.0 Linux зависят от библиотек ncurses (
Работа с пакетами зависит от системы и от используемого в системе пакетного менеджера, поэтому рассмотрим их поочерёдно.
CentOS 8
CentOS 8 использует новый пакетный менеджер –
Обновляем кэш метаданных:
Пакет libtomath находится в отдельном E(xtra)P(ackages for)E(nterprise)L(inux) репозитории, поэтому проверяем, что он уже подключен:
Опция «только из кэша» (
Подтверждаем запросы, при необходимости сверяя значения pgp-ключей с уже известными из доверенного источника.
Если возникли проблемы при загрузке метаинформации репозитория с https-ресурсов, то редактируем файл
Проверяем статус нужных пакетов (команда сложена, в примере вывода отфильтрован 32-разрядный пакет):
Видим, что
Ubuntu 19
Для управления пакетами предназначены утилиты
Проверяем статус нужных пакетов (команда сложена, пример вывода сокращён и отфильтрованы 32-разрядные пакеты):
Пакеты, для которых в квадратных скобках указано
Создание симлинков
Поскольку
Находим
CentOS:
Ubuntu:
Создаём симлинки.
CentOS:
Ubuntu:
Проверяем результат (команда сложена, примеры вывода сокращены):
CentOS:
Ubuntu:
Загрузка дистрибутива СУБД Firebird.
На официальном сайте проекта Firebird (firebirdsql.org) публикуются ссылки на дистрибутивы «официальных» выпусков (releases) и «ежедневных» сборок (snapshot build).
Официальные выпуски для линукса доступны в виде архивов (tar.gz) и пакетов deb/rpm, а сборки – только в виде архивов. Мы будем рассматривать «общий установщик» (generic installer из tar.gz).
Архив сборки требуется загрузить и распаковать, но мы совместим оба этих процесса. Распаковка делается в
curl:
wget:
По умолчанию
Установка Firebird
В ходе предварительной подготовки мы отрегулировали значение системного параметра
Собственно установка делается очень просто. Переходим в каталог, куда был распакован архив дистрибутива Firebird, проверяем и, при необходимости, устанавливаем флаг «исполняемый» скрипту
запускаем инсталяционный скрипт:
нажатием клавиши Enter подтверждаем начало установки, а по получении запроса – вводим пароль sysdba.
Скрипт установки автоматически запускает
Следует учитывать, что новые значения из
При подборе значений параметров следует учитывать, что есть три основных «потребителя»: страничный кэш (для базы), буфер сортировок (общий) и память, выделенная сервером для клиентских подключений. Управлять можно только первыми двумя – объём памяти клиентских подключений зависит от количества и текста кэшированных запросов, их планов и задействованных в запросах объектов базы. Оценка памяти клиентских подключений делается только эмпирически и может меняться при изменении клиентских приложений и/или объектов базы.
Для суперсервера на хостах с малым объёмом памяти (до 12-16 ГБ) не следует выделять для страничного кэша и буфера сортировки более трети-четверти от общего объёма ОЗУ.
Если количество баз не фиксировано и может меняться – общий объём памяти страничного кэша следует делить на максимальное количество баз, которые могут быть на сервере. Размер страничного кэша задаётся в страницах и его надо отдельно пересчитывать в байты.
Для переключения на архитектуру классика требуется, как минимум, явно указать
Использование архитектуры суперклассик в Firebird 3.0 не имеет особого смысла: «надёжность» – как у суперсервера и такой же общий буфер сортировок. Нет общего страничного кэша и «потери» на синхронизацию разных подключений между собой такие же, как у классика.
Следует помнить, что в Firebird 3.0 часть параметров (страничный кэш, размеры лок-файла, хэш-таблицы и некоторые другие) можно задавать в
Вопросы по статье задавайте в комментариях, или пишите письма на наш адрес поддержки support@ibase.ru.
Для «доставки» дистрибутива 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.