Установка Firebird 3 на сучасні версії Linux: CentOS8 та Ubuntu 19

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

Для доставки дистрибутива 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-бітну версію).

8 CentOS

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 - Неістотні.

Робота з пакетами залежить від системи та від пакетного менеджера, що використовується в системі, тому розглянемо їх по черзі.

8 CentOS

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 -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.

Запитання за статтею ставте в коментарях, або пишіть листи на нашу адресу підтримки [захищено електронною поштою].

Джерело: habr.com

Додати коментар або відгук