У гэтым артыкуле мы апішам мінімальны набор дзеянняў, неабходных для аптымальнай усталёўкі СКБД Firebird версіі 3.0 на новыя дыстрыбутывы Linux. Для прыкладаў абраны CentOS 8 і Ubuntu 19.
Для "дастаўкі" дыстрыбутыва Firebird на мэтавую сістэму, у гэтым кіраўніцтве, абраны варыянт загрузкі tar.gz архіва па спасылцы з афіцыйнага сайта праекта (
Для самых нецярплівых - адразу ў бой:
Хуткая ўстаноўка
Рэдагуем файл /etc/sysctl.conf
, дадаючы радок:
vm.max_map_count = 256000
Захоўваем файл і ўжываем настройку:
sudo sysctl -p /etc/sysctl.conf
Далейшыя інструкцыі адрозніваюцца для CentOS 8 і Ubuntu 19, але ССЫЛКА
и КАТАЛОГ
абазначаюць спасылку з афіцыйнага сайта праекта Firebird для загрузкі дыстрыбутыва і каталог, у які будзе распакаваны дыстрыбутыў у працэсе загрузкі.
На бягучы момант (сакавік 2020) актуальны рэліз Firebird 3.0.5 (
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