freehck.script_psql_backup

freehck.script_psql_backup

Ta rola tworzy skrypt, który wykonuje kopie zapasowe psql.

Zrzuca bazę danych, ewentualnie kompresuje i szyfruje kopię zapasową przy użyciu aes256.

Może wysyłać powiadomienia do Slacka.

Może przechowywać twoje kopie zapasowe na S3 lub/lub przesyłać je na inny host za pomocą SCP.

Zmienne roli

Podstawowe zmienne

psql_backup_host: host psql

psql_backup_port: port psql (domyślnie 3306)

psql_backup_user: użytkownik psql

psql_backup_pass: hasło psql

psql_backup_db: baza danych psql do zrobienia kopii zapasowej (jeśli nie ustawiona, wtedy opcja --all-databases zostanie przekazana do psqldump)

psql_backup_backend_use_s3: ustaw na true, jeśli chcesz przechowywać kopię zapasową na S3

psql_backup_backend_use_scp: ustaw na true, jeśli chcesz przesyłać kopię zapasową na inny host za pomocą scp

Zmienne dla backendu S3

psql_backup_s3cfg_template: szablon konfiguracji s3fs (domyślny jest dostarczany, nie martw się)

psql_backup_s3: opcje konfiguracji S3 w formacie:

psql_backup_s3:
  username: "s3user"
  access_key: "s3user-akey"
  secret_key: "s3user-skey"
  bucket: "bucket-name"
Zmienne dla backendu SCP

psql_backup_scp_host: host do przechowywania kopii zapasowej

psql_backup_scp_user: użytkownik do logowania na hoście storage

psql_backup_scp_dst: ścieżka na hoście storage do przechowywania kopii zapasowej

psql_backup_scp_identity_src: plik tożsamości do logowania na hoście storage (tak, powinien to być klucz prywatny)

Nazewnictwo

psql_backup_archive_prefix: po prostu nazwa kopii zapasowej lub wszystko przed znakiem czasowym.

psql_backup_archive_stamp: szablon daty w formacie narzędzia date (domyślnie to %F-%Hh%Mm%Ss, co skutkuje znacznikami czasowymi takimi jak 2019-09-23-12h22m07s)

psql_backup_script_name: jeśli chcesz zmienić nazwę podstawowego skryptu, możesz to zrobić.

psql_backup_custom_script_name: jeśli chcesz ustawić konkretną nazwę dla skryptu zadania, który faktycznie wykonuje kopię zapasową. Domyślnie to psql-backup-<nazwa_bazy_danych>.sh, gdzie może być all, jeśli nie wskazano żadnych baz danych do zrobienia kopii.

psql_backup_scp_identity_name: domyślnie to id_rsa, ale warto to zmodyfikować, jeśli chcesz mieć wiele backendów SCP, które używają różnych kluczy.

psql_backup_encrypt_aes_key_name: domyślnie to aes256.key, potrzebne, jeśli chcesz mieć różne klucze szyfrowania dla różnych zadań kopii zapasowej.

Powiadomienia

psql_backup_warn_size: w GiB, domyślnie 0. Porównuje kopię zapasową z tą wielkością. Jeśli twoja kopia zapasowa jest mniejsza, ostrzeże cię o tym.

psql_backup_hostname: nazwa hosta (która zostanie wydrukowana w wiadomościach Slack).

psql_backup_slack_webhook: jak napisano, to webhook Slack; ustaw go, aby otrzymywać powiadomienia.

Jak uzyskać webhook Slack: https://get.slack.help/hc/en-us/articles/115005265063-Incoming-WebHooks-for-Slack

Zmienne kompresji i szyfrowania

psql_backup_gzip: kompresuje plik kopii zapasowej.

psql_backup_encrypt_aes: szyfruje plik kopii zapasowej (jeśli gzip jest włączony, ta akcja będzie wykonana DOPIERO PO kompresji gzip).

psql_backup_encrypt_aes_key_src: klucz aes256 do szyfrowania twojej kopii zapasowej.

Klucz aes256 to po prostu 32 bajty losowe.
Możesz użyć następującego polecenia, aby go stworzyć: dd if=/dev/urandom of=aes256.key count=1 bs=32.
Jeśli wolisz hasła w postaci łańcuchów (co jest mniej bezpieczne), możesz użyć tego: pwgen -n1 -s 32 | tr -d '\n' >aes256.key

Katalogi

psql_backup_script_dir: katalog do przechowywania podstawowego skryptu.

psql_backup_custom_script_dir: katalog do przechowywania skryptów specyficznych dla odpowiednich zadań kopii zapasowej.

psql_backup_conf_dir: katalog do przechowywania plików konfiguracyjnych skryptów kopii zapasowej.

psql_backup_encrypt_aes_key_dir: katalog do przechowywania klucza szyfrowania aes256.

psql_backup_tmpdir: katalog na tymczasowe wyniki (nie musisz tworzyć osobnego, domyślnie to /tmp).

Przekazywanie danych poza rolę

psql_backup_save_facts_about_custom_script: jeśli ustawisz to na true, rola zapisze pełną ścieżkę do wygenerowanego skryptu zadania, który musi zostać uruchomiony, aby wykonać kopię zapasową, w zmiennej psql_backup_last_generated_custom_script. Możesz użyć tej zmiennej do dodania konkretnego zadania cron dla tego skryptu.

Przykład Playbooka

    # tworzy skrypt kopii zapasowej psql
    - rola: freehck.script_psql_backup
      # parametry połączenia psql
      psql_backup_host: "{{ db_host }}"
      psql_backup_user: "{{ db_user }}"
      psql_backup_pass: "{{ db_pass }}"
      psql_backup_db: "{{ db_name }}"
      # parametry przechowywania
      psql_backup_backend_use_s3: nie
      psql_backup_backend_use_scp: tak
      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 i szyfrowanie
      psql_backup_gzip: tak
      psql_backup_encrypt_aes: tak
      psql_backup_encrypt_aes_key_src: "{{ playbook_dir }}/files/aes256.bkp.key"
      # inne
      psql_backup_save_facts_about_custom_script: tak
      psql_backup_logfile: "/var/log/psql-backup.log"
      tagi: [ backup, psql ]

    # sensowne jest utworzenie zadania cron dla tego skryptu
    - rola: freehck.crontask
      crontask_file: "backups"
      crontask_name: "kopiuj bazę danych"
      crontask_hour: "12"
      crontask_minute: "0"
      crontask_job: "{{ psql_backup_last_generated_custom_script }}"
      crontask_user: "root"
      crontask_commented_out: false
      tagi: [ backup, psql ]

Ważne informacje

Po wdrożeniu skryptu psql-backup na swoim hoście, dobrze jest przejść do hosta, który wykonuje zadania kopii zapasowej i uruchomić skrypt zadania z /opt/scripts bez parametrów. Jeśli przejdzie bez błędów i zobaczysz plik kopii na magazynie, to wszystko jest w porządku. Jeśli nie – dowiesz się, co było problemem. Np. mogłeś zapomnieć dodać hosta storage do known_hosts podczas konfigurowania użytkowników. Albo twój szablon s3cfg mógł zawierać błąd. Nie zapominaj sprawdzić wszystko dwa razy: tworzenie kopii zapasowych to bardzo ważne zadanie.

Po sprawdzeniu, że kopia zapasowa została utworzona i przechowywana w odpowiednim miejscu, sprawdź ją dokładnie. Musisz być pewny, że możesz ją przywrócić.

Licencja

MIT

Informacje o autorze

Dmitrii Kashin, freehck@freehck.ru

O projekcie

install a script performing mysql backups

Zainstaluj
ansible-galaxy install freehck.script_psql_backup
Licencja
mit
Pobrania
115
Właściciel