Instalacja Firebird 3 na nowoczesnych wersjach Linux: CentOS8 i Ubuntu 19

W tym artykule opiszemy minimalny zestaw działań niezbędnych do optymalnej instalacji bazy danych Firebird w wersji 3.0 na nowych dystrybucjach Linux. Jako przykłady wybrano CentOS 8 i Ubuntu 19.

Aby „dostarczyć” dystrybucję Firebird na docelowy system, w tym przewodniku wybrano opcję pobrania archiwum tar.gz z linku na oficjalnej stronie projektu (firebirdsql.org).

Dla najbardziej niecierpliwych — od razu do akcji:

Szybka instalacja

Edytujemy plik /etc/sysctl.conf, dodając linię:

vm.max_map_count = 256000

Zapisujemy plik i stosujemy ustawienie:

sudo sysctl -p /etc/sysctl.conf

Dalsze instrukcje różnią się dla CentOS 8 i Ubuntu 19, ale LINK i KATALOG oznaczają link do oficjalnej strony projektu Firebird do pobrania dystrybucji oraz katalog, do którego dystrybucja zostanie wypakowana w trakcie pobierania.
Na chwilę obecną (marzec 2020) aktualna jest wersja Firebird 3.0.5 (oto link do wersji 64-bitowej).

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 LINK|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- LINK|tar -zxC /tmp

Zaczynamy instalację bazy danych Firebird:

cd /tmp/KATALOG
sudo ./install.sh

Jeśli chcesz lepiej zrozumieć, do czego służą te działania – czytaj dalej.

Główna część

Krótka preambuła

Zakłada się, że system operacyjny został już zainstalowany w minimalnej wersji i skonfigurowano dostęp do publicznych repozytoriów lub ich lokalnych kopii.

Zakłada się, że czytelnik ma podstawową wiedzę o Linuxie i bazie danych Firebird.

Planowanie

Na serwerze bazy danych zaleca się wydzielić oddzielne partycje na pliki tymczasowe (/tmp), pliki baz danych oraz lokalne kopie zapasowe.

Do plików tymczasowych należą pliki lock, pliki sortowania, pliki „materializacji” globalnych tabel tymczasowych (GTT) oraz tabele monitorujące. Pliki sortowania i globalne tabele tymczasowe znajdują się w /tmp, pliki mon$-tabel i pliki lock – w /tmp/firebird.

Pliki sortowania „usuwane są” (unlink) natychmiast po utworzeniu, dlatego nie można ich „zobaczyć” w liście katalogu – tylko w liście deskryptorów (handles) procesu (oznaczone jako deleted):

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

W liście pseudokatalogu /proc/…/fd/ wyświetlane są symlinki, a rzeczywiste informacje o pliku podaje:

sudo stat -L /proc/`pgrep firebird`/fd/NUMER

gdzie NUMER – deskryptor interesującego pliku.

Zamiast wywołania „pgrep plik-wykonywalnymożna od razu podstawić identyfikator interesującego procesu.

Pliki tymczasowe mogą być bardzo duże, dlatego zaleca się przeznaczenie co najmniej 20-30 GB. Należy pamiętać, że rozmiar plików sortujących zależy wyłącznie od objętości danych sortowanych w zapytaniu, a pojedynczy użytkownik może „utworzyć” gigabajty plików tymczasowych. /tmp Sekcja dla plików baz danych powinna pomieścić pliki wszystkich baz, plus przynajmniej jedną kopię pliku największej bazy. Należy uwzględnić przewidywany wzrost plików baz przez kilka lat.

Sekcja lokalnych kopii zapasowych powinna pomieścić przynajmniej jeden archiwum kopii zapasowych wszystkich baz oraz kopię największej bazy. Wskazane jest, aby w tej sekcji było również miejsce na przywrócenie największej bazy. Należy uwzględnić przewidywany wzrost kopii zapasowych i archiwów kopii zapasowych przez kilka lat.

Przygotowanie wstępne

Serwer bazy danych Firebird 3.0 dynamicznie alokuje i zwalnia pamięć systemową, co może prowadzić do jej fragmentacji. Na przykład, po jednoczesnym odłączeniu dużej liczby użytkowników od superserwera, mogą pojawić się błędy przy nowych połączeniach.

Fragmentację pamięci kontroluje parametr systemowy

vm.max_map_count , domyślnie – 64K. Zaleca się zwiększenie jego wartości czterokrotnie:sudo sysctl vm.max_map_count=256000

Aby nowa wartość była ustawiana po ponownym uruchomieniu systemu, dodajemy do pliku

wiersz: /etc/sysctl.conf Zaleca się dodanie komentarza, aby było wiadomo, dlaczego zmieniono ten parametr. Można najpierw edytować plik, a następnie zastosować zapisane w nim ustawienia:

vm.max_map_count = 256000

Instalacja niezbędnych pakietów

sudo sysctl -p /etc/sysctl.conf

Wykonywalne pliki bazy danych Firebird 3.0 na Linuxie zależą od bibliotek ncurses (

libncurses.so.5), ICU (bez związku z wersją i bez wyświetlania w wynikuldd ) i tommath (libtommath.so.0). Do pobierania i rozpakowywania archiwum potrzebne będą narzędziawget gzip, tar i curl lub . Wersje ICU są nieistotne.Praca z pakietami zależy od systemu i używanego menedżera pakietów, dlatego rozważymy je kolejno. gzip, tar i curl/. Wersje ICU są nieistotne. CentOS 8 używa nowego menedżera pakietów –

dnf

CentOS 8

i jest on również „przejrzysto” wywoływany za pomocą polecenia yum . Ponieważ nie ma różnicy między nimi w naszym przypadku – w przykładach użyjemy Aktualizacja pamięci podręcznej metadanych:sudo yum makecache Aktualizacja pamięci podręcznej metadanych:.

Pakiet libtomath znajduje się w oddzielnym repozytorium E(xtra)P(ackages for)E(nterprise)L(inux), dlatego sprawdzamy, czy jest już podłączony: yum -C repolist

yum -C repolist

Niepełna struktura

Opcja „tylko z pamięci” (-C lub --cache-only) jest używana, aby wykluczyć niepotrzebne sprawdzenia i pobrania, przyspieszając działanie yum. Jeśli w liście nie ma repozytorium epel – instalujemy je i aktualizujemy pamięć podręczną metadanych:

sudo yum install epel-release &&
sudo yum makecache

Potwierdzamy żądania, w razie potrzeby porównując wartości kluczy pgp z tymi znanymi z zaufanego źródła.

Jeśli wystąpiły problemy z pobieraniem metainformacji z repozytoriów https, edytujemy plik /etc/yum.repos.d/epel.repo, zastępując https:// na http:// i powtarzamy polecenie aktualizacji pamięci podręcznej.

Sprawdzamy status potrzebnych pakietów (polecenie złożone, w przykładzie wyjścia odfiltrowano 32-bitowy pakiet):

yum -C list 
ncurses libicu libtommath 
gzip tar curl wget |
grep -v i686
Zainstalowane pakiety
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
Dostępne pakiety
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

Widzimy, że curl, gzip i ncurses są umieszczone w pseudorepozytorium instalatora (anaconda), a tar – wykluczony z minimalnej instalacji systemu. Wersje główne libncurses i libtommath są większe, niż wymagane: 6 i 1 zamiast 5 i 0, odpowiednio. Jeśli ten sam pakiet jest zainstalowany i dostępny – dla niego wydano aktualizację. Instalujemy brakujące pakiety:

sudo yum install 
libicu libtommath tar

Ubuntu 19

Do zarządzania pakietami przeznaczone są narzędzia apt, apt‑get i apt‑cache. Pierwsze służy do interaktywnej pracy, a dwa ostatnie – do użycia w skryptach. Nazwy pakietów są nieco inne i zawierają wersję.

Sprawdzamy status potrzebnych pakietów (polecenie złożone, przykład wyjścia skrócony i odfiltrowano 32-bitowe pakiety):

apt list libncurses? libicu?? libtommath? 
gzip tar curl wget |
grep -v i386
curl 7.65.3-1
gzip 1.10-0 [wymaga aktualizacji…]
libicu63 63.2-2 [zainstalowane]
libncurses5 6.1
libncurses6 6.1 [zainstalowane, automatyczne]
libtommath1 1.1.0
tar 1.30 [zainstalowane]
wget 1.20.3 [zainstalowane]

Pakiety, dla których w kwadratowych nawiasach podano installed/upgradable – są zainstalowane. Dostępny, ale nie zainstalowany ncurses5, zamiast curl jest zainstalowana . Wersje ICU są nieistotne.. Instalujemy brakujące pakiety:

sudo apt‑get install 
libncurses5 libtommath1

Tworzenie symlinków

Ponieważ libtommath.so.1 i libncurses.so.6 są wstecznie kompatybilne z ). Do pobierania i rozpakowywania archiwum potrzebne będą narzędzia i ), ICU (bez związku z wersją i bez wyświetlania w wyniku, to dla Firebird wystarczy stworzyć symlinki do posiadanych wersji bibliotek.

Znajdujemy libtommath.so.1 (libncurses.so.? znajdują się w tym samym katalogu):

find /usr -name libtommath.so.1

CentOS:

/usr/lib64/libtommath.so.1

Ubuntu:

/usr/lib/x86_64-linux-gnu/libtommath.so.1

Tworzymy symlinki.

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

Sprawdzamy rezultat (polecenie złożone, przykłady wyjścia skrócone):

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

Pobieranie dystrybucji bazy danych Firebird.

Na oficjalnej stronie projektu Firebird (firebirdsql.org) publikowane są linki do dystrybucji "oficjalnych" wydań (releases) oraz "codziennych" kompilacji (snapshot build).

Oficjalne wydania dla Linuksa są dostępne w postaci archiwów (tar.gz) oraz pakietów deb/rpm, natomiast kompilacje – wyłącznie w formie archiwów. Będziemy rozważać "uniwersalny instalator" (generic installer z tar.gz).

Archiwum kompilacji należy pobrać i rozpakować, jednak połączymy te dwa procesy. Rozpakowanie odbywa się w /tmp, URL oznacza link do pobieranego archiwum.

curl:

curl -L URL | tar -zxC /tmp

wget:

wget -O– URL | tar -zxC /tmp

Domyślnie curl wysyła pobierane dane na standardowe wyjście, ale nie obsługuje przekierowań, więc dodajemy "‑L", a . Wersje ICU są nieistotne., przeciwnie: obsługuje przekierowania, ale zapisuje dane w pliku, więc dodajemy "‑O‑". Dla tar określamy użycie gzip-filtru oraz katalogu, do którego odbywa się rozpakowanie. Po zakończeniu procesu pojawi się katalog o nazwie Firebird‑3.0.5.33220‑0.amd64 z trzema plikami: install.sh, buildroot.tar.gz i manifest.txt.

Instalacja Firebird

W trakcie wstępnych przygotowań dostosowaliśmy wartość parametru systemowego, , domyślnie – 64K. Zaleca się zwiększenie jego wartości czterokrotnie:sprawdziliśmy dostępność oraz zainstalowaliśmy biblioteki ICU, ncurses i tommath. Upewniliśmy się, że wersje ncurses i tommath są poprawne (libncures.so.5 i ). Do pobierania i rozpakowywania archiwum potrzebne będą narzędzia) oraz stworzyliśmy niezbędne dowiązania symboliczne.

Sama instalacja jest bardzo prosta. Przechodzimy do katalogu, do którego rozpakowano archiwum dystrybucji Firebird, sprawdzamy i, w razie potrzeby, ustawiamy flagę „wykonywalny” skryptu install.sh:

chmod +x install.sh

uruchamiamy skrypt instalacyjny:

sudo ./install.sh

naciskając klawisz Enter potwierdzamy rozpoczęcie instalacji, a po otrzymaniu prośby – wprowadzamy hasło sysdba.

Skrypt instalacji automatycznie uruchamia systemd-jednostkę firebird-superserver (domyślna architektura Firebird 3.0). Usługa Firebird będzie działać z parametrami domyślnymi dla superserwera: pamięć podręczna stron w wysokości 2048 stron (na bazę), bufor sortowania o pojemności 64 MB (ogólny) oraz połączenia tylko dla klientów trzeciej wersji. Przegląd parametrów firebird.conf:

grep -v ^# firebird.conf | grep -v ^$

Należy pamiętać, że nowe wartości z firebird.conf będą aktywowane dopiero po ponownym uruchomieniu usługi Firebird.

Podczas dobierania wartości parametrów należy wziąć pod uwagę, że istnieją trzy główne „konsumenty”: pamięć podręczna stron (dla bazy), bufor sortowania (ogólny) oraz pamięć przydzielona przez serwer dla połączeń klienckich. Można zarządzać tylko pierwszymi dwoma – wielkość pamięci dla połączeń klienckich zależy od liczby i treści kaskadowanych zapytań, ich planu oraz obiektów bazy zaangażowanych w zapytania. Ocena pamięci dla połączeń klienckich dokonuje się tylko empirycznie i może się zmieniać przy zmianie aplikacji klienckich i/lub obiektów bazy.

Dla superserwera na hostach z małą ilością pamięci (do 12-16 GB) nie należy przeznaczać na pamięć podręczną stron i bufor sortowania więcej niż jedną trzecią-czwartą całkowitej pamięci RAM.

Jeśli liczba baz nie jest stała i może się zmieniać – całkowitą ilość pamięci podręcznej stron należy podzielić przez maksymalną liczbę baz, które mogą być na serwerze. Rozmiar pamięci podręcznej stron określa się w stronach i należy go osobno przeliczyć na bajty.

Aby przełączyć się na architekturę klasyczną, należy wyraźnie wskazać ServerMode do firebird.conf, zmniejszyć jednocześnie pamięć podręczną stron (nie więcej niż 2K), zmniejszyć bufor sortowania (łączna dozwolona wielkość wszystkich sortowań, podzielona przez maksymalną liczbę połączeń), zablokować i zatrzymać jednostkę firebird-superserver, zezwolić i uruchomić jednostkę firebird-classic.socket.

Użycie architektury superklasycznej w Firebird 3.0 nie ma specjalnego sensu: „niezawodność” – jak w superserwerze i taki sam ogólny bufor sortowania. Nie ma wspólnej pamięci podręcznej stron, a „straty” na synchronizację różnych połączeń są takie same jak w wersji klasycznej.

Należy pamiętać, że w Firebird 3.0 część parametrów (pamięć podręczna stron, rozmiary plików lokalnych, tablice haszujące i kilka innych) można ustawić w databases.conf indywidualnie dla każdej bazy. Dla superserwera przydatne jest na przykład ustawienie małej wartości DefaultDbCachePages do firebird.conf i ustalenie indywidualnych pamięci podręcznych dla potrzebnych baz w databases.conf.

Pytania dotyczące artykułu można zadawać w komentarzach lub pisać maile na nasz adres wsparcia support@ibase.ru.

Źródło: habr.com

Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS 🔥 Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS | ProHoster