PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

pghoard алтернативи - PostgreSQL управление на архивиране с ClusterControl

Управлението на архивиране може да бъде сложна и рискована задача, която да се извършва ръчно. Трябва да знаете, че архивирането работи в съответствие с вашата политика за архивиране, тъй като не искате да сте в ситуацията, че имате нужда от архивиране и то не работи или не съществува. Това със сигурност ще бъде голям проблем. Така че най-доброто тук е да използвате изпитано в битка приложение за управление на архивиране, за да избегнете проблеми в случай на неуспех.

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-дневен безплатен пробен период. Документацията е ясна и пълна, с примери и подробна информация.

Надяваме се, че този блог ви помогне да вземете най-доброто решение, за да запазите данните си в безопасност.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как работи Ceiling() в PostgreSQL

  2. Как да конкатенираме колони в Postgres SELECT?

  3. Как да превключите база данни с помощта на PostgreSQL

  4. PostgreSQL наследяване с JPA, хибернация

  5. Често срещани грешки при мигриране на PostgreSQL бази данни от On-Prem към AWS RDS