Cadangan lain - lebih dari sekadar skrip, lebih mudah daripada sistem

Ada banyak sistem cadangan, tetapi bagaimana jika server yang dilayani tersebar di berbagai wilayah dan klien dan Anda harus puas dengan sistem operasi?







Selamat siang, Habr !

Nama saya Natalya. Saya adalah ketua tim dari grup administrator aplikasi di NPO Krista. Kami adalah Ops untuk sekelompok proyek perusahaan kami. Kami mengalami situasi yang agak aneh: kami menginstal dan memelihara perangkat lunak kami baik di server perusahaan kami maupun di server yang terletak di lokasi klien. Dalam hal ini, tidak perlu mencadangkan seluruh server. Hanya "data penting" yang penting: DBMS dan direktori individu dari sistem file. Tentu saja, pelanggan memiliki (atau tidak memiliki) prosedur pencadangan mereka sendiri dan sering kali menyediakan semacam penyimpanan eksternal untuk menyimpan cadangan di sana. Dalam hal ini, setelah membuat cadangan, kami menyediakan pengiriman ke penyimpanan eksternal.



Untuk sementara, untuk tujuan pencadangan, kami bertahan dengan skrip bash, tetapi seiring dengan bertambahnya opsi, kompleksitas skrip ini tumbuh secara proporsional, dan pada satu titik kami sampai pada kebutuhan untuk "menghancurkannya ke tanah, dan kemudian ....".



Solusi siap pakai tidak berfungsi karena berbagai alasan: karena kebutuhan untuk mendesentralisasikan cadangan, kewajiban untuk menyimpan cadangan secara lokal di klien, kerumitan penyiapan, penggantian impor, dan pembatasan akses.



Bagi kami, lebih mudah untuk menulis sesuatu tentang kami sendiri. Pada saat yang sama, saya ingin mendapatkan sesuatu yang akan cukup untuk situasi kita selama N tahun ke depan, tetapi dengan kemungkinan perluasan cakupan yang potensial.



Kondisi masalahnya adalah sebagai berikut:



  1. instance cadangan dasar bersifat otonom, berfungsi secara lokal
  2. penyimpanan cadangan dan log selalu dalam jaringan klien
  3. โ€“ ยซยป
  4. Linux, ,
  5. ssh,
  6. ( ) ,


Anda dapat melihat apa yang kami dapatkan di sini: github.com/javister/krista-backup Perangkat

lunak ini ditulis dengan python3; bekerja di Debian, Ubuntu, CentOS, AstraLinux 1.6.



Dokumentasi tersedia di direktori dokumen dari repositori.



Konsep dasar yang digunakan oleh sistem:

tindakan - tindakan yang mengimplementasikan satu operasi atom (backup database, backup direktori, transfer dari direktori A ke direktori B, dll.). Tindakan yang ada terletak di inti /

tugas direktori tindakan - tugas, satu set tindakan yang menjelaskan satu

jadwal "tugas cadangan" logis - jadwal, satu set tugas dengan indikasi opsional waktu pelaksanaan tugas



Konfigurasi cadangan disimpan dalam file yaml; struktur konfigurasi umum:



  • Pengaturan Umum
  • tindakan bagian: deskripsi tindakan yang digunakan di server ini
  • bagian jadwal: deskripsi semua tugas (set tindakan) dan jadwal peluncurannya oleh mahkota, jika peluncuran semacam itu diperlukan


Contoh konfigurasi dapat ditemukan di sini



Apa yang dapat dilakukan aplikasi saat ini:



  • operasi utama kami didukung: backup PostgreSQL melalui pg_dump, backup direktori sistem file melalui tar; operasi dengan penyimpanan eksternal; rsync antar direktori; rotasi cadangan (menghapus salinan lama)
  • panggil skrip eksternal
  • eksekusi manual dari satu tugas



    /opt/KristaBackup/KristaBackup.py run make_full_dump
  • Anda dapat menambahkan (atau menghapus) tugas terpisah atau seluruh jadwal di crontab



    /opt/KristaBackup/KristaBackup.py enable all
  • membuat file pemicu berdasarkan hasil backup. Fitur ini berguna bersama dengan Zabbix untuk memonitor backup
  • dapat bekerja di latar belakang dalam mode webapi atau web



    /opt/KristaBackup/KristaBackup.py web start [--api]


Perbedaan antara mode: webapi tidak memiliki antarmuka web yang sesuai, tetapi aplikasi menanggapi permintaan dari contoh lain. Untuk mode web, Anda perlu menginstal flask dan beberapa paket tambahan, dan ini tidak dapat diterima di semua tempat, misalnya, di AstraLinux SE bersertifikat.



Melalui antarmuka web, Anda dapat melihat status dan log cadangan dari server yang terhubung: "contoh web" meminta data dari "contoh cadangan" melalui API. Akses ke web membutuhkan otorisasi, akses ke webapi tidak.







Log dari cadangan yang salah lulus ditandai dengan warna: peringatan - kuning, kesalahan - merah.











Jika administrator tidak memerlukan lembar contekan pada parameter dan sistem operasi server homogen, Anda dapat mengkompilasi file dan mendistribusikan paket yang sudah jadi.



Kami mendistribusikan utilitas ini terutama melalui Ansible, diluncurkan terlebih dahulu ke beberapa server yang paling tidak penting, dan setelah pengujian ke semua yang lain.



Hasilnya, kami mendapatkan utilitas penyalinan mandiri yang ringkas, dapat diotomatisasi dan cocok untuk pengoperasian bahkan oleh administrator yang tidak berpengalaman. Ini nyaman bagi kami - mungkin akan berguna bagi Anda juga?



All Articles