Firebird 3 installimine kaasaegsetele Linuxi versioonidele: CentOS8 ja Ubuntu 19

В этой статье мы опишем минимальный набор действий, необходимых для оптимальной установки СУБД Firebird версии 3.0 на новые дистрибутивы Linux. Для примеров выбраны CentOS 8 и Ubuntu 19.

Для «доставки» дистрибутива Firebird на целевую систему, в этом руководстве, выбран вариант загрузки tar.gz архива по ссылке с официального сайта проекта (firebirdsql.org).

Для самых нетерпеливых — сразу в бой:

Kiire installatsioon

Toimetame faili /etc/sysctl.conf, добавляя строку:

vm.max_map_count = 256000

Сохраняем файл и применяем настройку:

sudo sysctl -p /etc/sysctl.conf

Дальнейшие инструкции различаются для CentOS 8 и Ubuntu 19, но ССЫЛКА ja КАТАЛОГ обозначают ссылку с официального сайта проекта 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

Если вы хотите лучше понимать, что чего служат эти действия – читайте дальше.

Põhiosa

Небольшая преамбула

Предполагается, что уже ОС установлена в минимальном варианте и настроен доступ к публичным репозиториям или к их локальным копиям.

Предполагается, что у читателя есть базовые знания о Linux и, СУБД Firebird.

Planeerimine

На сервере СУБД рекомендуется выделять отдельные разделы для временных файлов (/tmp), файлов баз данных и локальных бэкапов.

К временным относятся lock-файлы, файлы сортировок, файлы «материализации» глобальных временных таблиц (GTT) и таблиц мониторинга. Файлы сортировок и глобальных временных таблиц расположены в /tmp, файлы mon$-таблиц и lock-файлы – в /tmp/firebird.

Файлы сортировок «удаляются» (unlink) сразу после создания, поэтому их нельзя «увидеть» в листинге каталога – только в списке описателей (handles) процесса (помечены как kustutatud):

sudo ls -lhF /proc/`pgrep firebird`/fd

В листинге псевдокаталога /proc/…/fd/ отображаются симлинки, а фактическую информацию о файле даёт:

sudo stat -L /proc/`pgrep firebird`/fd/НОМЕР

kus НОМЕР – описатель (дескриптор) интересующего файла.

Вместо вызова «pgrep исполняемый-файл» можно сразу подставить идентификатор интересующего процесса.

Временные файлы могут быть очень большими, поэтому для /tmp рекомендуется выделять не менее 20-30 ГБ. Следует учитывать, что размер файлов сортировок зависит только от объёма данных, явно или неявно сортируемых в запросе и один-единственный пользователь может «создать» гигабайты временных файлов.

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

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

Eelnevad ettevalmistused

Сервер СУБД 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 ja curl või wget. Версии ICU, gzip, tar ja 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 või --cache-only) используется, чтобы исключить ненужные проверки и загрузки, ускорив работу yum. Если в списке нет epel-репозитория – устанавливаем его и обновляем кэш метаданных:

sudo yum install epel-release &&
sudo yum makecache

Подтверждаем запросы, при необходимости сверяя значения pgp-ключей с уже известными из доверенного источника.

Если возникли проблемы при загрузке метаинформации репозитория с https-ресурсов, то редактируем файл /etc/yum.repos.d/epel.repo, заменяя https:// järgnevaga 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

Näeme, et curl, gzip ja ncurses размещены в псевдорепозитории установщика (anaconda), and tar – исключён из минимальной установки системы. Мажорные версии libncurses ja libtommath больше, чем требуется: 6 и 1 вместо 5 и 0, соответственно. Если один и тот же пакет и установлен и доступен – для него выпущено обновление. Устанавливаем недостающие пакеты:

sudo yum install 
libicu libtommath tar

Ubuntu 19

Для управления пакетами предназначены утилиты apt, apt‑get ja 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, selle asemel curl paigaldatud wget. Устанавливаем недостающие пакеты:

sudo apt‑get install 
libncurses5 libtommath1

Создание симлинков

Kuna libtommath.so.1 ja libncurses.so.6 обратно совместимы с libtommath.so.0 ja libncurses.so.5, то для Firebird достаточно создать симлинки на имеющиеся версии библиотек.

Leiame 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

Vaikimisi curl посылает загружаемые данные на стандартный вывод, но не обрабатывает перенаправления и мы добавляем «‑L», а wget, наоборот: обрабатывает перенаправления, но записывает данные в файл и мы ставим «‑O‑». Для tar указываем использование gzip-фильтра и каталог, в который будет выполнена распаковка. По завершении процесса появится каталог вида Firebird‑3.0.5.33220‑0.amd64 с тремя файлами: install.sh, buildroot.tar.gz ja manifest.txt.

Установка Firebird

В ходе предварительной подготовки мы отрегулировали значение системного параметра vm.max_map_count, проверили наличие и установили библиотеки ICU, ncurses и tommath. Убедились в правильности версий ncurses и tommath (libncures.so.5 ja 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 ühes firebird.conf, уменьшить там же страничный кэш (не более 2K), уменьшить буфер сортировок (суммарный допустимый объём всех сортировок, поделённый на максимальное количество подключений), запретить и остановить юнит firebird-superserver, разрешить и запустить юнит firebird-classic.socket.

Использование архитектуры суперклассик в Firebird 3.0 не имеет особого смысла: «надёжность» – как у суперсервера и такой же общий буфер сортировок. Нет общего страничного кэша и «потери» на синхронизацию разных подключений между собой такие же, как у классика.

Следует помнить, что в Firebird 3.0 часть параметров (страничный кэш, размеры лок-файла, хэш-таблицы и некоторые другие) можно задавать в databases.conf индивидуально для каждой базы. Для суперсервера полезно, например, задать маленькое значение DefaultDbCachePages ühes firebird.conf и установить индивидуальные страничные кэши нужным базам в databases.conf.

Вопросы по статье задавайте в комментариях, или пишите письма на наш адрес поддержки support@ibase.ru.

Allikas: habr.com

Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid 🔥 Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster