DEV Community

Andrzej Klusiewicz
Andrzej Klusiewicz

Posted on

Uruchamianie, zatrzymywanie i restartowanie klastra PostgreSQL

pg_ctl ma kilka trybow zatrzymania klastra PostgreSQL (smart, fast, immediate) i wybor niewlasciwego moze skonczyc sie utrata danych albo dlugim restartem. Wyjasniamy roznice na konkretnych przykladach.

Start/stop, w skrócie

Sterowanie klastrem:

pg_ctl start -D /sciezka/do/data
pg_ctl stop -m fast -D /sciezka/do/data

systemctl restart postgresql
Enter fullscreen mode Exit fullscreen mode

Jak zarządzać stanem klastra? Zarówno za pomocą PG_CTL, jak i usługi systemowej.

Z tego artykułu dowiesz się:

  • jak sprawdzać stan usługi PostgreSQL,- jak zatrzymywać, uruchamiać i restartować PostgreSQL za pomocą pg_ctl,- jak zatrzymywać, uruchamiać i restartować PostgreSQL za pomocą usługi,- jak ustawić zmienną środowiskową PGDATA, by nie musieć ciągle podawać położenia klastra,- jak przeładowywać konfigurację bez restartu klastra.

Uruchamiać, zatrzymywać, restartować i przeładowywać konfigurację usługi możemy na dwa sposoby. Albo wykorzystując pg_ctl, albo systemctl. W pierwszym przypadku jest to skrypt PostgreSQL. W drugim- zarządzamy usługą systemu operacyjnego.

Po wykonaniu wszystkich kroków z instrukcji instalacji PostgreSQL - mamy już działającą usługę. Możemy to zweryfikować, wywołując:

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

Uruchamianie i zatrzymywanie PostgreSQL: ilustracja poglądowa

Uruchamianie, zatrzymywanie i restart za pomocą pg_ctl

Aby uruchamiać, zatrzymywać, restartować czy przeładowywać PostgreSQL za pomocą pg_ctl, przechodzimy najpierw do użytkownika systemowego postgres:

sudo su - postgres
Enter fullscreen mode Exit fullscreen mode

Do startowania i zatrzymywania klastra służy skrypt pg_ctl. Jednak do czasu, aż nie ustawimy zmiennej środowiskowej PGDATA, będziemy musieli wskazać katalog instalacji klastra poprzez przełącznik -D. Startowanie klastra:

pg_ctl -D /data_pg start
Enter fullscreen mode Exit fullscreen mode

Jeśli mamy dodane binaria PostgreSQL do zmiennej środowiskowej PATH użytkownika Postgres, wywołujemy bezpośrednio pg_ctl bez ścieżki do niej. Informacja na temat konfiguracji zmiennej PATH znajduje się w rozdziale o instalacji PostgreSQL. - Jeśli nie mamy dodanego katalogu binariów PostgreSQL do PATHa, możemy też uruchamiać pg_ctl (oraz inne skrypty), podając pełną ścieżkę. Dla Ubuntu:

/usr/lib/postgresql/15/bin/pg_ctl -D /data_pg start
Enter fullscreen mode Exit fullscreen mode

Dla CentOSa:

/usr/pgsql-15/bin/pg_ctl -D /data_pg start
Enter fullscreen mode Exit fullscreen mode

Zatrzymywanie klastra to również wywołanie pg_ctl z przełącznikiem -D, ale z argumentem stop w miejscu start:

pg_ctl -D /data_pg stop
Enter fullscreen mode Exit fullscreen mode

Aby zrestartować klaster, wystarczy dać argument restart:

pg_ctl -D /data_pg restart
Enter fullscreen mode Exit fullscreen mode

Możemy też sprawić, że podawanie katalogu instalacji klastra nie będzie konieczne, konfigurując zmienną środowiskową PGDATA. Możemy to zrobić dla aktualnej sesji:

export PGDATA=/data_pg
pg_ctl stop
pg_ctl start
pg_ctl restart
Enter fullscreen mode Exit fullscreen mode

Możliwe jest - też skonfigurowanie PGDATA dla wszystkich przyszłych sesji. Wystarczy dodać tę zmienną - środowiskową do ~/.bash_profile. Edytujemy plik:

nano ~/.bash_profile
Enter fullscreen mode Exit fullscreen mode

Następnie dodajemy poniższe linijki do tego pliku:

PGDATA=/data_pg
export PGDATA
Enter fullscreen mode Exit fullscreen mode

Uruchamianie, zatrzymywanie i restart za pomocą pg_ctl: Uruchamianie i zatrzymywanie PostgreSQL

Po tej czynności wylogowujemy się z użytkownika Postgres i logujemy się ponownie lub uruchamiamy skrypt ~./bash_profile:

. ~/.bash_profile
Enter fullscreen mode Exit fullscreen mode

Możemy teraz sprawdzić, czy zmienna poprawnie się dodała, wywołując:

Echo $PGDATA
Enter fullscreen mode Exit fullscreen mode

Uruchamianie, zatrzymywanie i restart za pomocą pg_ctl: Uruchamianie i zatrzymywanie PostgreSQL (2)

Niezależnie od tego, czy ustawiliśmy PGDATA dla sesji czy dla użytkownika, możemy teraz wywoływać pg_ctl bez argumentu -D i wskazywania katalogu domowego PostgreSQL.

pg_ctl stop
pg_ctl start
pg_ctl restart
Enter fullscreen mode Exit fullscreen mode

Uruchamianie, zatrzymywanie i restart za pomocą pg_ctl: Uruchamianie i zatrzymywanie PostgreSQL (3)

Pamiętajmy, że jeśli mamy zainstalowane w systemie kilka klastrów równolegle (będą musiały słuchać na innych portach), to pozostałe klastry (poza domyślnym, czyli ustawionym w zmiennej PGDATA) będzie trzeba uruchamiać i zatrzymywać z użyciem przełącznika -D.

Uruchamianie, zatrzymywanie i restart PostgreSQL za pomocą systemctl

Jeśli chcemy mieć klaster w innej lokalizacji niż domyślna „/var/lib/postgresql”, to nie zapomnijmy uaktualnić plik konfiguracyjny usługi “/lib/systemd/system/postgresql-15.service”. Konfiguracja tego pliku została opisana w rozdziale o instalacji PostgreSQL.

Poniższe czynności wykonujemy jako użytkownik systemowy z prawami do sudo!

Startowanie usługi:

sudo systemctl start postgresql-15
Enter fullscreen mode Exit fullscreen mode

Zatrzymywanie usługi:

sudo systemctl stop postgresql-15
Enter fullscreen mode Exit fullscreen mode

Restart usługi:

sudo systemctl restart postgresql-15
Enter fullscreen mode Exit fullscreen mode

Wybierzmy jedną formę startowania i zatrzymywania klastra - - pg_ctl albo systemctl. Jeśli uruchomimy usługę z pg_ctl, to systemctl nic nie wie na temat uruchomienia usługi przez pg_ctl.

Sprawdzanie statusu usługi

Jeśli uruchomimy usługę z poziomu systemctl, to również za jego pomocą możemy sprawdzić stan tej usługi:

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

Tę komendę możemy wydać również bez sudo jako użytkownik postgres.

Sprawdzanie statusu usługi: Uruchamianie i zatrzymywanie PostgreSQL

Jeśli uruchomimy usługę za pomocą pg_ctl, to systemctl powie, że usługa nie działa, ponieważ nie wie o jej uruchomieniu.

Status usługi dla wskazanego PGDATA można sprawdzić też za pomocą pg_ctl status np. (wykonujemy jako użytkownik systemowy postgres):

Pg_ctl -D /data_pg status
Enter fullscreen mode Exit fullscreen mode

Dostaniemy jasną informację:

Sprawdzanie statusu usługi: Uruchamianie i zatrzymywanie PostgreSQL (2)

Pozostaje jeszcze możliwość sprawdzenie otwartego portu za pomocą nmap. W takim przypadku nie ma znaczenia, czy uruchomimy usługę za pomocą pg_ctl czy systemctl. Jeżeli port jest otwarty, - zostanie to pokazane. Możemy też sprawdzić, czy w katalogu PGDATA (u nas /data_pg) istnieje plik “postmaster.pid”. Plik ten tworzony jest przy starcie klastra i usuwany przy jego zamykaniu. Jest to taki specjalny znacznik określający, czy instancja związana z tą PGDATA jest już uruchomiona.

Sprawdzenie otwartego portu nmapem:

nmap localhost
Enter fullscreen mode Exit fullscreen mode

Sprawdzanie statusu usługi: Uruchamianie i zatrzymywanie PostgreSQL (3)

Sprawdzenie istnienia pliku pid w katalogu domowym PostgreSQL możemy wykonać, korzystając ze zmiennej środowiskowej PGDATA (o ile ją wcześniej skonfigurowaliśmy) lub podając ścieżkę bezwzględną. Poniższe instrukcje wykonujemy jako użytkownik systemowy postgres bądź inny użytkownik - ale mający uprawnienia do sudo (wtedy instrukcję poprzedzamy “sudo”), to jest kwestia uprawnień do tego katalogu. Wyszukujemy w katalogu wszystkie pliki mające w nazwie “postmaster”:

ls $PGDATA | grep postmaster
ls /data_pg | grep postmaster
Enter fullscreen mode Exit fullscreen mode

Sprawdzanie statusu usługi: Uruchamianie i zatrzymywanie PostgreSQL (4)

Jeśli - taki plik istnieje, - ta instancja PostgreSQL jest uruchomiona.

Przeładowywanie konfiguracji

Niektóre parametry wymagają do zmiany restartu, inne tylko przeładowania konfiguracji. - Restart instancji wiąźe się z czyszczeniem wszystkich buforów, a tego z powodu utraty wydajności bazy chcemy uniknąć. W przypadku wpisów w pg_hba.conf (taki ACL - czyli Access Control List określający kto, na jakich zasadach i do czego ma dostęp) wystarczy przeładowanie konfiguracji w miejsce restartu. - W przypadku postgresql.conf (plik z konfiguracją najważniejszych parametrów klastra) jest to zależne od parametru. W postgresql.conf jeśli zmiana jakiegoś parametru wymaga restartu, zostało to przy nim napisane:

Konfigurację możemy przeładować na dwa sposoby: za pomocą pg_ctl i za pomocą psql. W przypadku pg_ctl wywołujemy:

pg_ctl reload
Enter fullscreen mode Exit fullscreen mode

Jeśli nie mamy ustawionego PATHa i PGDATA, trzeba będzie stosownie podać ścieżkę do binarki oraz katalog domowy PostgreSQL który chcemy przeładować.

Dla Ubuntu:

/usr/lib/postgresql/15/bin/pg_ctl -D /data_pg reload
Enter fullscreen mode Exit fullscreen mode

Dla CentOSa:

/usr/pgsql-15/bin/pg_ctl -D /data_pg reload
Enter fullscreen mode Exit fullscreen mode

Przeładowywanie konfiguracji: Uruchamianie i zatrzymywanie PostgreSQL

Konfigurację możemy też przeładować za pomocą psql:

psql -c "select pg_reload_conf()"
Enter fullscreen mode Exit fullscreen mode

Przeładowywanie konfiguracji: Uruchamianie i zatrzymywanie PostgreSQL (2)

Jeśli nie zaktualizowaliśmy zmiennej środowiskowej PATH, dodając do niej binarki PostgreSQL, to musimy podać pełną ścieżkę do psql. Dla Ubuntu:

/usr/lib/postgresql/15/bin/psql -c "select pg_reload_conf()"
Enter fullscreen mode Exit fullscreen mode

Dla CentOSa:

/usr/pgsql-15/bin/psql -c "select pg_reload_conf()"
Enter fullscreen mode Exit fullscreen mode

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)