PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Alternatives à pghoard - Gestion des sauvegardes PostgreSQL avec ClusterControl

La gestion des sauvegardes peut être une tâche complexe et risquée à effectuer de manière manuelle. Vous devez savoir que la sauvegarde fonctionne conformément à votre politique de sauvegarde car vous ne voulez pas être dans la situation où vous avez besoin de la sauvegarde et qu'elle ne fonctionne pas ou qu'elle n'existe pas. Ce sera certainement un gros problème. Donc, le mieux ici est d'utiliser une application de gestion de sauvegarde éprouvée, pour éviter tout problème en cas d'échec.

PGHoard est un démon de sauvegarde et un système de restauration PostgreSQL qui stocke les données de sauvegarde dans des magasins d'objets cloud. Il prend en charge PostgreSQL 9.3 ou version ultérieure, jusqu'à PostgreSQL 11, la dernière version prise en charge actuellement. La version actuelle de PGHoard est la 2.1.0, publiée en mai 2019 (il y a 1 an).

ClusterControl est un logiciel de gestion et d'automatisation sans agent pour les clusters de bases de données. Il aide à déployer, surveiller, gérer et mettre à l'échelle votre serveur/cluster de base de données directement à partir de l'interface utilisateur de ClusterControl ou à l'aide de l'interface de ligne de commande de ClusterControl. Il inclut des fonctionnalités de gestion des sauvegardes et prend en charge les versions PostgreSQL 9.6, 10, 11 et 12. La version actuelle de ClusterControl est la 1.7.6, publiée le mois dernier, en avril 2020.

Dans ce blog, nous comparerons PGHoard avec la fonctionnalité ClusterControl Backup Management et nous verrons comment installer et utiliser les deux systèmes. Pour cela, nous utiliserons un serveur Ubuntu 18.04 et PostgreSQL11 (car il s'agit de la dernière version prise en charge pour l'utilisation de PGHoard). Nous allons installer PGHoard sur le même serveur de base de données et l'importer dans ClusterControl.

Comparaison des fonctionnalités de gestion des sauvegardes

PGHoard

Certaines des fonctionnalités les plus importantes de PGHoard sont :

  • Sauvegardes de base périodiques automatiques
  • Sauvegardes automatiques du journal des transactions
  • Prise en charge autonome de la sauvegarde à chaud
  • Prise en charge du stockage d'objets cloud (AWS S3, Google Cloud, OpenStack Swift, Azure, Ceph)
  • Restauration de sauvegarde directement depuis le stockage d'objets, compressée et chiffrée
  • Récupération ponctuelle (PITR)
  • Initialiser un nouveau standby à partir des sauvegardes de stockage d'objets, automatiquement configuré comme un hot-standby de réplication
  • Compression et chiffrement parallèles

L'une des façons de l'utiliser est d'avoir une machine de sauvegarde séparée, ainsi PGHoard peut se connecter avec pg_receivexlog pour recevoir les fichiers WAL de la base de données. Un autre mode consiste à utiliser pghoard_postgres_command comme archive_command PostgreSQL. Dans les deux cas, PGHoard crée des sauvegardes de base périodiques à l'aide de pg_basebackup.

ClusterControl

Voyons également quelques-unes des fonctionnalités les plus importantes de ce système :

  • Interface utilisateur conviviale
  • Sauvegarde et restauration (dans le même nœud ou dans un nœud distinct)
  • Planifier des sauvegardes
  • Créer un cluster à partir de la sauvegarde
  • Vérification automatique des sauvegardes
  • Compression
  • Chiffrement
  • Téléchargement automatique dans le cloud
  • Récupération ponctuelle (PITR)
  • Différentes méthodes de sauvegarde (logique, physique, complète, incrémentielle, etc.)
  • Rapports opérationnels de sauvegarde

Comme il ne s'agit pas seulement d'un système de gestion de sauvegarde, nous mentionnerons également différentes fonctionnalités importantes, pas seulement celles liées à la sauvegarde :

  • Déployer/importer des bases de données :autonome, cluster/réplication, équilibreurs de charge
  • Mise à l'échelle :ajouter/supprimer des nœuds, réplicas en lecture, clonage de cluster, réplication de cluster à cluster
  • Surveillance :tableaux de bord personnalisés, détection de pannes, moniteur de requêtes, conseillers de performance, alarmes et notifications, développement de conseillers personnalisés
  • Récupération automatique :récupération de nœud et de cluster, basculement, environnements à haute disponibilité
  • Gestion :gestion de la configuration, mises à niveau des correctifs de base de données, gestion des utilisateurs de la base de données, intégration dans le cloud, rapports d'exploitation, gestion ProxySQL
  • Sécurité :gestion des clés, contrôle d'accès basé sur les rôles, authentification à l'aide de LDAP/Active Directory, cryptage SSL

La topologie recommandée est d'avoir un nœud séparé pour exécuter ClusterControl, pour s'assurer qu'en cas de panne, vous pouvez profiter des fonctionnalités de récupération automatique et de basculement de ClusterControl (entre autres fonctionnalités utiles) .

Configuration requise

PGHoard

Selon la documentation, PGHoard peut sauvegarder et restaurer les versions 9.3 et supérieures de PostgreSQL. Le démon est implémenté en Python et fonctionne avec CPython version 3.5 ou plus récente. Les modules Python suivants peuvent être requis en fonction des exigences :

  • psycopg2 pour rechercher les métadonnées du journal des transactions
  • requêtes pour l'architecture client-serveur interne
  • azure pour le stockage d'objets Microsoft Azure
  • botocore pour le stockage d'objets AWS S3 (ou Ceph-S3)
  • google-api-client pour le stockage d'objets Google Cloud
  • cryptographie pour le chiffrement et le déchiffrement de sauvegarde (version 0.8 ou plus récente requise)
  • snappy pour la compression et la décompression Snappy
  • zstandard pour la compression et la décompression Zstandard (zstd)
  • systemd pour l'intégration de systemd
  • swiftclient pour le stockage d'objets OpenStack Swift
  • paramiko pour le stockage d'objets sftp

Il n'y a aucune mention du système d'exploitation pris en charge, mais il est indiqué qu'il a été testé sur les systèmes Linux x86-64 modernes, mais qu'il devrait fonctionner sur d'autres plates-formes fournissant les modules requis.

ClusterControl

Le logiciel suivant est requis par le serveur ClusterControl :

  • Serveur/client MySQL
  • Serveur web Apache (ou nginx)
  • mod_rewrite
  • mod_ssl
  • autoriser le remplacement de .htaccess
  • PHP (5.4 ou version ultérieure)
  • 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 ou AppArmor) - doit être désactivé ou défini sur le mode permissif
  • Serveur/client OpenSSH
  • BASH (recommandé :version 4 ou ultérieure)
  • Serveur NTP - L'heure de tous les serveurs doit être synchronisée sous un fuseau horaire
  • socat ou netcat - pour les sauvegardes en continu

Et il prend en charge différents systèmes d'exploitation :

  • 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

Si ClusterControl est installé via un script d'installation (install-cc) ou un gestionnaire de packages (yum/apt), toutes les dépendances seront automatiquement satisfaites.

Pour PostgreSQL, il prend en charge les versions 9.6/10.x/11.x/12.x. Vous pouvez trouver une liste complète des bases de données prises en charge dans la documentation.

Il nécessite simplement un accès SSH sans mot de passe aux nœuds de la base de données (à l'aide de clés privées et publiques) et un utilisateur privilégié du système d'exploitation (il peut s'agir d'un utilisateur root ou sudo).

Le processus d'installation

Processus d'installation de PGHoard

Nous supposerons que votre base de données PostgreSQL est opérationnelle, alors installons les packages restants. PGHoard est un package Python, donc après avoir installé les packages requis, vous pouvez l'installer à l'aide de la commande pip :

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

$ pip3 install pghoard

Dans le cadre de ce processus d'installation, vous devez préparer l'instance PostgreSQL pour qu'elle fonctionne avec cet outil. Pour cela, vous devrez éditer le postgresql.conf pour autoriser l'archivage WAL et augmenter le max_wal_senders :

wal_level = logical

max_wal_senders = 4

archive_mode = on

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

Cette modification nécessitera un redémarrage de la base de données :

$ service postgresql restart

Maintenant, créons un utilisateur de base de données pour PGHoard :

$ psql

CREATE USER pghoard PASSWORD 'Password' REPLICATION;

Et ajoutez la ligne suivante dans le fichier pg_hba.conf :

host    replication  pghoard  127.0.0.1/32/32  md5

Recharger le service de base de données :

$ service postgresql reload

Pour le faire fonctionner, vous devrez créer un fichier de configuration JSON pour PGHoard. Nous verrons cela dans la prochaine section "Utilisation".

Processus d'installation de ClusterControl

Il existe différentes méthodes d'installation comme indiqué dans la documentation. Dans le cas d'une installation manuelle, les packages requis sont spécifiés dans la même documentation, et il existe un guide étape par étape pour tout le processus.

Voyons un exemple utilisant le script d'installation automatique.

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

$ chmod +x install-cc

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

Le script d'installation tentera d'automatiser les tâches suivantes :

  • Installer et configurer un serveur MySQL local (utilisé par ClusterControl pour stocker les données de surveillance)
  • Installer et configurer le package du contrôleur ClusterControl via le gestionnaire de packages
  • Installer les dépendances ClusterControl via le gestionnaire de packages
  • Configurer Apache et SSL
  • Configurer l'URL et le jeton de l'API ClusterControl
  • Configurer le contrôleur ClusterControl avec un minimum d'options de configuration
  • Activez le service CMON au démarrage et démarrez-le

En exécutant le script mentionné, vous recevrez une question sur l'envoi de données de diagnostic :

$ 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):

Ensuite, il commencera à installer les packages requis. La question suivante concerne le nom d'hôte qui sera utilisé :

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

Lorsque la base de données locale est installée, le programme d'installation la sécurise en créant un mot de passe root que vous devez saisir :

=> 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 ...

Et un mot de passe utilisateur CMON, qui sera utilisé par ClusterControl :

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

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

=> Enter a CMON user password:

C'est tout. De cette façon, vous aurez tout en place sans rien installer ni configurer manuellement.

=> 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.

La première fois que vous accédez à l'interface utilisateur, vous devez vous inscrire pour la période d'essai gratuite de 30 jours.

À la fin de votre essai gratuit de 30 jours, votre installation sera automatiquement convertie en l'édition communautaire, sauf si vous disposez d'une licence commerciale.

Utilisation de la gestion des sauvegardes

Utilisation de PGHoards

Une fois cet outil installé, vous devez créer un fichier JSON (pghoard.json) avec la configuration PGHoard. Ceci est un exemple :

{

"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/"

}

}

}

Dans cet exemple, nous allons prendre une sauvegarde et la stocker localement, mais vous pouvez également configurer un compte cloud et l'y stocker :

"object_storage": {

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

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

"bucket_name": "pghoard",

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

"storage_type": "s3"

},

Vous pouvez trouver plus de détails sur la configuration dans la documentation.

Maintenant, exécutons la sauvegarde en utilisant ce fichier 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

Dans le répertoire "backup_location" (dans ce cas /var/lib/pghoard), vous trouverez un fichier pghoard_state.json avec l'état actuel :

$ 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

Et un répertoire de site (dans ce cas appelé "default/") avec la sauvegarde :

$ 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

Vous pouvez vérifier la liste de sauvegarde à l'aide de la commande 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

Utilisation de ClusterControl

Pour cela, nous supposerons que vous avez importé votre cluster de base de données PostgreSQL dans ClusterControl ou que vous l'avez déployé à l'aide de ce système.

Dans ClusterControl, sélectionnez votre cluster et accédez à la section "Sauvegarde", puis sélectionnez "Créer une sauvegarde".

Pour cet exemple, nous utiliserons l'option "Planifier la sauvegarde". Lors de la planification d'une sauvegarde, en plus de sélectionner les options courantes telles que la méthode ou le stockage, vous devez également spécifier la planification/la fréquence.

Vous devez choisir une méthode, le serveur à partir duquel la sauvegarde sera effectuée , et où vous voulez le stocker. Vous pouvez également télécharger votre sauvegarde dans le cloud (AWS, Google ou Azure) en activant le bouton correspondant.

Ensuite, vous devez spécifier l'utilisation de la compression, du chiffrement et de la rétention de votre sauvegarde. Dans cette étape, vous pouvez également activer la fonctionnalité "Vérifier la sauvegarde" qui vous permet de confirmer que la sauvegarde est utilisable en la restaurant dans un nœud différent.

Si vous activez l'option "Télécharger la sauvegarde sur le cloud", vous voir une section pour spécifier le fournisseur de cloud et les informations d'identification. Si vous n'avez pas intégré votre compte cloud avec ClusterControl, vous devez aller dans ClusterControl -> Intégrations -> Fournisseurs Cloud pour l'ajouter.

Dans la section de sauvegarde, vous pouvez voir la progression de la sauvegarde, et des informations telles que la méthode, la taille, l'emplacement, etc.

Ligne de commande ClusterControl (s9s)

Pour les tâches de script et d'automatisation, ou même si vous préférez simplement la ligne de commande, ClusterControl dispose de l'outil s9s. C'est un outil de ligne de commande pour gérer votre cluster de bases de données. Voyons un exemple de création et de liste de sauvegardes à l'aide de cet outil :

$ 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

Vous pouvez trouver plus d'exemples et d'informations dans la section de documentation CLI de ClusterControl.

Conclusion

En conclusion de la comparaison de ces systèmes de gestion de sauvegarde mentionnés, nous pouvons dire que PGHoard est une solution gratuite mais complexe pour cette tâche. Vous aurez besoin de temps pour comprendre comment cela fonctionne et comment le configurer, car la documentation officielle est un peu pauvre à ce sujet. De plus, il semble un peu obsolète, car la dernière version date d'il y a 1 an. De plus, ClusterControl est un système de gestion tout-en-un avec de nombreuses fonctionnalités, pas seulement la gestion des sauvegardes, avec une interface utilisateur conviviale et facile à utiliser. Il a une communauté (avec des fonctionnalités disponibles limitées) et des versions payantes avec une période d'essai gratuite de 30 jours. La documentation est claire et complète, avec des exemples et des informations détaillées.

Nous espérons que ce blog vous aidera à prendre la meilleure décision pour protéger vos données.