Satu lagi sandaran - lebih daripada skrip, lebih mudah daripada sistem

Terdapat banyak sistem sandaran, tetapi apa yang perlu dilakukan jika pelayan yang dihidangkan tersebar di seluruh wilayah dan pelanggan yang berbeza dan anda perlu membuat kaitan dengan sistem pengendalian?

Satu lagi sandaran - lebih daripada skrip, lebih mudah daripada sistem

Selamat petang, Habr!
Nama saya Natalya. Saya ketua pasukan kumpulan pentadbir aplikasi di NPO Krista. Kami adalah Ops untuk kumpulan projek syarikat kami. Kami mempunyai situasi yang agak unik: kami memasang dan menyelenggara perisian kami pada pelayan syarikat kami dan pada pelayan yang terletak di tapak pelanggan. Dalam kes ini, tidak perlu membuat sandaran keseluruhan pelayan. Hanya "data penting" yang penting: DBMS dan direktori sistem fail individu. Sudah tentu, pelanggan mempunyai (atau tidak mempunyai) peraturan sandaran mereka sendiri dan sering menyediakan beberapa jenis storan luaran untuk menyimpan sandaran di sana. Dalam kes ini, selepas membuat sandaran, kami memastikan penghantaran ke storan luaran.

Untuk beberapa lama, untuk tujuan sandaran, kami telah melakukan skrip bash, tetapi apabila pilihan konfigurasi berkembang, kerumitan skrip ini berkembang secara berkadar, dan pada satu ketika kami sampai kepada keperluan untuk "memusnahkannya ke tanah, dan kemudian ...".

Penyelesaian sedia dibuat tidak sesuai untuk pelbagai sebab: kerana keperluan untuk memusatkan sandaran, keperluan untuk menyimpan sandaran secara setempat pada klien, kerumitan persediaan, penggantian import, sekatan akses.

Nampaknya kami lebih mudah untuk menulis sesuatu sendiri. Pada masa yang sama, saya ingin mendapatkan sesuatu yang cukup untuk keadaan kami untuk N tahun akan datang, tetapi dengan kemungkinan berpotensi mengembangkan skop.

Syarat tugasan adalah seperti berikut:

  1. contoh sandaran asas adalah autonomi dan berjalan secara setempat
  2. storan sandaran dan log sentiasa berada dalam rangkaian pelanggan
  3. contoh terdiri daripada modul - sejenis "pembina"
  4. keserasian dengan pengedaran Linux semasa diperlukan, termasuk yang lapuk, potensi merentas platform adalah wajar
  5. Untuk bekerja dengan contoh, akses melalui ssh adalah mencukupi; membuka port tambahan tidak diperlukan
  6. kemudahan maksimum persediaan dan operasi
  7. adalah mungkin (tetapi tidak perlu) untuk mempunyai contoh berasingan yang membolehkan anda melihat secara berpusat status sandaran daripada pelayan yang berbeza

Anda boleh melihat apa yang kami datangkan di sini: github.com/javister/krista-backup
Perisian ini ditulis dalam python3; berfungsi pada Debian, Ubuntu, CentOS, AstraLinux 1.6.

Dokumentasi disiarkan dalam direktori dokumen repositori.

Konsep asas yang sistem beroperasi:
tindakan – tindakan yang melaksanakan satu operasi atom (sandaran pangkalan data, sandaran direktori, pemindahan dari direktori A ke direktori B, dsb.). Tindakan sedia ada terletak dalam direktori teras/tindakan
tugas - tugas, satu set tindakan yang menerangkan satu "tugas sandaran" logik
jadual – jadual, satu set tugas dengan petunjuk pilihan masa pelaksanaan tugas

Konfigurasi sandaran disimpan dalam fail yaml; struktur konfigurasi umum:

  • Tetapan umum
  • bahagian tindakan: perihalan tindakan yang digunakan pada pelayan ini
  • bahagian jadual: perihalan semua tugas (set tindakan) dan jadual untuk pelancarannya mengikut cron, jika pelancaran sedemikian diperlukan

Contoh konfigurasi boleh didapati di sini

Perkara yang boleh dilakukan oleh aplikasi pada masa ini:

  • Operasi utama untuk kami disokong: sandaran PostgreSQL melalui pg_dump, sandaran direktori sistem fail melalui tar; operasi dengan storan luaran; rsync antara direktori; putaran sandaran (memadam salinan lama)
  • memanggil skrip luaran
  • pelaksanaan tugas yang berasingan secara manual
    /opt/KristaBackup/KristaBackup.py run make_full_dump
  • anda boleh menambah (atau mengalih keluar) satu tugasan atau keseluruhan jadual pada crontab
    /opt/KristaBackup/KristaBackup.py enable all
  • menjana fail pencetus berdasarkan hasil sandaran. Fungsi ini berguna bersama dengan Zabbix untuk memantau sandaran
  • boleh berfungsi di latar belakang dalam webapi atau mod web
    /opt/KristaBackup/KristaBackup.py web start [--api]

Perbezaan antara mod: webapi tidak mempunyai antara muka web itu sendiri, tetapi aplikasi bertindak balas kepada permintaan daripada contoh lain. Untuk mod web, anda perlu memasang kelalang dan beberapa pakej tambahan, dan ini tidak boleh diterima di mana-mana, contohnya dalam AstraLinux SE yang diperakui.

Melalui antara muka web, anda boleh melihat status dan log sandaran pelayan yang disambungkan: "contoh web" meminta data daripada "tindakan sandaran" melalui API. Akses kepada web memerlukan kebenaran, akses kepada webapi tidak.

Satu lagi sandaran - lebih daripada skrip, lebih mudah daripada sistem

Log sandaran yang salah ditandakan dalam warna: amaran – kuning, ralat – merah.

Satu lagi sandaran - lebih daripada skrip, lebih mudah daripada sistem

Satu lagi sandaran - lebih daripada skrip, lebih mudah daripada sistem

Jika pentadbir tidak memerlukan helaian cheat pada parameter dan sistem pengendalian pelayan adalah homogen, anda boleh menyusun fail dan mengedarkan pakej siap sedia.

Kami mengedarkan utiliti ini terutamanya melalui Ansible, melancarkannya terlebih dahulu kepada beberapa pelayan yang paling kurang penting, dan selepas menguji kepada semua yang lain.

Hasilnya, kami menerima utiliti salinan yang kompak dan berdiri sendiri yang boleh diautomasikan dan boleh digunakan walaupun oleh pentadbir yang tidak berpengalaman. Ia mudah untuk kami - mungkin ia berguna untuk anda juga?

Sumber: www.habr.com

Tambah komen