Toinen varmuuskopio - enemmän kuin komentosarja, yksinkertaisempi kuin järjestelmä

Varmuuskopiointijärjestelmiä on monia, mutta mitä tehdä, jos palveltavat palvelimet ovat hajallaan eri alueilla ja eri asiakkailla ja sinun on tultava toimeen käyttöjärjestelmän kanssa?

Toinen varmuuskopio - enemmän kuin komentosarja, yksinkertaisempi kuin järjestelmä

Hyvää iltapäivää, Habr!
Nimeni on Natalya. Olen NPO Kristan sovellusten ylläpitäjien ryhmän tiimipäällikkö. Olemme Oppia yrityksemme projektiryhmälle. Meillä on melko ainutlaatuinen tilanne: asennamme ja ylläpidämme ohjelmistojamme sekä yrityksemme palvelimille että asiakkaiden toimipisteillä sijaitseville palvelimille. Tässä tapauksessa koko palvelinta ei tarvitse varmuuskopioida. Vain "olennaiset tiedot" ovat tärkeitä: DBMS ja yksittäiset tiedostojärjestelmähakemistot. Tietysti asiakkailla on (tai ei ole) omat varmuuskopiointisäännöt ja usein ne tarjoavat jonkinlaisen ulkoisen tallennustilan varmuuskopioiden tallentamista varten. Tässä tapauksessa varmistamme varmuuskopion luomisen jälkeen lähettämisen ulkoiseen tallennustilaan.

Varmuuskopiointia varten tyytyimme jonkin aikaa bash-skriptillä, mutta konfigurointivaihtoehtojen kasvaessa tämän skriptin monimutkaisuus kasvoi samassa suhteessa, ja yhdessä vaiheessa tulimme tarpeeseen "tuhota se maahan, ja sitten ...”.

Valmiit ratkaisut eivät olleet sopivia useista syistä: varmuuskopioiden hajauttamistarpeesta, vaatimuksesta tallentaa varmuuskopiot paikallisesti asiakkaalle, asennuksen monimutkaisuudesta, tuonnin korvaamisesta, pääsyrajoituksista.

Meistä tuntui, että oli helpompi kirjoittaa jotain omaa. Samalla halusin saada jotain, mikä riittäisi tilanteeseemme seuraaviksi N vuodeksi, mutta jossa on mahdollisuus laajentaa soveltamisalaa.

Tehtävän ehdot olivat seuraavat:

  1. perusvarmuuskopioinstanssi on itsenäinen ja toimii paikallisesti
  2. varmuuskopioiden ja lokien tallennus on aina asiakkaan verkossa
  3. ilmentymä koostuu moduuleista - eräänlainen "konstruktori"
  4. yhteensopivuus nykyisten Linux-jakelujen kanssa vaaditaan, mukaan lukien vanhentuneet, mahdollinen cross-platform on toivottavaa
  5. Instanssin kanssa työskentelyyn riittää pääsy ssh:n kautta, lisäporttien avaaminen ei ole välttämätöntä
  6. mahdollisimman helppo asentaa ja käyttää
  7. on mahdollista (mutta ei välttämätöntä) saada erillinen esiintymä, jonka avulla voit tarkastella keskitetysti eri palvelimien varmuuskopioiden tilaa

Täältä näet mitä keksimme: github.com/javister/krista-backup
Ohjelmisto on kirjoitettu kielellä python3; toimii Debianissa, Ubuntussa, CentOS:ssä, AstraLinux 1.6:ssa.

Dokumentaatio on lähetetty arkiston docs-hakemistoon.

Järjestelmän peruskäsitteet:
toiminta – toiminto, joka toteuttaa yhden atomioperaation (tietokannan varmuuskopiointi, hakemiston varmuuskopiointi, siirto hakemistosta A hakemistoon B jne.). Olemassa olevat toiminnot sijaitsevat ydin/toimintohakemistossa
tehtävä – tehtävä, toimintosarja, joka kuvaa yhtä loogista "varmuuskopiotehtävää"
aikataulu – aikataulu, joukko tehtäviä, joissa on valinnainen merkintä tehtävän suoritusajasta

Varmuuskopioasetukset tallennetaan yaml-tiedostoon; yleinen konfigurointirakenne:

  • Yleiset asetukset
  • Toiminnot-osio: kuvaus tällä palvelimella käytetyistä toimista
  • aikatauluosio: kuvaus kaikista tehtävistä (toimintosarjoista) ja niiden käynnistämisen aikataulu cronin mukaan, jos tällainen käynnistäminen on tarpeen

Esimerkki konfiguraatiosta löytyy täältä

Mitä sovellus voi tällä hetkellä tehdä:

  • Meille tärkeimmät toiminnot ovat tuettuja: PostgreSQL-varmuuskopiointi pg_dump:n kautta, tiedostojärjestelmän hakemiston varmuuskopiointi tar:n kautta; toiminnot ulkoisen tallennustilan kanssa; rsync hakemistojen välillä; varmuuskopion kierto (vanhojen kopioiden poistaminen)
  • ulkoisen skriptin kutsuminen
  • erillisen tehtävän manuaalinen suorittaminen
    /opt/KristaBackup/KristaBackup.py run make_full_dump
  • voit lisätä (tai poistaa) yksittäisen tehtävän tai koko aikataulun crontabiin
    /opt/KristaBackup/KristaBackup.py enable all
  • laukaisutiedoston luominen varmuuskopion tulosten perusteella. Tämä toiminto on hyödyllinen Zabbixin kanssa varmuuskopioiden valvonnassa
  • voi toimia taustalla webapi- tai web-tilassa
    /opt/KristaBackup/KristaBackup.py web start [--api]

Ero tilojen välillä: webapilla ei ole itse verkkokäyttöliittymää, vaan sovellus vastaa toisen esiintymän pyyntöihin. Verkkotilaa varten sinun on asennettava pullo ja useita lisäpaketteja, eikä tämä ole hyväksyttävää kaikkialla, esimerkiksi sertifioidussa AstraLinux SE:ssä.

Verkkokäyttöliittymän kautta voit tarkastella yhdistettyjen palvelimien varmuuskopioiden tilaa ja lokeja: "Web-instanssi" pyytää tietoja "varmuuskopioinstanssilta" API:n kautta. Verkkoon pääsy vaatii valtuutuksen, webapiin pääsy ei.

Toinen varmuuskopio - enemmän kuin komentosarja, yksinkertaisempi kuin järjestelmä

Virheellisten varmuuskopioiden lokit on merkitty värillä: varoitus – keltainen, virhe – punainen.

Toinen varmuuskopio - enemmän kuin komentosarja, yksinkertaisempi kuin järjestelmä

Toinen varmuuskopio - enemmän kuin komentosarja, yksinkertaisempi kuin järjestelmä

Jos järjestelmänvalvoja ei tarvitse huijauslehteä parametreista ja palvelinkäyttöjärjestelmät ovat homogeenisia, voit koota tiedoston ja jakaa valmiin paketin.

Jaamme tätä apuohjelmaa pääasiassa Ansiblen kautta, levitämme sen ensin joillekin vähiten tärkeille palvelimille ja testauksen jälkeen kaikille muille.

Tuloksena saimme kompaktin, erillisen kopiointiapuohjelman, joka voidaan automatisoida ja jota myös kokemattomat järjestelmänvalvojat voivat käyttää. Se on kätevä meille - ehkä siitä on hyötyä myös sinulle?

Lähde: will.com

Lisää kommentti