Blog JSystems - uwalniamy wiedzę!

Szukaj
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

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

sudo dnf -qy module disable postgresql

Instalacja dostępnych aktualizacji:

sudo yum upgrade -y

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

Instalacja binarek serwera PostgreSQL:

sudo dnf install postgresql15-server -y

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/

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

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

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

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

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

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

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

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

sudo systemctl status postgresql-15.service

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

Najczęściej zadawane pytania

Jak zainstalować wybraną wersję PostgreSQL na systemach Red Hat?
Najpierw konfigurujesz repozytorium z pliku RPM PGDG, następnie wyłączasz domyślny moduł postgresql systemu, instalujesz dostępne aktualizacje i restartujesz serwer. Dopiero potem instalujesz binaria wybranej wersji serwera. Pozwala to postawić inną wersję niż domyślna dla systemu.
Jak ustawić własne położenie katalogu PGDATA?
Tworzysz katalog w wybranej lokalizacji, na przykład na innym dysku, i nadajesz mu jako właściciela użytkownika systemowego postgres. Następnie inicjalizujesz klaster poleceniem initdb ze wskazaniem tego katalogu. Zmienną PGDATA warto też zaktualizować w profilu użytkownika postgres.
Jak skonfigurować automatyczny start PostgreSQL z systemem?
Konfigurujesz PostgreSQL jako usługę systemd, wskazując w pliku usługi właściwe położenie PGDATA. Autostart włączasz poleceniem systemctl enable, a usługę uruchamiasz poleceniem systemctl start. W odróżnieniu od Ubuntu na Red Hat nie ma domyślnie wystartowanej instancji.
Dlaczego po skonfigurowaniu usługi nie należy używać pg_ctl do startu?
Jeśli PostgreSQL działa jako usługa, klaster startujesz i zatrzymujesz przez systemctl, a nie przez pg_ctl. Proces uruchomiony przez pg_ctl i usługa nie wiedzą o sobie nawzajem. Przed włączeniem usługi trzeba też zatrzymać wcześniej ręcznie uruchomiony klaster, żeby nie blokował portu.
Po co dodawać binaria PostgreSQL do zmiennej PATH?
Dodanie katalogu z binariami do PATH użytkownika postgres sprawia, że narzędzia PostgreSQL wywołujesz bez podawania pełnych ścieżek. Robisz to, dopisując odpowiedni wpis do pliku profilu użytkownika. Zmiany wymagają przelogowania lub ręcznego załadowania zmiennych środowiskowych.

Komentarze (0)

Musisz być zalogowany by móc dodać komentarz. Zaloguj się przez Google

Brak komentarzy...