DEV Community

Andrzej Klusiewicz
Andrzej Klusiewicz

Posted on

Profesjonalne wdrozenie klastra PostgreSQL na Red Hat / RHEL / Rocky Linux

Instalacja PostgreSQL 'na szybko' rozni sie od wdrozenia gotowego pod realna produkcje - repozytoria PGDG, dedykowany dysk, wlasciwe parametry systemowe. Pokazujemy pelna sciezke na rodzinie Red Hat.

Jak poprawnie wdrożyć klaster PostgreSQL na systemach z rodziny Red Hat?
Jak sprawić by uruchamiał się automatycznie z systemem? Jak określić położenie PGDATA? Na te i inne pytania znajdziesz odpowiedzi w tym artykule :)

Z tego artykułu dowiesz się:

  • jak zainstalować binaria wybranej wersji (a nie koniecznie domyślnej dla systemu) na serwerach z systemami rodziny Red Hat,- gdzie co leży,- jak dodać binaria PostgreSQL do PATHa,- jak samemu zdefiniować położenie klastra,- jak skonfigurować by PostgreSQL działał jako usługa (dzięki czemu wygodniej się nim zarządza),- jak skonfigurować automatyczny start PostgreSQL z systemem,- jak skonfigurować system rodziny Red Hat w taki sposób, by nie restartował PostgreSQL w przypadku gdy zacznie kończyć się pamięć RAM,- jak skonfigurować system rodziny Red Hat w taki sposób, by nie wpadał w nieskończony cykl odtwarzania.

Poniższe czynności wykonujemy jako użytkownik systemowy z uprawnieniami do sudo:

Pierwszy krok to konfiguracja repozytorium z pliku RPM:

sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-9-x86_64/pgdg-redhat-repo-latest.noarch.rpm
Enter fullscreen mode Exit fullscreen mode

Następny- wyłączenie domyślnie dostępnego pakietu postgresa:

sudo dnf -qy module disable postgresql
Enter fullscreen mode Exit fullscreen mode

Instalacja dostępnych aktualizacji:

sudo yum upgrade -y
Enter fullscreen mode Exit fullscreen mode

Restart serwera po aktualizacji, ponieważ niektóre paczki, szczególnie te aktualizujące jądro linuxa, nie będą “aktywne” do następnego startu serwera:

sudo reboot
Enter fullscreen mode Exit fullscreen mode

Instalacja binarek serwera PostgreSQL:

sudo dnf install postgresql15-server -y
Enter fullscreen mode Exit fullscreen mode

Domyślnie PostgreSQL w CentOS będzie miał pliki rozmieszczone w takich lokalizacjach:

Katalog z binariami: /usr/pgsql-15/bin/

Katalog domowy postgresa: /var/lib/pgsql

Chcemy, by nasze dane były gdzie indziej niż w domyślnej lokalizacji (np. na innym dysku). W tym celu musimy stworzyć katalog w pożądanej lokalizacji, sprawić, by jego właścicielem był użytkownik systemowy postgres (tworzony automatycznie podczas instalacji) oraz zainicjalizować i sprawdzić, czy działa.

Utworzenie katalogu na naszą PGDATA:

sudo mkdir -m 700 /data_pg
sudo chown postgres: /data_pg/
Enter fullscreen mode Exit fullscreen mode

Inicjalizacja i start nowego klastra. Przechodzimy tu do użytkownika systemowego postgres:

sudo su - postgres
/usr/pgsql-15/bin/initdb -D /data_pg/
/usr/pgsql-15/bin/pg_ctl -D /data_pg start
Enter fullscreen mode Exit fullscreen mode

Aktualizacja zmiennej systemowej PATH dla użytkownika postgres jako użytkownik postgres w celu dodania wszystkich binarek PostgreSQL do PATH. Dzięki temu nie będziemy musieli podawać pełnych ścieżek do narzędzi PostgreSQL.

cat << EOF >> ~/.bash_profile
PATH=$PATH:/usr/pgsql-15/bin
export PATH
EOF
Enter fullscreen mode Exit fullscreen mode

Zmodyfikujemy jeszcze dodaną automatycznie zmienną środowiskową PGDATA , by wskazywała na nasz utworzony katalog. Dzięki temu będzie można wywoływać instrukcję np. “pg_ctl restart” bez konieczności wykorzystania przełącznika -D i wskazywania katalogu PGDATA.

Edytujemy nasz plik .bash_profile:

nano . ~/.bash_profile
Enter fullscreen mode Exit fullscreen mode

Następnie zmieniamy katalog, na który wskazuje zmienna PGDATA na nasz (/data_pg):

Profesjonalne wdrożenie klastra PostgreSQL na systemach z rodziny Red: ilustracja poglądowa

Uwaga! Zmiany te wymagają przelogowania użytkownika postgres lub ręcznego załadowania zmiennych za pomocą:

. ~/.bash_profile
Enter fullscreen mode Exit fullscreen mode

W kolejnym kroku skonfigurujemy usługę serwera PostgreSQL. Włączymy dla niej autostart i uruchomimy. W odróżnieniu od Ubuntu, tutaj nie będzie domyślnie wystartowanej instancji. Wykonujemy to z poziomu użytkownika systemowego z prawami do sudo, nie jako użytkownik postgres. Edytujemy plik konfiguracyjny usługi:

sudo nano /lib/systemd/system/postgresql-15.service
Enter fullscreen mode Exit fullscreen mode

W pliku odnajdujemy linijkę zaczynającą się od “Environment=PGDATA=/…./” i konfigurujemy położenie, pod którym znajduje się nasza PGDATA:

Profesjonalne wdrożenie klastra PostgreSQL na systemach z rodziny Red: ilustracja poglądowa (2)

Możemy teraz przejść do włączenia usługi i jej autostartu, ale - najpierw musimy wyłączyć cały czas działający w tle uruchomiony wcześniej klaster. W innym przypadku usługa usiłowałaby zablokować wcześniej zablokowany port i nie wstałaby. W tym celu logujemy się ponownie na użytkownika systemowego postgres i wyłączamy klaster.

sudo su - postgres
pg_ctl -D /data_pg/ stop
Enter fullscreen mode Exit fullscreen mode

Wracamy teraz do użytkownika systemowego z prawami do sudo. Uruchamiamy usługę i ustawiamy dla niej autostart:

sudo systemctl start postgresql-15.service
sudo systemctl enable postgresql-15.service
Enter fullscreen mode Exit fullscreen mode

Możemy też sprawdzić status usługi:

sudo systemctl status postgresql-15.service
Enter fullscreen mode Exit fullscreen mode

Usługa powinna już - działać poprawnie. Przy okazji należy zwrócić - uwagę, że mamy - też informację o użytym PGDATA:

Profesjonalne wdrożenie klastra PostgreSQL na systemach z rodziny Red: ilustracja poglądowa (3)

Jeśli konfigurujemy PostgreSQL jako usługę, to startujemy i zatrzymujemy klaster już z poziomu systemctl, a nie pg_ctl. Wynika to z tego, że proces uruchomiony przez pg_ctl i usługa nie wiedzą o sobie wzajemnie.

Baner szkolenia Administracja, replikacja i tuning baz danych PostgreSQL w JSystems, terminy gwarantowane

Szkolenie Administracja, replikacja i tuning baz danych PostgreSQL →

To szkolenie może być dofinansowane dla Ciebie z KFS lub BUR.

★★★★★Średnia ocena naszych szkoleń w Google: 5/5

Powiązane artykuły

Top comments (0)