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 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
ansible-galaxy install freehck.script_psql_backup