slogan3

Maak een Ansible Playbook voor geautomatiseerde infrastructuur back-up en herstel

description

Deze prompt helpt gebruikers bij het maken van een robuust Ansible playbook om kritieke back-up- en hersteltaken te automatiseren, waardoor handmatig werk en het risico op dataverlies worden verminderd. Het behandelt data-integriteit, foutafhandeling en het minimaliseren van downtime, waardoor het onderhoud van infrastructuur veiliger en efficiënter verloopt dan handmatige procedures of minder gestructureerde methoden.

prompt

Help me een Ansible playbook te maken dat de back-up en het herstel van mijn infrastructuurcomponenten automatiseert. Geef de back-uptargets op: <voer de infrastructuurcomponenten in voor back-up> Back-up frequentie: <voer het gewenste back-upschema in> Details van het herstelproces ...

try_prompt

generate_helper
disclaimerOnPageApi

ai_answers

provider: openai
model: gpt-4.1-nano
Hier is een voorbeeld van een Ansible playbook dat de back-up en het herstel van webservers en databases automatiseert, inclusief aanbevelingen voor data-integriteit, foutafhandeling en minimalisatie van downtime: ```yaml --- - name: Backup en herstel van infrastructuurelementen hosts: all become: yes vars: backup_dir: /mnt/nfs/backups/{{ inventory_hostname }} backup_time: "{{ lookup('pipe', 'date +%Y%m%d%H%M%S') }}" backup_retention_days: 7 webservers: - web1 - web2 databases: - db1 - db2 tasks: - name: Zorg dat backup directory bestaat file: path: "{{ backup_dir }}" state: directory mode: '0755' - name: Backup webservers when: "'web' in inventory_hostname" block: - name: Maak een tarball van de webserver bestanden archive: path: /var/www/ dest: "{{ backup_dir }}/web_backup_{{ backup_time }}.tar.gz" format: gz register: web_backup failed_when: web_backup is failed - name: Verifieer de integriteit van de webbackup command: "gzip -t {{ backup_dir }}/web_backup_{{ backup_time }}.tar.gz" register: gzip_check failed_when: gzip_check.rc != 0 - name: Backup databases when: "'db' in inventory_hostname" block: - name: Maak een dump van de database mysql_db: state: dump name: "{{ item }}" target: "{{ backup_dir }}/{{ item }}_{{ backup_time }}.sql" loop: "{{ databases }}" register: db_dumps - name: Verifieer de database dumps command: "mysqldump --single-transaction --quick --lock-tables=false {{ item }} > {{ backup_dir }}/{{ item }}_{{ backup_time }}.sql" loop: "{{ databases }}" register: dump_checks failed_when: dump_checks.rc != 0 - name: Verwijder oude backups (retentie) find: paths: "{{ backup_dir }}" age: "{{ backup_retention_days }}d" recurse: yes register: old_backups - name: Verwijder oude backups file: path: "{{ item.path }}" state: absent loop: "{{ old_backups.files }}" handlers: - name: Herstel webserver (handmatige goedkeuring vereist) pause: prompt: "Wilt u de webserver herstellen? Typ 'ja' om door te gaan." register: user_input when: false # Handmatige actie, niet automatisch # Voor herstel zou je een aparte playbook of taak moeten maken # die alleen wordt uitgevoerd na goedkeuring. # Aanbevelingen: # 1. Data-integriteit: Gebruik checksum (bijv. md5sum) om backups te verifiëren. # 2. Foutafhandeling: Voeg 'failed_when' en 'rescue' blocks toe om fouten te loggen en verdere acties te ondernemen. # 3. Minimaliseren downtime: Plan herstel tijdens onderhoudsvensters en gebruik rolling updates indien mogelijk. ``` **Aanbevelingen voor verdere verbetering:** - Voeg checksum-verificaties toe voor alle backups om dataintegriteit te waarborgen. - Maak gebruik van Ansible's 'rescue' en 'always' secties om fouten tijdens back-up of herstel af te handelen en te loggen. - Overweeg het gebruik van een meer geavanceerd herstelproces met automatische tests en bevestigingen om downtime te minimaliseren. - Automatiseer het herstelproces volledig met duidelijke prompts en handmatige goedkeuringen waar nodig. Indien je een meer uitgebreide en geautomatiseerde aanpak wenst, kan ik je helpen het playbook verder uit te breiden.
provider: deepseek
model: deepseek-chat
Hier is een Ansible playbook voor back-up en herstel van uw infrastructuur, met de gevraagde aanbevelingen: ## Ansible Playbook: `backup_restore.yml` ```yaml --- - name: Automatische back-up van webservers en databases hosts: all vars: nfs_server: "192.168.1.100:/backups" local_mount_point: "/mnt/backups" backup_retention_days: 7 tasks: - name: Maak lokaal mount point aan file: path: "{{ local_mount_point }}" state: directory mode: '0755' become: yes - name: Mount NFS share mount: path: "{{ local_mount_point }}" src: "{{ nfs_server }}" fstype: nfs state: mounted opts: "rw,sync" become: yes - name: Back-up webserver configuraties block: - name: Archiveer web directories archive: path: - "/etc/nginx" - "/var/www/html" - "/etc/apache2" dest: "{{ local_mount_point }}/webserver-{{ inventory_hostname }}-{{ ansible_date_time.epoch }}.tar.gz" remove: no when: "'webserver' in group_names" become: yes - name: Back-up database servers block: - name: MySQL dump community.mysql.mysql_db: state: dump name: all target: "{{ local_mount_point }}/mysql-{{ inventory_hostname }}-{{ ansible_date_time.epoch }}.sql" when: ansible_facts['pkg_mgr'] == 'apt' and "'database' in group_names" - name: PostgreSQL dump community.postgresql.postgresql_db: state: dump name: all target: "{{ local_mount_point }}/postgresql-{{ inventory_hostname }}-{{ ansible_date_time.epoch }}.sql" when: ansible_facts['pkg_mgr'] == 'apt' and "'database' in group_names" become: yes when: "'database' in group_names" rescue: - name: Log back-up fout debug: msg: "Back-up gefaald voor {{ inventory_hostname }}" - name: Stuur notificatie mail: subject: "Back-up fout - {{ inventory_hostname }}" body: "Back-up proces gefaald op {{ ansible_date_time.iso8601 }}" to: "admin@example.com" - name: Verwijder oude back-ups find: paths: "{{ local_mount_point }}" patterns: "*.tar.gz,*.sql" age: "{{ backup_retention_days * 86400 }}" register: old_backups - name: Toon oude back-ups voor verwijdering debug: msg: "Verwijderen: {{ item.path }}" loop: "{{ old_backups.files }}" when: old_backups.matched > 0 - name: Handmatig herstelproces (vereist expliciete uitvoering) hosts: localhost vars: restore_confirmation: false tasks: - name: Bevestig herstelactie pause: prompt: "WAARSCHUWING: Dit zal data overschrijven. Typ 'BEVESTIG' om door te gaan" register: restore_confirmation when: not restore_confirmation - name: Voer herstel alleen uit na bevestiging block: - include_tasks: restore_tasks.yml when: restore_confirmation.user_input == "BEVESTIG" ``` ## Aanvullend bestand: `restore_tasks.yml` ```yaml - name: Selecteer herstelpunten debug: msg: "Beschikbare back-ups in {{ local_mount_point }}" - name: Monteer NFS share voor herstel mount: path: "{{ local_mount_point }}" src: "{{ nfs_server }}" fstype: nfs state: mounted become: yes - name: Herstel webserver configuraties unarchive: src: "{{ local_mount_point }}/webserver-{{ inventory_hostname }}-SELECTEER_DATUM.tar.gz" dest: "/" remote_src: yes when: "'webserver' in group_names" become: yes - name: Herstel databases block: - name: MySQL herstel community.mysql.mysql_db: state: import name: all target: "{{ local_mount_point }}/mysql-{{ inventory_hostname }}-SELECTEER_DATUM.sql" when: ansible_facts['pkg_mgr'] == 'apt' - name: PostgreSQL herstel community.postgresql.postgresql_db: state: restore name: all target: "{{ local_mount_point }}/postgresql-{{ inventory_hostname }}-SELECTEER_DATUM.sql" when: ansible_facts['pkg_mgr'] == 'apt' become: yes when: "'database' in group_names" ``` ## Inventory Bestand: `inventory.ini` ```ini [webservers] web1.example.com web2.example.com [databases] db1.example.com db2.example.com [all:vars] ansible_ssh_private_key_file=~/.ssh/id_rsa ``` ## Aanbevelingen voor Optimalisatie ### Data-integriteit: 1. **Checksums**: Voeg SHA256 checksum verificatie toe aan back-ups 2. **Back-up validatie**: Test periodisch herstel op testomgeving 3. **Versleuteling**: Gebruik Ansible Vault voor gevoelige data 4. **Transactionele back-ups**: Voor databases, gebruik `--single-transaction` bij MySQL ### Foutafhandeling: 1. **Retry mechanisme**: Implementeer opnieuw proberen bij netwerkfouten 2. **Monitoring**: Integreer met alerting systemen (Prometheus, Nagios) 3. **Logging**: Gedetailleerde logging met timestamps 4. **Space monitoring**: Controleer beschikbare schijfruimte voor back-ups ### Downtime minimalisatie: 1. **Hot back-ups**: Gebruik database-specifieke tools voor minimale impact 2. **Staggered herstel**: Herstel databases eerst, dan webservers 3. **Load balancer configuratie**: Neem servers tijdelijk uit rotatie tijdens herstel 4. **Incrementele back-ups**: Overweeg voor frequente wijzigingen ### Uitvoering: ```bash # Back-up uitvoeren ansible-playbook -i inventory.ini backup_restore.yml # Herstel uitvoeren (handmatige bevestiging vereist) ansible-playbook -i inventory.ini backup_restore.yml --tags restore ``` Dit playbook biedt een robuuste basis die u verder kunt aanpassen aan uw specifieke infrastructuurbehoeften.