Cadangan lain - lebih dari sekadar skrip, lebih sederhana dari sistem

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

Cadangan lain - lebih dari sekadar skrip, lebih sederhana dari sistem

Hari baik, Habr!
Nama saya Natalya. Saya adalah ketua tim grup administrator aplikasi di NPO Krista. Kami adalah Ops untuk grup proyek perusahaan kami. Kami mempunyai situasi yang agak unik: kami menginstal dan memelihara perangkat lunak kami di server perusahaan kami dan di server yang berlokasi di situs klien. Dalam hal ini, tidak perlu membuat cadangan seluruh server. Hanya “data penting” yang penting: DBMS dan direktori sistem file individual. Tentu saja, klien memiliki (atau tidak memiliki) peraturan pencadangannya sendiri dan sering kali menyediakan semacam penyimpanan eksternal untuk menyimpan cadangan di sana. Dalam hal ini, setelah membuat cadangan, kami memastikan pengiriman ke penyimpanan eksternal.

Untuk beberapa waktu, untuk tujuan pencadangan, kami puas dengan skrip bash, tetapi seiring dengan bertambahnya opsi konfigurasi, kompleksitas skrip ini bertambah secara proporsional, dan pada satu titik kami sampai pada kebutuhan untuk “menghancurkannya hingga rata dengan tanah, dan kemudian ... ”.

Solusi siap pakai tidak cocok karena berbagai alasan: karena kebutuhan untuk mendesentralisasikan cadangan, persyaratan untuk menyimpan cadangan secara lokal di klien, kerumitan pengaturan, substitusi impor, dan pembatasan akses.

Tampaknya bagi kami lebih mudah untuk menulis sesuatu milik kami sendiri. Pada saat yang sama, saya ingin mendapatkan sesuatu yang cukup untuk situasi kita selama N tahun ke depan, tetapi dengan kemungkinan memperluas cakupannya.

Ketentuan tugasnya adalah sebagai berikut:

  1. instance cadangan dasar bersifat otonom dan berjalan secara lokal
  2. penyimpanan cadangan dan log selalu berada dalam jaringan klien
  3. sebuah instance terdiri dari modul - semacam "konstruktor"
  4. kompatibilitas dengan distribusi Linux saat ini diperlukan, termasuk yang sudah ketinggalan zaman, potensi lintas platform diinginkan
  5. Untuk bekerja dengan instance, akses melalui ssh sudah cukup; tidak perlu membuka port tambahan
  6. kemudahan pengaturan dan pengoperasian maksimum
  7. dimungkinkan (tetapi tidak perlu) untuk memiliki instance terpisah yang memungkinkan Anda melihat status cadangan dari server yang berbeda secara terpusat

Anda dapat melihat apa yang kami hasilkan di sini: github.com/javister/krista-backup
Perangkat lunak ini ditulis dalam python3; bekerja di Debian, Ubuntu, CentOS, AstraLinux 1.6.

Dokumentasinya diposting di direktori docs repositori.

Konsep dasar sistem beroperasi:
tindakan – tindakan yang mengimplementasikan satu operasi atom (pencadangan basis data, pencadangan direktori, transfer dari direktori A ke direktori B, dll.). Tindakan yang ada terletak di direktori inti/tindakan
tugas – tugas, serangkaian tindakan yang menggambarkan satu “tugas cadangan” yang logis
jadwal – jadwal, serangkaian tugas dengan indikasi opsional waktu pelaksanaan tugas

Konfigurasi cadangan disimpan dalam file yaml; struktur konfigurasi umum:

  • Pengaturan Umum
  • bagian tindakan: deskripsi tindakan yang digunakan di server ini
  • bagian jadwal: deskripsi semua tugas (kumpulan tindakan) dan jadwal peluncurannya oleh cron, jika peluncuran tersebut diperlukan

Contoh konfigurasi dapat ditemukan di sini

Apa yang saat ini dapat dilakukan aplikasi:

  • Operasi utama yang kami dukung adalah: pencadangan PostgreSQL melalui pg_dump, pencadangan direktori sistem file melalui tar; operasi dengan penyimpanan eksternal; rsync antar direktori; rotasi cadangan (menghapus salinan lama)
  • memanggil skrip eksternal
  • eksekusi manual dari tugas terpisah
    /opt/KristaBackup/KristaBackup.py run make_full_dump
  • Anda dapat menambahkan (atau menghapus) satu tugas atau seluruh jadwal ke crontab
    /opt/KristaBackup/KristaBackup.py enable all
  • menghasilkan file pemicu berdasarkan hasil cadangan. Fungsi ini berguna bersama dengan Zabbix untuk memantau cadangan
  • 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 itu sendiri, tetapi aplikasi merespons permintaan dari instance 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: “instance web” meminta data dari “instance cadangan” melalui API. Akses ke web memerlukan otorisasi, akses ke webapi tidak.

Cadangan lain - lebih dari sekadar skrip, lebih sederhana dari sistem

Log pencadangan yang salah ditandai dengan warna: peringatan – kuning, kesalahan – merah.

Cadangan lain - lebih dari sekadar skrip, lebih sederhana dari sistem

Cadangan lain - lebih dari sekadar skrip, lebih sederhana dari sistem

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

Kami mendistribusikan utilitas ini terutama melalui Ansible, meluncurkannya terlebih dahulu ke beberapa server yang paling tidak penting, dan setelah mengujinya ke server lainnya.

Hasilnya, kami menerima utilitas penyalinan yang ringkas dan berdiri sendiri yang dapat diotomatisasi dan dapat digunakan bahkan oleh administrator yang tidak berpengalaman. Ini nyaman bagi kami - mungkin ini berguna bagi Anda juga?

Sumber: www.habr.com

Tambah komentar