Tworzenie kopii zapasowych bazy PostgreSQL za pomocą narzędzi EuroDB

Tworzenie kopii zapasowych bazy PostgreSQL za pomocą narzędzi EuroDB

Ludzie dzielą się na tych, którzy tworzą kopie zapasowe i tych, którzy zaczną je tworzyć. W dzisiejszym artykule zapoznamy się bliżej z pojęciem backupu i przeprowadzimy podstawową konfigurację zapasowej bazy danych przy pomocy narzędzia do tworzenia kopii zapasowych z pakietu EuroDB.

Mechanizmy replikacji, o których mowa była w poprzednim artykule z tej serii, zabezpieczają dane przed uszkodzeniem, tworząc poczucie bezpieczeństwa danych. Jednak w przypadku ludzkiego błędu bądź ataku hakerskiego skierowanego w naszą bazę, potrzebna jest dodatkowa ochrona w postaci kopii zapasowej.

Czym jest kopia zapasowa bazy danych?

Tworzeniem kopii zapasowej nazwiemy wykonywanie fizycznego bądź logicznego odwzorowania macierzystej bazy danych. Backup fizyczny polega na skopiowaniu plik po pliku (bit po bicie) bazy danych. Logiczny backup polega natomiast na skopiowaniu całej struktury bazy (w szczególności schematów, tabel czy danych), a następnie przetworzeniu jej na komendy języka SQL.

Przykładowy problem

Postawmy się w roli administratora bazy danych PostgreSQL zawierającej poufne informacje o uzbrojeniu kraju. Pewnego poranka dowiadujemy się, że komputer przełożonego został zainfekowany wirusem, przez co hakerzy mieli dostęp do bazy danych, nad którą sprawujemy opiekę. Oprócz odtajnienia danych zauważamy, że pozmieniali oni nazwy niektórych rekordów. Sytuacja jest poważna, bo ostatni backup został wykonany tydzień temu, a z logów można się jedynie dowiedzieć, że atak nastąpił dziś około godziny 4:00.

Opisane wyżej zdarzenie jest sytuacją hipotetyczną, która nie powinna się wydarzyć w dobrze zabezpieczonej organizacji. Przyjmijmy jednak, że miała miejsce i należy przywrócić bazę danych do stanu sprzed ataku. Dla ułatwienia pomińmy problem tajności danych.

Rozwiązanie problemu za pomocą narzędzi EuroDB

Rozwiązanie tego problemu może okazać się banalnie proste. Pakiet EuroDB zawiera w sobie narzędzie do tworzenia kopii bazy danych w sposób fizyczny. Posiada również mechanizm zapisujący wszystkie transakcje, które odbyły się później. Daje to możliwość odtworzenia bazy danych do dowolnego miejsca w czasie. Zatem w przypadku problemu opisanego powyżej, mając poprawnie skonfigurowany moduł replikacji EuroDB wystarczy, że wykonamy polecenie barman restore, używając przy tym opcji --target-time. Baza danych zostanie przywrócona do konkretnego czasu sprzed ataku.

EuroDB backup module

Więcej o narzędziu

Ważnym atutem modułu tworzenia kopii zapasowych z pakietu EuroDB jest centralizacja. Jedna centralna konsola pozwala na wykonywanie kopii zapasowych z wielu różnych instancji oraz na ich odtwarzanie. Manager backupu posiada szereg parametrów możliwych do konfiguracji, takich jak np.: minimalna ilość kopii czy recovery window – zakres dat, który umożliwia odtworzenie bazy danych do wybranego punktu w czasie.

Kopia zapasowa może również zostać odtworzona w inne miejsce, np. do serwera tymczasowego. Pozwala to na realizację scenariusza, gdzie kopia w pierwszym kroku zostaje odtworzona na serwerze tymczasowym, a dopiero z niego pojedyncza tabela zostaje selektywnie odtworzona na serwerze produkcyjnym.

Manager posiada moduły umożliwiające monitorowanie w formacie Nagios, a także zarządzanie poprzez Puppet. Dla bardziej specyficznych zastosowań został on wyposażony w RESTful API.

Podstawowa konfiguracja narzędzia

Poniżej zaprezentujemy podstawową konfigurację narzędzia do tworzenia kopii zapasowych. Odbędzie się to na maszynach wirtualnych nazwanych Master i Backup.

Założenia początkowe

Master – maszyn z macierzystą bazą danych EuroDB – PostgreSQL w wersji 13.3.1, IP: 192.168.121.27

Backup – maszyna, na której będzie wykonywana kopia zapasowa. Ma zainstalowane wszystkie wymagane pakiety do tworzenia backupu, IP: 192.168.121.184

Konfiguracja maszyny Master

1. Tworzymy użytkownika barman z prawami administratora.

sudo createuser --interactive -P barman

2. Konfigurujemy pliki pg_hba.conf i postgresql.conf pod połączenie z maszyną Backup. W domyślnej konfiguracji ścieżka do plików jest następująca: /var/lib/pgsql_13.3-1/data/. W pliku pg_hba.conf dodajemy linijkę:

host all all 192.168.121.184/32 trust

Natomiast w postgresql.conf:

listen_addresses = '*'

3. Upewniamy się, że jako użytkownik postgres posiadamy folder .ssh i jesteśmy jego właścicielem. Jest to wymagane, aby utworzyć połączenie między maszyną Master a Backup.

4. Konfigurujemy plik postgresql.conf pod tworzenie kopii zapasowych.

wal_level = archive
archive_mode = on
archive_command = 'rsync -a %p [email protected]:/var/lib/barman/pgsql/incoming/%f'

Konfiguracja maszyny Backup

1. Nadajemy hasło i logujemy się na użytkownika barman.

sudo passwd barman

su - barman

2. Tworzymy plik .pgpass umożliwiający połączenie z bazą danych bez konieczności ręcznego wpisywania hasła.

echo "192.168.121.27:5432:*:barman:PASSWORD" >> ~/.pgpass

3. Zmieniamy dostęp do pliku .pgpass.

sudo chmod 600 /var/lib/barman/.pgpass

4. Konfigurujemy plik pgsql.conf pod tworzenie kopii zapasowych. W domyślnej konfiguracji ścieżka do pliku jest następująca: /etc/barman.d/.

[pgsql]
description = "Old PostgreSQL server"
conninfo = host=192.168.121.27 user=postgresql dbname=dvdrental
ssh_command = ssh postgr[email protected]
retention_policy = RECOVERY WINDOW OF 2 WEEKS

5. Upewniamy się, że jako użytkownik barman posiadamy folder .ssh i jesteśmy jego właścicielem. Jest to wymagane, aby utworzyć połączenie między maszyną Master a Backup.

Nawiązanie połączenia

Aby nawiązać obustronne połączenie, należy na każdej z maszyn wykonać tę samą procedurę:

1. Wygenerowanie klucza rsa.

Komendę tę wykonujemy jako użytkownik postgres (Master) bądź barman (Backup).

ssh-keygen -t rsa

2. Skopiowanie klucza.

Dla maszyny Master:

ssh-copy-id [email protected]

Dla maszyny Backup:

ssh-copy-id [email protected]

W przypadku maszyny Backup robimy również kopię klucza na localhost:

ssh-copy-id [email protected]

Restart serwisu

Aby potwierdzić ustawienia, które nadaliśmy podczas konfiguracji, należy zrestartować serwis eurodb13.

sudo systemctl restart eurodb13.service

Sprawdzenie poprawności konfiguracji

Aby potwierdzić poprawność wykonania konfiguracji maszyny, możemy użyć następującej komendy:

barman check pgsql

W przypadku gdy WAL archive jest oznaczony jako FAILED, możemy w celu naprawy wykonać komendę:

barman switch-xlog --force --archive pgsql

Podsumowanie

Mając do dyspozycji kopie zapasowe bazy danych, jesteśmy zabezpieczeni i gotowi na nieprzewidziane sytuacje. Do wygodnego, cyklicznego i pełnego tworzenia kopii bazy danych PostgreSQL najlepiej korzystać ze sprawdzonych rozwiązań z pakietu EuroDB.