freehck.script_psql_backup
freehck.script_psql_backup
Diese Rolle erstellt ein Skript, das psql-Backups durchführt.
Es sichert die Datenbank, möglicherweise mit gzip und verschlüsselt das Backup mit aes256.
Es kann Nachrichten an Slack senden.
Es kann dein Backup auf S3 speichern oder es per SCP an einen anderen Host übertragen.
Rollenvariablen
Basisvariablen
psql_backup_host
: psql-Host
psql_backup_port
: psql-Port (Standard 3306)
psql_backup_user
: psql-Benutzer
psql_backup_pass
: psql-Passwort
psql_backup_db
: psql-Datenbank, die gesichert werden soll (wenn nicht gesetzt, wird die Option --all-databases an psqldump übergeben)
psql_backup_backend_use_s3
: auf true setzen, wenn du dein Backup auf S3 speichern möchtest
psql_backup_backend_use_scp
: auf true setzen, wenn du dein Backup per SCP an einen anderen Host senden möchtest
S3-Backend-Variablen
psql_backup_s3cfg_template
: Vorlage für deine s3fs-Konfiguration (die Standardvorlage ist bereitgestellt, keine Sorge)
psql_backup_s3
: s3-Konfigurationsoptionen im folgenden Format
psql_backup_s3:
benutzername: "s3user"
zugriffs_key: "s3user-akey"
geheim_key: "s3user-skey"
bucket: "bucket-name"
SCP-Backend-Variablen
psql_backup_scp_host
: Speicher-Host, um dein Backup zu kopieren
psql_backup_scp_user
: Benutzer, um sich auf dem Speicher-Host anzumelden
psql_backup_scp_dst
: Pfad auf dem Speicher-Host für dein Backup
psql_backup_scp_identity_src
: Identitätsdatei zur Anmeldung auf dem Speicher-Host (ja, es sollte ein privater Schlüssel sein)
Benennung
psql_backup_archive_prefix
: einfach der Backup-Name oder alles vor dem Zeitstempel
psql_backup_archive_stamp
: Zeitstempelvorlage im Format des date
-Tools (der Standard ist %F-%Hh%Mm%Ss
, was zu Zeitstempeln wie 2019-09-23-12h22m07s
führt)
psql_backup_script_name
: wenn du das Basisskript umbenennen möchtest, kannst du das tun
psql_backup_custom_script_name
: wenn du einen bestimmten Namen für das Job-Skript festlegen möchtest, das tatsächlich das Backup durchführt. Der Standard ist psql-backup-<database_name>.sh
, wobei all
sein kann, wenn keine Datenbanken zum Backup angegeben wurden.
psql_backup_scp_identity_name
: der Standard ist id_rsa
, aber es könnte nützlich sein, ihn zu ändern, falls du mehrere SCP-Backends mit unterschiedlichen Schlüsseln haben möchtest
psql_backup_encrypt_aes_key_name
: der Standard ist aes256.key
, notwendig, wenn du unterschiedliche Verschlüsselungsschlüssel für verschiedene Backup-Aufgaben haben möchtest
Benachrichtigungen
psql_backup_warn_size
: in GiB, Standard ist 0. Vergleiche dein Backup mit dieser Größe. Wenn dein Backup kleiner ist, wirst du darüber gewarnt.
psql_backup_hostname
: Hostname (der in Slack-Nachrichten angezeigt wird)
psql_backup_slack_webhook
: wie geschrieben, es ist ein Slack-Webhook; setze ihn, um Slack-Benachrichtigungen zu erhalten
So erhältst du einen Slack-Webhook: https://get.slack.help/hc/en-us/articles/115005265063-Incoming-WebHooks-for-Slack
Komprimierungs- und Verschlüsselungsvariablen
psql_backup_gzip
: gzip-Backup-Datei
psql_backup_encrypt_aes
: verschlüsselt die Backup-Datei (wenn gzip aktiviert ist, wird diese Aktion speziell NACH gzip durchgeführt)
psql_backup_encrypt_aes_key_src
: aes256-Schlüssel zur Verschlüsselung deines Backups
Der Aes256-Schlüssel ist einfach 32 Bytes zufällig.
Du kannst den folgenden Befehl zur Erstellung verwenden: dd if=/dev/urandom of=aes256.key count=1 bs=32.
Wenn du Zeichenfolgen-Passwörter bevorzugst (weniger sicher), kannst du dies verwenden: pwgen -n1 -s 32 | tr -d '\n' >aes256.key
Verzeichnisse
psql_backup_script_dir
: Verzeichnis zum Speichern des Basisskripts
psql_backup_custom_script_dir
: Verzeichnis zum Speichern von Skripten, die zu den entsprechenden Backup-Jobs gehören
psql_backup_conf_dir
: Verzeichnis zum Speichern von Konfigurationsdateien für das Backup-Skript
psql_backup_encrypt_aes_key_dir
: Verzeichnis zum Speichern des aes256-Verschlüsselungsschlüssels
psql_backup_tmpdir
: Verzeichnis, um temporäre Ergebnisse aufzubewahren (du musst kein separates erstellen, es ist standardmäßig /tmp)
Daten außerhalb der Rolle übergeben
psql_backup_save_facts_about_custom_script
: wenn du es auf true setzt, speichert die Rolle den vollständigen Pfad des generierten Job-Skripts, das ausgeführt werden muss, um das Backup durchzuführen, in der Variablen psql_backup_last_generated_custom_script
. Du kannst diese Variable verwenden, um einen spezifischen Cron-Task für dieses Skript hinzuzufügen.
Beispiel-Playbook
# psql-Backup-Job-Skript erstellen
- role: freehck.script_psql_backup
# psql-Verbindungsparameter
psql_backup_host: "{{ db_host }}"
psql_backup_user: "{{ db_user }}"
psql_backup_pass: "{{ db_pass }}"
psql_backup_db: "{{ db_name }}"
# Backend-Speicherparameter
psql_backup_backend_use_s3: no
psql_backup_backend_use_scp: yes
psql_backup_scp_host: "{{ hostvars['storage'].ansible_host }}"
psql_backup_scp_identity_src: "{{ playbook_dir }}/files/id_rsa.bkp.db01"
psql_backup_scp_user: 'file'
psql_backup_scp_dst: '/var/www/file/public/psql-db-prod-backup'
# gzip und verschlüsseln
psql_backup_gzip: yes
psql_backup_encrypt_aes: yes
psql_backup_encrypt_aes_key_src: "{{ playbook_dir }}/files/aes256.bkp.key"
# andere
psql_backup_save_facts_about_custom_script: yes
psql_backup_logfile: "/var/log/psql-backup.log"
tags: [ backup, psql ]
# Es ist sinnvoll, für dieses Job-Skript einen Cron-Job zu erstellen
- role: freehck.crontask
crontask_file: "backups"
crontask_name: "Datenbank sichern"
crontask_hour: "12"
crontask_minute: "0"
crontask_job: "{{ psql_backup_last_generated_custom_script }}"
crontask_user: "root"
crontask_commented_out: false
tags: [ backup, psql ]
Wichtige Informationen
Nachdem du das psql-Backup-Skript auf deinem Host bereitgestellt hast, ist es sinnvoll, auf den Host zu gehen, der die Backup-Aufgaben durchführt, und das Job-Skript ohne Parameter aus /opt/scripts
auszuführen. Wenn es ohne Fehler durchläuft und du die Backup-Datei im Speicher siehst, ist alles in Ordnung. Wenn nicht - wirst du herausfinden, wo das Problem lag. Zum Beispiel könntest du vergessen haben, den Speicher-Host zu known_hosts
hinzuzufügen, als du die Benutzer konfiguriert hast. Oder deine s3cfg
-Vorlage könnte einen Fehler enthalten. Vergiss nicht, alles zweimal zu überprüfen: Backups sind eine sehr wichtige Aufgabe.
Nachdem du überprüft hast, dass das Backup erstellt und am richtigen Ort gespeichert wurde, überprüfe es sorgfältig. Du musst sicher sein, dass du es mit diesem Backup wiederherstellen kannst.
Lizenz
MIT
Autorinformationen
Dmitrii Kashin, freehck@freehck.ru
ansible-galaxy install freehck.script_psql_backup