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):

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:

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:

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.

Komentarze (0)

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

Brak komentarzy...