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.