Управлението на архивиране може да бъде сложна и рискована задача, която да се извършва ръчно. Трябва да знаете, че архивирането работи в съответствие с вашата политика за архивиране, тъй като не искате да сте в ситуацията, че имате нужда от архивиране и то не работи или не съществува. Това със сигурност ще бъде голям проблем. Така че най-доброто тук е да използвате изпитано в битка приложение за управление на архивиране, за да избегнете проблеми в случай на неуспех.
PGHoard е PostgreSQL система за архивиране и възстановяване, която съхранява архивни данни в облачни обекти. Той поддържа PostgreSQL 9.3 или по-нова версия, до PostgreSQL 11, най-новата поддържана версия в момента. Текущата версия на PGHoard е 2.1.0, пусната през май 2019 г. (преди 1 година).
ClusterControl е софтуер за управление и автоматизация без агенти за клъстери от бази данни. Той помага за разгръщането, наблюдението, управлението и мащабирането на вашия сървър/клъстер на база данни директно от потребителския интерфейс на ClusterControl или чрез ClusterControl CLI. Той включва функции за управление на архивиране и поддържа PostgreSQL 9.6, 10, 11 и 12 версии. Текущата версия на ClusterControl е 1.7.6, пусната миналия месец, през април 2020 г.
В този блог ще сравним PGHoard с функцията за управление на архивиране на ClusterControl и ще видим как да инсталираме и използваме и двете системи. За това ще използваме сървър на Ubuntu 18.04 и PostgreSQL11 (тъй като това е най-новата поддържана версия за използване на PGHoard). Ще инсталираме PGHoard в същия сървър на база данни и ще го импортираме в ClusterControl.
Сравнение на функциите за управление на архивиране
PGHoard
Някои от най-важните функции на PGHoard са:
- Автоматично периодично базово архивиране
- Автоматично архивиране на регистъра на транзакциите
- Самостоятелна поддръжка за горещо архивиране
- Поддръжка за съхранение на облачни обекти (AWS S3, Google Cloud, OpenStack Swift, Azure, Ceph)
- Възстановяване на резервно копие директно от обектно хранилище, компресирано и криптирано
- Възстановяване в момента (PITR)
- Инициализирайте нов режим на готовност от резервни копия за съхранение на обекти, автоматично конфигуриран като репликиращ се горещ режим на готовност
- Паралелна компресия и криптиране
Един от начините да го използвате е да имате отделна машина за архивиране, така че PGHoard да може да се свърже с pg_receivexlog, за да получава WAL файлове от базата данни. Друг режим е да използвате pghoard_postgres_command като PostgreSQL archive_command. И в двата случая PGHoard създава периодични базови архиви с помощта на pg_basebackup.
ClusterControl
Нека видим и някои от най-важните характеристики на тази система:
- Удобен за потребителя потребителски интерфейс
- Архивиране и възстановяване (в същия възел или в отделен)
- Насрочете резервни копия
- Създайте клъстер от Backup
- Автоматично потвърждаване на архивиране
- Компресия
- Шифроване
- Автоматично качване в облак
- Възстановяване в момента (PITR)
- Различни методи за архивиране (логически, физически, пълен, инкрементален и др.)
- Архивни оперативни отчети
Тъй като това не е само система за управление на архивиране, ще споменем и различни важни функции, а не само свързаните с архивирането:
- Разгръщане/импортиране на бази данни:самостоятелни, клъстерни/репликация, балансьори на натоварване
- Мащабиране:добавяне/премахване на възли, четене на реплики, клониране на клъстер, репликация от клъстер в клъстер
- Мониторинг:персонализирани табла за управление, откриване на грешки, монитор на заявки, съветници за ефективност, аларми и известия, разработване на персонализирани съветници
- Автоматично възстановяване:Възстановяване на възел и клъстер, отказ, среда с висока достъпност
- Управление:управление на конфигурацията, надстройки на корекции на базата данни, управление на потребителите на база данни, интеграция в облак, отчети за операции, управление на ProxySQL
- Сигурност:управление на ключове, контрол на достъпа, базиран на роли, удостоверяване с помощта на LDAP/Active Directory, SSL криптиране
Препоръчителната топология е да имате отделен възел за стартиране на ClusterControl, за да сте сигурни, че в случай на неуспех можете да се възползвате от функциите на ClusterControl за автоматично възстановяване и преодоляване на срив (наред с други полезни функции) .
Системни изисквания
PGHoard
Според документацията, PGHoard може да архивира и възстановява PostgreSQL версии 9.3 и по-нови. Демонът е внедрен в Python и работи с CPython версия 3.5 или по-нова. В зависимост от изискванията може да са необходими следните модули на Python:
- psycopg2 за търсене на метаданни от регистъра на транзакциите
- заявки за вътрешна архитектура клиент-сървър
- azure за съхранение на обекти на Microsoft Azure
- botocore за AWS S3 (или Ceph-S3) съхранение на обекти
- google-api-client за съхранение на обекти в Google Cloud
- криптография за резервно криптиране и декриптиране (изисква се версия 0.8 или по-нова)
- snappy за бърза компресия и декомпресия
- zstandard за Zstandard (zstd) компресия и декомпресия
- systemd за системна интеграция
- swiftclient за съхранение на обекти на OpenStack Swift
- парамико за съхранение на sftp обекти
Няма споменаване на поддържаната операционна система, но пише, че е тествана на съвременни Linux x86-64 системи, но трябва да работи на други платформи, които предоставят необходимите модули.
ClusterControl
Сървърът на ClusterControl изисква следния софтуер:
- MySQL сървър/клиент
- Уеб сървър на Apache (или nginx)
- mod_rewrite
- mod_ssl
- разрешете отмяната на .htaccess
- PHP (5.4 или по-нова версия)
- RHEL:php, php-mysql, php-gd, php-ldap, php-curl
- Debian:php5-common, php5-mysql, php5-gd, php5-ldap, php5-curl, php5-json
- Сигурност на ядрото на Linux (SElinux или AppArmor) – трябва да бъде деактивирана или настроена на разрешителен режим
- OpenSSH сървър/клиент
- BASH (препоръчително:версия 4 или по-нова)
- NTP сървър – Времето на всички сървъри трябва да се синхронизира в една часова зона
- socat или netcat - за поточно архивиране
И поддържа различни операционни системи:
- 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
Ако ClusterControl е инсталиран чрез инсталационен скрипт (install-cc) или мениджър на пакети (yum/apt), всички зависимости ще бъдат автоматично удовлетворени.
За PostgreSQL поддържа версии 9.6/10.x/11.x/12.x. Можете да намерите пълен списък на поддържаните бази данни в документацията.
Той просто изисква SSH достъп без парола до възлите на базата данни (използвайки частни и публични ключове) и привилегирован потребител на ОС (може да бъде root или sudo потребител).
Процесът на инсталиране
Процес на инсталиране на PGHoard
Ще приемем, че вашата база данни PostgreSQL работи и работи, така че нека инсталираме останалите пакети. PGHoard е пакет на Python, така че след като имате инсталирани необходимите пакети, можете да го инсталирате с помощта на командата pip:
$ apt install postgresql-server-dev-11 python3 python3-pip python3-snappy
$ pip3 install pghoard
Като част от този инсталационен процес, трябва да подготвите екземпляра на PostgreSQL за работа с този инструмент. За това ще трябва да редактирате postgresql.conf, за да разрешите WAL архив и да увеличите max_wal_senders:
wal_level = logical
max_wal_senders = 4
archive_mode = on
archive_command = pghoard_postgres_command --mode archive --site default --xlog %f
Тази промяна ще изисква рестартиране на базата данни:
$ service postgresql restart
Сега нека създадем потребител на база данни за PGHoard:
$ psql
CREATE USER pghoard PASSWORD 'Password' REPLICATION;
И добавете следния ред във файла pg_hba.conf:
host replication pghoard 127.0.0.1/32/32 md5
Презаредете услугата за база данни:
$ service postgresql reload
За да работи, ще трябва да създадете JSON конфигурационен файл за PGHoard. Ще видим това в следващия раздел „Използване“.
Процес на инсталиране на ClusterControl
Има различни методи за инсталиране, както е посочено в документацията. В случай на ръчна инсталация, необходимите пакети са посочени в същата документация и има ръководство стъпка по стъпка за целия процес.
Нека видим пример за използване на скрипта за автоматична инсталация.
$ wget http://www.severalnines.com/downloads/cmon/install-cc
$ chmod +x install-cc
$ sudo ./install-cc # omit sudo if you run as root
Инсталационният скрипт ще се опита да автоматизира следните задачи:
- Инсталирайте и конфигурирайте локален MySQL сървър (използван от ClusterControl за съхраняване на данни за наблюдение)
- Инсталирайте и конфигурирайте пакета на контролера ClusterControl чрез мениджър на пакети
- Инсталирайте зависимостите на ClusterControl чрез мениджър на пакети
- Конфигуриране на Apache и SSL
- Конфигуриране на ClusterControl API URL и маркер
- Конфигуриране на ClusterControl Controller с минимални опции за конфигурация
- Активирайте услугата CMON при стартиране и я стартирайте
Изпълнявайки споменатия скрипт, ще получите въпрос относно изпращането на диагностични данни:
$ 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):
След това той ще започне да инсталира необходимите пакети. Следващият въпрос е за името на хоста, което ще се използва:
=> The Controller hostname will be set to 192.168.100.116. Do you want to change it? (y/N):
Когато локалната база данни е инсталирана, инсталаторът ще я защити, като създаде root парола, която трябва да въведете:
=> 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 ...
И потребителска парола за CMON, която ще се използва от ClusterControl:
=> Set a password for ClusterControl's MySQL user (cmon) [cmon]
=> Supported special characters: [email protected]#$%^&*()_+{}<>?
=> Enter a CMON user password:
Това е. По този начин ще имате всичко на място, без да инсталирате или конфигурирате нещо ръчно.
=> 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.
При първия достъп до потребителския интерфейс ще трябва да се регистрирате за 30-дневния безплатен пробен период.
След изтичането на 30-дневния ви безплатен пробен период, вашата инсталация автоматично ще се преобразува в изданието на общността, освен ако нямате търговски лиценз.
Използване на управление на архивиране
Използване на PGHoards
След като този инструмент бъде инсталиран, трябва да създадете JSON файл (pghoard.json) с конфигурацията на PGHoard. Това е пример:
{
"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/"
}
}
}
В този пример ще направим резервно копие и ще го съхраняваме локално, но можете също да конфигурирате акаунт в облак и да го съхранявате там:
"object_storage": {
"aws_access_key_id": "AKIAQTUN************",
"aws_secret_access_key": "La8YZBvN********************************",
"bucket_name": "pghoard",
"region": "us-east-1",
"storage_type": "s3"
},
Можете да намерите повече подробности за конфигурацията в документацията.
Сега нека стартираме архивирането с помощта на този 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
В директорията „backup_location“ (в този случай /var/lib/pghoard) ще намерите файл pghoard_state.json с текущото състояние:
$ 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
И директория на сайта (в този случай наречена „по подразбиране/“) с архива:
$ 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
Можете да проверите архивния списък с помощта на командата 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
Използване на ClusterControl
За това ще приемем, че вашият PostgreSQL клъстер от база данни е импортиран в ClusterControl или сте го разположили с помощта на тази система.
В ClusterControl изберете своя клъстер и отидете в секцията „Резервно копие“, след което изберете „Създаване на резервно копие“.
За този пример ще използваме опцията „График за архивиране“. Когато планирате архивиране, в допълнение към избора на общи опции като метод или съхранение, трябва също да посочите график/честота.
Трябва да изберете един метод, сървърът, от който ще бъде взето архивирането и къде искате да го съхранявате. Можете също да качите резервното си копие в облака (AWS, Google или Azure), като активирате съответния бутон.
След това трябва да посочите използването на компресиране, криптиране и задържане на вашето резервно копие. В тази стъпка можете също да активирате функцията „Проверка на архивиране“, която ви позволява да потвърдите, че архивът е използваем, като го възстановите в различен възел.
Ако активирате опцията „Качване на архивно копие в облака“, вие вижте раздел, за да посочите доставчика на облак и идентификационните данни. Ако не сте интегрирали акаунта си в облак с ClusterControl, трябва да отидете на ClusterControl -> Integrations -> Cloud Providers, за да го добавите.
В секцията за архивиране можете да видите напредъка на архивирането и информация като метод, размер, местоположение и др.
Команден ред на ClusterControl (s9s)
За скриптове и автоматизиране на задачи или дори ако предпочитате просто командния ред, ClusterControl разполага с инструмента s9s. Това е инструмент от командния ред за управление на вашия клъстер от база данни. Нека видим пример как да създавате и изброявате архиви с помощта на този инструмент:
$ 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
Можете да намерите още примери и информация в раздела за документация на ClusterControl CLI.
Заключение
Като заключение от сравняването на тези споменати системи за управление на архивиране, можем да кажем, че PGHoard е безплатно, но сложно решение за тази задача. Ще ви трябва известно време, за да разберете как работи и как да го конфигурирате, тъй като официалната документация е малко по-слаба за това. Освен това изглежда малко остаряло, тъй като последната версия беше преди 1 година. Освен това ClusterControl е система за управление „всичко в едно“ с много функции, не само за управление на архивиране, с удобен и лесен за използване потребителски интерфейс. Той има общност (с ограничени налични функции) и платени версии с 30-дневен безплатен пробен период. Документацията е ясна и пълна, с примери и подробна информация.
Надяваме се, че този блог ви помогне да вземете най-доброто решение, за да запазите данните си в безопасност.