Усталёўка 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-бітную версію).

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.

Пытанні па артыкуле задавайце ў каментарах, ці пішыце лісты на наш адрас падтрымкі [электронная пошта абаронена].

Крыніца: habr.com

Дадаць каментар