PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

pghoard Alternatywy - Zarządzanie kopiami zapasowymi PostgreSQL z ClusterControl

Zarządzanie kopiami zapasowymi może być złożonym i ryzykownym zadaniem wykonywanym ręcznie. Musisz wiedzieć, że kopia zapasowa działa zgodnie z zasadami tworzenia kopii zapasowych, ponieważ nie chcesz być w sytuacji, w której potrzebujesz kopii zapasowej i nie działa lub nie istnieje. To na pewno będzie duży problem. Dlatego najlepiej jest użyć sprawdzonej w bojach aplikacji do zarządzania kopiami zapasowymi, aby uniknąć problemów w przypadku awarii.

PGHoard to demon PostgreSQL do tworzenia kopii zapasowych i system przywracania, który przechowuje dane kopii zapasowych w magazynach obiektów w chmurze. Obsługuje PostgreSQL 9.3 lub nowszy, aż do PostgreSQL 11, najnowszej obsługiwanej wersji w tej chwili. Obecna wersja PGHoard to 2.1.0, wydana w maju 2019 roku (1 rok temu).

ClusterControl to bezagentowe oprogramowanie do zarządzania i automatyzacji klastrów baz danych. Pomaga wdrażać, monitorować, zarządzać i skalować serwer/klaster bazy danych bezpośrednio z interfejsu użytkownika ClusterControl lub za pomocą interfejsu ClusterControl CLI. Zawiera funkcje zarządzania kopiami zapasowymi i obsługuje wersje PostgreSQL 9.6, 10, 11 i 12. Obecna wersja ClusterControl to 1.7.6, wydana w zeszłym miesiącu, w kwietniu 2020 r.

W tym blogu porównamy PGHoard z funkcją ClusterControl Backup Management i zobaczymy, jak zainstalować i używać obu systemów. W tym celu użyjemy serwera Ubuntu 18.04 i PostgreSQL11 (ponieważ jest to najnowsza obsługiwana wersja do korzystania z PGHoard). Zainstalujemy PGHoard na tym samym serwerze bazy danych i zaimportujemy go do ClusterControl.

Porównanie funkcji zarządzania kopiami zapasowymi

PGHoard

Niektóre z najważniejszych funkcji PGHoard to:

  • Automatyczne okresowe podstawowe kopie zapasowe
  • Automatyczne kopie zapasowe dziennika transakcji
  • Obsługa autonomicznej Hot Backup
  • Obsługa przechowywania obiektów w chmurze (AWS S3, Google Cloud, OpenStack Swift, Azure, Ceph)
  • Przywracanie kopii zapasowej bezpośrednio z obiektowej pamięci masowej, skompresowane i zaszyfrowane
  • Przywracanie punktu w czasie (PITR)
  • Zainicjuj nowy tryb gotowości z kopii zapasowych obiektowej pamięci masowej, automatycznie skonfigurowanych jako replikacja hot-standby
  • Równoległa kompresja i szyfrowanie

Jednym ze sposobów użycia tego jest posiadanie oddzielnej maszyny do tworzenia kopii zapasowych, aby PGHoard mógł połączyć się z pg_receivexlog, aby otrzymać pliki WAL z bazy danych. Innym trybem jest użycie polecenia pghoard_postgres_command jako polecenia archive_command PostgreSQL. W obu przypadkach PGHoard tworzy okresowe podstawowe kopie zapasowe za pomocą pg_basebackup.

ClusterControl

Zobaczmy także niektóre z najważniejszych cech tego systemu:

  • Przyjazny interfejs użytkownika
  • Kopia zapasowa i przywracanie (w tym samym węźle lub w osobnym)
  • Zaplanuj tworzenie kopii zapasowych
  • Utwórz klaster z kopii zapasowej
  • Automatyczna weryfikacja kopii zapasowej
  • Kompresja
  • Szyfrowanie
  • Automatyczne przesyłanie do chmury
  • Przywracanie punktu w czasie (PITR)
  • Różne metody tworzenia kopii zapasowych (logiczne, fizyczne, pełne, przyrostowe itp.)
  • Zapasowe raporty operacyjne

Ponieważ jest to nie tylko system zarządzania kopiami zapasowymi, wymienimy również różne ważne funkcje, nie tylko te związane z kopiami zapasowymi:

  • Wdrażanie/importowanie baz danych:autonomiczne, klaster/replikacja, systemy równoważenia obciążenia
  • Skalowanie:dodawanie/usuwanie węzłów, odczytywanie replik, klonowanie klastrów, replikacja klastrów do klastrów
  • Monitorowanie:niestandardowe pulpity nawigacyjne, wykrywanie usterek, monitor zapytań, doradcy wydajności, alarmy i powiadomienia, opracowywanie niestandardowych doradców
  • Automatyczne odzyskiwanie:odzyskiwanie węzłów i klastrów, przełączanie awaryjne, środowiska wysokiej dostępności
  • Zarządzanie:zarządzanie konfiguracją, aktualizacje poprawek bazy danych, zarządzanie użytkownikami bazy danych, integracja z chmurą, raporty operacyjne, zarządzanie ProxySQL
  • Bezpieczeństwo:zarządzanie kluczami, kontrola dostępu oparta na rolach, uwierzytelnianie za pomocą LDAP/Active Directory, szyfrowanie SSL

Zalecana topologia to posiadanie oddzielnego węzła do uruchamiania ClusterControl, aby w przypadku awarii można było skorzystać z funkcji automatycznego przywracania i przełączania awaryjnego ClusterControl (między innymi przydatnymi funkcjami) .

Wymagania systemowe

PGHoard

Zgodnie z dokumentacją, PGHoard może tworzyć kopie zapasowe i przywracać PostgreSQL w wersji 9.3 i nowszych. Demon jest zaimplementowany w Pythonie i współpracuje z CPythonem w wersji 3.5 lub nowszej. Następujące moduły Pythona mogą być wymagane w zależności od wymagań:

  • psycopg2 do wyszukiwania metadanych dziennika transakcji
  • żądania dotyczące wewnętrznej architektury klient-serwer
  • Lazur dla przechowywania obiektów Microsoft Azure
  • botocore dla przechowywania obiektów AWS S3 (lub Ceph-S3)
  • klient google-api do przechowywania obiektów w Google Cloud
  • kryptografia do szyfrowania i deszyfrowania kopii zapasowych (wymagana wersja 0.8 lub nowsza)
  • Snappy do kompresji i dekompresji Snappy
  • zstandard dla kompresji i dekompresji Zstandard (zstd)
  • systemd do integracji z systemami
  • swiftclient do przechowywania obiektów OpenStack Swift
  • paramiko do przechowywania obiektów sftp

Nie ma wzmianki o obsługiwanym systemie operacyjnym, ale mówi, że został przetestowany na nowoczesnych systemach Linux x86-64, ale powinien działać na innych platformach, które zapewniają wymagane moduły.

ClusterControl

Następujące oprogramowanie jest wymagane przez serwer ClusterControl:

  • Serwer/klient MySQL
  • Serwer WWW Apache (lub nginx)
  • mod_rewrite
  • mod_ssl
  • zezwalaj na nadpisanie .htaccess
  • PHP (5.4 lub nowszy)
  • RHEL:php, php-mysql, php-gd, php-ldap, php-curl
  • Debian:php5-common, php5-mysql, php5-gd, php5-ldap, php5-curl, php5-json
  • Linux Kernel Security (SElinux lub AppArmor) - musi być wyłączony lub ustawiony na tryb zezwalający
  • serwer/klient OpenSSH
  • BASH (zalecane:wersja 4 lub nowsza)
  • Serwer NTP - Czas wszystkich serwerów musi być zsynchronizowany w jednej strefie czasowej
  • socat lub netcat - do strumieniowego przesyłania kopii zapasowych

I obsługuje różne systemy operacyjne:

  • Red Hat Enterprise Linux 6.x/7.x/8.x
  • CentOS 6.x/7.x/8.x
  • Ubuntu 12.04/14.04/16.04/18.04 LTS
  • Debian 7.x/8.x/9.x/10.x

Jeśli ClusterControl jest instalowany za pomocą skryptu instalacyjnego (install-cc) lub menedżera pakietów (yum/apt), wszystkie zależności zostaną automatycznie spełnione.

W przypadku PostgreSQL obsługuje wersje 9.6/10.x/11.x/12.x. Pełną listę obsługiwanych baz danych można znaleźć w dokumentacji.

Wymaga tylko dostępu SSH bez hasła do węzłów bazy danych (przy użyciu kluczy prywatnych i publicznych) oraz uprzywilejowanego użytkownika systemu operacyjnego (może to być użytkownik root lub sudo).

Proces instalacji

Proces instalacji PGHoard

Zakładamy, że masz uruchomioną bazę danych PostgreSQL, więc zainstalujmy pozostałe pakiety. PGHoard to pakiet Pythona, więc po zainstalowaniu wymaganych pakietów możesz go zainstalować za pomocą polecenia pip:

$ apt install postgresql-server-dev-11 python3 python3-pip python3-snappy

$ pip3 install pghoard

W ramach tego procesu instalacji musisz przygotować instancję PostgreSQL do pracy z tym narzędziem. W tym celu musisz edytować postgresql.conf, aby zezwolić na archiwum WAL i zwiększyć max_wal_senders:

wal_level = logical

max_wal_senders = 4

archive_mode = on

archive_command = pghoard_postgres_command --mode archive --site default --xlog %f

Ta zmiana będzie wymagała ponownego uruchomienia bazy danych:

$ service postgresql restart

Teraz utwórzmy użytkownika bazy danych dla PGHoard:

$ psql

CREATE USER pghoard PASSWORD 'Password' REPLICATION;

I dodaj następujący wiersz w pliku pg_hba.conf:

host    replication  pghoard  127.0.0.1/32/32  md5

Załaduj ponownie usługę bazy danych:

$ service postgresql reload

Aby to zadziałało, musisz utworzyć plik konfiguracyjny JSON dla PGHoard. Zobaczymy to w następnej sekcji „Użycie”.

Proces instalacji ClusterControl

Istnieją różne metody instalacji, jak wspomniano w dokumentacji. W przypadku instalacji ręcznej wymagane pakiety są określone w tej samej dokumentacji i istnieje przewodnik krok po kroku dotyczący całego procesu.

Zobaczmy przykład przy użyciu skryptu automatycznej instalacji.

$ wget http://www.severalnines.com/downloads/cmon/install-cc

$ chmod +x install-cc

$ sudo ./install-cc   # omit sudo if you run as root

Skrypt instalacyjny spróbuje zautomatyzować następujące zadania:

  • Zainstaluj i skonfiguruj lokalny serwer MySQL (używany przez ClusterControl do przechowywania danych monitorowania)
  • Zainstaluj i skonfiguruj pakiet kontrolera ClusterControl za pomocą menedżera pakietów
  • Zainstaluj zależności ClusterControl za pomocą menedżera pakietów
  • Konfiguruj Apache i SSL
  • Skonfiguruj adres URL i token ClusterControl API
  • Skonfiguruj ClusterControl Controller z minimalnymi opcjami konfiguracyjnymi
  • Włącz usługę CMON podczas rozruchu i uruchom ją

Uruchamiając wspomniany skrypt, otrzymasz pytanie dotyczące wysyłania danych diagnostycznych:

$ sudo ./install-cc

!!

Only RHEL/Centos 6.x|7.x|8.x, Debian 7.x|8.x|9.x|10.x, Ubuntu 14.04.x|16.04.x|18.04.x LTS versions are supported

Minimum system requirements: 2GB+ RAM, 2+ CPU cores

Server Memory: 1024M total, 922M free

MySQL innodb_buffer_pool_size set to 512M

Severalnines would like your help improving our installation process.

Information such as OS, memory and install success helps us improve how we onboard our users.

None of the collected information identifies you personally.

!!

=> Would you like to help us by sending diagnostics data for the installation? (Y/n):

Następnie rozpocznie instalację wymaganych pakietów. Następne pytanie dotyczy nazwy hosta, która będzie używana:

=> The Controller hostname will be set to 192.168.100.116. Do you want to change it? (y/N):

Po zainstalowaniu lokalnej bazy danych instalator zabezpieczy ją, tworząc hasło roota, które należy wprowadzić:

=> Starting database. This may take a couple of minutes. Do NOT press any key.

Redirecting to /bin/systemctl start mariadb.service

=> Securing the MySQL Server ...

=> !! In order to complete the installation you need to set a MySQL root password !!

=> Supported special password characters: [email protected]#$%^&*()_+{}<>?

=> Press any key to proceed ...

I hasło użytkownika CMON, które będzie używane przez ClusterControl:

=> Set a password for ClusterControl's MySQL user (cmon) [cmon]

=> Supported special characters: [email protected]#$%^&*()_+{}<>?

=> Enter a CMON user password:

To wszystko. W ten sposób będziesz mieć wszystko na swoim miejscu bez instalowania lub konfigurowania czegokolwiek ręcznie.

=> ClusterControl installation completed!

Open your web browser to http://192.168.100.116/clustercontrol and enter an email address and new password for the default Admin User.

Determining network interfaces. This may take a couple of minutes. Do NOT press any key.

Public/external IP => http://10.10.10.10/clustercontrol

Installation successful. If you want to uninstall ClusterControl then run install-cc --uninstall.

Przy pierwszym uruchomieniu interfejsu użytkownika konieczne będzie zarejestrowanie się na 30-dniowy bezpłatny okres próbny.

Po zakończeniu 30-dniowego bezpłatnego okresu próbnego instalacja zostanie automatycznie przekonwertowana na wydanie społecznościowe, chyba że masz licencję komercyjną.

Zarządzanie kopiami zapasowymi

Wykorzystanie PGHoards

Po zainstalowaniu tego narzędzia musisz utworzyć plik JSON (pghoard.json) z konfiguracją PGHoard. Oto przykład:

{

"backup_location": "/var/lib/pghoard",

"backup_sites": {

"default": {

"nodes": [

{

"host": "127.0.0.1",

"password": "Password",

"port": 5432,

"user": "pghoard"

}

],

"object_storage": {

"storage_type": "local",

"directory": "./backups"

},

"pg_data_directory": "/var/lib/postgresql/11/main/"

}

}

}

W tym przykładzie wykonamy kopię zapasową i zapiszemy ją lokalnie, ale możesz również skonfigurować konto w chmurze i tam je przechowywać:

"object_storage": {

"aws_access_key_id": "AKIAQTUN************",

"aws_secret_access_key": "La8YZBvN********************************",

"bucket_name": "pghoard",

"region": "us-east-1",

"storage_type": "s3"

},

Więcej szczegółów na temat konfiguracji można znaleźć w dokumentacji.

Teraz uruchom kopię zapasową przy użyciu tego pliku JSON:

$ pghoard --short-log --config pghoard.json

INFO pghoard initialized, own_hostname: 'pg1', cwd: '/root'

INFO Creating a new basebackup for 'default' because there are currently none

INFO Started: ['/usr/lib/postgresql/11/bin/pg_receivewal', '--status-interval', '1', '--verbose', '--directory', '/var/lib/pghoard/default/xlog_incoming', '--dbname', "dbname='replication' host='127.0.0.1' port='5432' replication='true' user='pghoard'"], running as PID: 19057

INFO Started: ['/usr/lib/postgresql/11/bin/pg_basebackup', '--format', 'tar', '--label', 'pghoard_base_backup', '--verbose', '--pgdata', '/var/lib/pghoard/default/basebackup_incoming/2020-05-21_13-13_0', '--wal-method=none', '--progress', '--dbname', "dbname='replication' host='127.0.0.1' port='5432' replication='true' user='pghoard'"], running as PID: 19059, basebackup_location: '/var/lib/pghoard/default/basebackup_incoming/2020-05-21_13-13_0/base.tar'

INFO Compressed 83 byte open file '/var/lib/pghoard/default/xlog_incoming/00000003.history' to 76 bytes (92%), took: 0.001s

INFO 'UPLOAD' transfer of key: 'default/timeline/00000003.history', size: 76, origin: 'pg1' took 0.001s

INFO Compressed 16777216 byte open file '/var/lib/postgresql/11/main/pg_wal/000000030000000000000009' to 799625 bytes (5%), took: 0.175s

INFO 'UPLOAD' transfer of key: 'default/xlog/000000030000000000000009', size: 799625, origin: 'pg1' took 0.002s

127.0.0.1 - - [21/May/2020 13:13:31] "PUT /default/archive/000000030000000000000009 HTTP/1.1" 201 -

INFO Compressed 16777216 byte open file '/var/lib/pghoard/default/xlog_incoming/000000030000000000000009' to 799625 bytes (5%), took: 0.190s

INFO 'UPLOAD' transfer of key: 'default/xlog/000000030000000000000009', size: 799625, origin: 'pg1' took 0.028s

INFO Compressed 16777216 byte open file '/var/lib/pghoard/default/xlog_incoming/00000003000000000000000A' to 789927 bytes (5%), took: 0.109s

INFO 'UPLOAD' transfer of key: 'default/xlog/00000003000000000000000A', size: 789927, origin: 'pg1' took 0.002s

INFO Compressed 16777216 byte open file '/var/lib/postgresql/11/main/pg_wal/00000003000000000000000A' to 789927 bytes (5%), took: 0.114s

INFO 'UPLOAD' transfer of key: 'default/xlog/00000003000000000000000A', size: 789927, origin: 'pg1' took 0.002s

127.0.0.1 - - [21/May/2020 13:13:32] "PUT /default/archive/00000003000000000000000A HTTP/1.1" 201 -

INFO Ran: ['/usr/lib/postgresql/11/bin/pg_basebackup', '--format', 'tar', '--label', 'pghoard_base_backup', '--verbose', '--pgdata', '/var/lib/pghoard/default/basebackup_incoming/2020-05-21_13-13_0', '--wal-method=none', '--progress', '--dbname', "dbname='replication' host='127.0.0.1' port='5432' replication='true' user='pghoard'"], took: 1.940s to run, returncode: 0

INFO Compressed 24337408 byte open file '/var/lib/pghoard/default/basebackup_incoming/2020-05-21_13-13_0/base.tar' to 4892408 bytes (20%), took: 0.117s

INFO 'UPLOAD' transfer of key: 'default/basebackup/2020-05-21_13-13_0', size: 4892408, origin: 'pg1' took 0.008s

W katalogu „backup_location” (w tym przypadku /var/lib/pghoard) znajdziesz plik pghoard_state.json z aktualnym stanem:

$ ls -l /var/lib/pghoard

total 48

drwxr-xr-x 6 root root  4096 May 21 13:13 default

-rw------- 1 root root 42385 May 21 15:25 pghoard_state.json

I katalog witryny (w tym przypadku nazwany „default/”) z kopią zapasową:

$ ls -l /var/lib/pghoard/default/

total 16

drwxr-xr-x 2 root root 4096 May 21 13:13 basebackup

drwxr-xr-x 3 root root 4096 May 21 13:13 basebackup_incoming

drwxr-xr-x 2 root root 4096 May 21 13:13 xlog

drwxr-xr-x 2 root root 4096 May 21 13:13 xlog_incoming

Możesz sprawdzić listę kopii zapasowych za pomocą polecenia follogin:

$ pghoard_restore list-basebackups --config pghoard.json

Available 'default' basebackups:

Basebackup                                Backup size    Orig size  Start time

----------------------------------------  -----------  -----------  --------------------

default/basebackup/2020-05-21_13-13_0            4 MB        23 MB  2020-05-21T13:13:31Z

Użycie ClusterControl

W tym celu załóżmy, że masz klaster bazy danych PostgreSQL zaimportowany do ClusterControl lub wdrożyłeś go za pomocą tego systemu.

W ClusterControl wybierz klaster i przejdź do sekcji „Kopia zapasowa”, a następnie wybierz „Utwórz kopię zapasową”.

W tym przykładzie użyjemy opcji „Zaplanuj tworzenie kopii zapasowej”. Planując tworzenie kopii zapasowej, oprócz wybrania typowych opcji, takich jak metoda lub pamięć, musisz również określić harmonogram/częstotliwość.

Należy wybrać jedną metodę, serwer, z którego zostanie pobrana kopia zapasowa i gdzie chcesz go przechowywać. Możesz również przesłać kopię zapasową do chmury (AWS, Google lub Azure), włączając odpowiedni przycisk.

Następnie musisz określić użycie kompresji, szyfrowania i przechowywania kopii zapasowej. W tym kroku możesz również włączyć funkcję „Zweryfikuj kopię zapasową”, która pozwala potwierdzić, że kopia zapasowa nadaje się do użytku, przywracając ją w innym węźle.

Jeśli włączysz opcję „Prześlij kopię zapasową do chmury”, zobacz sekcję, aby określić dostawcę chmury i poświadczenia. Jeśli nie masz zintegrowanego konta w chmurze z ClusterControl, musisz przejść do ClusterControl -> Integrations -> Cloud Providers, aby je dodać.

W sekcji kopii zapasowej można zobaczyć postęp tworzenia kopii zapasowej oraz informacje takie jak metoda, rozmiar, lokalizacja i inne.

Wiersz poleceń ClusterControl (s9s)

Do pisania skryptów i automatyzacji zadań, a nawet jeśli wolisz tylko wiersz poleceń, ClusterControl ma narzędzie s9s. Jest to narzędzie wiersza polecenia do zarządzania klastrem bazy danych. Zobaczmy przykład, jak tworzyć i wyświetlać kopie zapasowe za pomocą tego narzędzia:

$ s9s backup --list --cluster-id=40 --long --human-readable
$ s9s backup --create --backup-method=pg_basebackup --cluster-id=40 --nodes=192.168.100.125 --backup-directory=/tmp --wait

Więcej przykładów i informacji można znaleźć w sekcji dokumentacji ClusterControl CLI.

Wnioski

Na zakończenie porównania wspomnianych systemów zarządzania kopiami zapasowymi możemy stwierdzić, że PGHoard jest darmowym, ale kompleksowym rozwiązaniem do tego zadania. Będziesz potrzebował trochę czasu, aby zrozumieć, jak to działa i jak go skonfigurować, ponieważ oficjalna dokumentacja jest w tym trochę uboga. Wygląda też na nieco przestarzały, ponieważ ostatnie wydanie było rok temu. Co więcej, ClusterControl to kompleksowy system zarządzania z wieloma funkcjami, nie tylko do zarządzania kopiami zapasowymi, z przyjaznym dla użytkownika i łatwym w użyciu interfejsem użytkownika. Ma społecznościowe (z ograniczonymi dostępnymi funkcjami) i płatne wersje z 30-dniowym bezpłatnym okresem próbnym. Dokumentacja jest przejrzysta i kompletna, zawiera przykłady i szczegółowe informacje.

Mamy nadzieję, że ten blog pomoże Ci w podjęciu najlepszej decyzji o ochronie Twoich danych.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Czy lepiej jest używać wielu baz danych z jednym schematem każda, czy jednej bazy danych z wieloma schematami?

  2. Generate_series w Postgresie od daty rozpoczęcia i zakończenia w tabeli

  3. Utworzenie wyzwalacza do wstawiania tabeli podrzędnej zwraca mylący błąd

  4. Nie znaleziono odpowiedniego sterownika dla jdbc:postgresql://192.168.1.8:5432/NexentaSearch

  5. właściwa adnotacja hibernacji dla byte[]