freehck.script_psql_backup
freehck.script_psql_backup
このロールは、psqlバックアップを実行するスクリプトを作成します。
データベースをダンプし、バックアップをgzip圧縮およびaes256で暗号化する可能性があります。
スラックにメッセージを送信できます。
バックアップをs3に保存するか、別のホストにscpで送信できます。
ロール変数
基本変数
psql_backup_host: psqlホスト
psql_backup_port: psqlポート(デフォルトは3306)
psql_backup_user: psqlユーザー
psql_backup_pass: psqlパスワード
psql_backup_db: バックアップするpsqlデータベース(設定されていない場合は、psqldumpに--all-databasesオプションが渡されます)
psql_backup_backend_use_s3: バックアップをS3に保存したい場合はtrueに設定
psql_backup_backend_use_scp: バックアップをscpを使用して別のホストに送信したい場合はtrueに設定
S3バックエンド変数
psql_backup_s3cfg_template: s3fs設定のテンプレート(デフォルトが提供されていますので心配しないでください)
psql_backup_s3: 以下のような形式のs3設定オプション
psql_backup_s3:
username: "s3user"
access_key: "s3user-akey"
secret_key: "s3user-skey"
bucket: "bucket-name"
SCPバックエンド変数
psql_backup_scp_host: バックアップをコピーするストレージホスト
psql_backup_scp_user: ストレージホストにログインするユーザー
psql_backup_scp_dst: ストレージホスト上のバックアップを保存するパス
psql_backup_scp_identity_src: ストレージホストにログインするために使用するアイデンティティファイル(はい、プライベートキーである必要があります)
名称
psql_backup_archive_prefix: バックアップ名、またはタイムスタンプの前のすべて
psql_backup_archive_stamp: dateツール形式のタイムスタンプテンプレート(デフォルトは%F-%Hh%Mm%Ssで、結果のタイムスタンプは2019-09-23-12h22m07sのようになります)
psql_backup_script_name: 基本スクリプトの名前を変更したい場合、自由にどうぞ
psql_backup_custom_script_name: バックアップを実行するジョブスクリプトに特定の名前を設定したい場合。デフォルトはpsql-backup-<database_name>.shで、allになります。
psql_backup_scp_identity_name: デフォルトはid_rsaですが、異なる鍵を使用する複数のSCPバックエンドがある場合に変更することが便利です。
psql_backup_encrypt_aes_key_name: デフォルトはaes256.keyで、異なるバックアップタスクに異なる暗号化鍵を使用する場合に必要です。
通知
psql_backup_warn_size: GiB単位、デフォルトは0。このサイズとバックアップを比較します。バックアップがこれより小さい場合は警告します。
psql_backup_hostname: ホスト名(スラックメッセージに表示されます)
psql_backup_slack_webhook: スラックウェブフック。この設定でスラック通知を受け取ります。
スラックウェブフックの取得方法: https://get.slack.help/hc/en-us/articles/115005265063-Incoming-WebHooks-for-Slack
圧縮および暗号化変数
psql_backup_gzip: gzipバックアップファイル
psql_backup_encrypt_aes: バックアップファイルを暗号化(gzipが有効な場合、このアクションはgzipの後に特に実行されます)
psql_backup_encrypt_aes_key_src: バックアップを暗号化するためのaes256キー
aes256キーは32バイトのランダムです。
次のコマンドを使用して作成できます: dd if=/dev/urandom of=aes256.key count=1 bs=32。
文字列のパスワードを好む場合(これはあまり安全ではありません)、次のように使用できます: pwgen -n1 -s 32 | tr -d '\n' >aes256.key
ディレクトリ
psql_backup_script_dir: 基本スクリプトを保存するディレクトリ
psql_backup_custom_script_dir: 対応するバックアップジョブ専用のスクリプトを保存するディレクトリ
psql_backup_conf_dir: バックアップスクリプトの設定ファイルを保存するディレクトリ
psql_backup_encrypt_aes_key_dir: aes256暗号化キーを保存するディレクトリ
psql_backup_tmpdir: 一時的な結果を保持するディレクトリ(別途作成する必要はなく、デフォルトは/tmpです)
ロールの外でデータをパスする
psql_backup_save_facts_about_custom_script: trueに設定すると、ロールはバックアップを実行するために実行する必要のある生成されたジョブスクリプトのフルパスをpsql_backup_last_generated_custom_script変数に保存します。この変数を使用して、このスクリプトに特定のcronタスクを追加できます。
例プレイブック
# psqlバックアップジョブスクリプトを作成
- role: freehck.script_psql_backup
# psql接続パラメータ
psql_backup_host: "{{ db_host }}"
psql_backup_user: "{{ db_user }}"
psql_backup_pass: "{{ db_pass }}"
psql_backup_db: "{{ db_name }}"
# バックエンドストレージパラメータ
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および暗号化
psql_backup_gzip: yes
psql_backup_encrypt_aes: yes
psql_backup_encrypt_aes_key_src: "{{ playbook_dir }}/files/aes256.bkp.key"
# その他
psql_backup_save_facts_about_custom_script: yes
psql_backup_logfile: "/var/log/psql-backup.log"
tags: [ backup, psql ]
# このジョブスクリプトのためのcronジョブを作成することは理にかなっています
- role: freehck.crontask
crontask_file: "backups"
crontask_name: "データベースのバックアップ"
crontask_hour: "12"
crontask_minute: "0"
crontask_job: "{{ psql_backup_last_generated_custom_script }}"
crontask_user: "root"
crontask_commented_out: false
tags: [ backup, psql ]
重要な情報
psql-backupスクリプトをホストにデプロイした後、バックアップタスクを実行するホストに移動して、パラメータなしで/opt/scriptsからジョブスクリプトを実行するのが理にかなっています。エラーがなく通過し、ストレージにバックアップファイルが見える場合は、すべてが正常です。そうでない場合は、問題が何だったのかを確認します。たとえば、構成されたユーザーのknown_hostsにストレージホストを追加するのを忘れているかもしれません。または、s3cfgテンプレートに誤りが含まれているかもしれません。バックアップ作業は非常に重要なタスクですので、すべてを二度確認することを忘れないでください。
バックアップが作成され、正しい場所に保存されていることを確認したら、詳細に確認してください。必ずそれを使用して復元できることを確かめてください。
ライセンス
MIT
著者情報
Dmitrii Kashin, freehck@freehck.ru
