Mówią że są dwa rodzaje administratorów: co co robą backupy i co będą je robić.  Oczywiscie my nalezymy do tej pierwszej grupy i ciebie namawiamy do tego samego.

Dziś wdrozymy zdeduplikowane centrale repozytorum backupowe w oparcu o program Restic. Restic jest stosunkowo nowym oprogramowaniem które odpowiada na potrzeby rosnącej ilości danych, wykorzystuje szereg nowych rozwiązań takich jak deduplikacja czy szyfrowanie  czego nie znajdziemy w doskanałym lecz już wysłużonym rsyncu. Dodatkowo restic całkiem nieźle sobie radzi z wieksza ilościa danych w odryznienu do rdiff-backup czy duplicity. Nie ma więc co czekać.

Założenia wdrożenia:

  • Jedno centralne repozytorum backupu dla wielu serwerów.
  • Backupy myszą być szyfrowane.
  • Wykonywanie backupy powinno jaknajmniej obciążać na serwer.
  • Montowanie danego snapshota (punktu przyrwacania).
  • Okresowe testowanie backupu.
  • Retencja na poziomie 7 dziennych, 5 tygodniowych 3 miesęczne kopie.

Jako nasze repozytorum wykorzystamy serwer VDS S z naszej oferty z dyskiem 100GB, który idealnie się nada do tego zastosowania. System  operacyjny to Centos 7.

Zakładam, że mamy już skonfirowany wstępnie nasz serwer wegług poradnika „Własny serwer Linux – podstawowa konfiguracja”, jeśli nie zapraszam do zapoznania się.

Instlujemy restic na serwerze backupu przyda się nam w dalszej części poradnika:

yum -y install yum-utils
yum-config-manager --add-repo https://copr.fedorainfracloud.org/coprs/copart/restic/repo/epel-7/copart-restic-epel-7.repo
yum -y install restic

Dodajemy nowego użytkownika, to na jego konto będziemy się łaczyć z serwerem backupu oraz tworzymy domyślny kalog naszego repozytorum

adduser restic
mkdir -p Backups/default

Inicjujemy nasze repozytorum

restic -r Backups/default/ init

Jako hasło najlepiej wybrać losowy ciąg znaków , pomoże nam w tym komenda pwgen 16. Oczywiście hasło zapisujemy w bezpieczym miejscu. Następnie tworzymu plik plik z listą zaufanych ktuczy. To po nich bedzie nstępowało logowanie.

mkdir .ssh
touch .ssh/authorized_keys
chmod 700 .ssh
chmod 600 .ssh/uthorized_keys

Na ten moment nasz serwer backupu jest skonfigurowany.

Konifgarcja klienta – serwera który będziemy backupować.

Ponownie instalujemy na nim restic jak wyżej

yum -y install yum-utils
yum-config-manager --add-repo https://copr.fedorainfracloud.org/coprs/copart/restic/repo/epel-7/copart-restic-epel-7.repo
yum -y install restic

Dla innych systemów możemy się posiłkowac dokumentacją na stronie projektu: https://restic.readthedocs.io/en/stable/020_installation.html

Nastepnie dodamy skrypt backupu, który ułatwi mam pracę z naszym repozytorum. Ja takie skrypty zawsze umieszczam w katalogu /root/bin/

mkdir -p /root/bin
nano /root/bin/restic.sh

Wklejamy do niego poniższy kod wpisując odpowiedni adres ip oraz hasło. Jesli czujesz się na siłach możesz modyfikować działanie skryptu.

#!/bin/bash

export RESTIC_REPOSITORY=sftp:restic@<ip_servwera_backupu>/Backups/default
export RESTIC_PASSWORD='haslo_do_repozytorum_default'

usage(){
  echo $0: Unknow arguments
  echo "usage: $0 <backup|forget|check|list|mount>"
  exit 1
}

backup(){
  restic backup / \
    --verbose \
    --one-file-system \
     --exclude-caches \
  || echo "Restic Backup" -m "Failed to backup"
}

forget(){
  restic forget \
    --keep-hourly 12 \
    --keep-daily 7 \
    --keep-weekly 5 \
    --keep-monthly 6 \
    --prune \
  || echo "Restic Backup" -m "Failed to prune"
}

check(){
  restic check \
    --with-cache \
  || echo "Restic Backup" -m "Check failed"

}

list(){
  restic snapshots --host `hostname -f`
}

mount(){
  mkdir -p /mnt/restic
  restic  mount /mnt/restic
}

if [ $# -lt 1 ]; then
    usage
fi


case "$1" in
  "backup") backup;;
  "forget") forget ;;
  "check") check ;;
  "list") list ;;
  "mount") mount ;;
  *) usage;;
esac

Nadajemy odpowiednie uprawnienia:

chmod 700 /root/bin/restic.sh

Pozostało jeszcze tylko dodać klucz publiczny klienta do  .ssh/authorized_keys usera restic. Kopiujemy więc pliku .ssh/id_rsa.pub

cat .ssh/id_rsa.pub 
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC9n4WrecaBzCBiaKMq8pszHPdoZ3/UgOibzh/aHhbbOTfGhqgyauABHWLd9T6vTp0vEesR/TtVZVLm4LgG7/mhO4XBdTPev0Gj3IE/sVoD7hjCaI4ExsyeCyaIWdXwN9HnFL3HZiRvmKJs3ghSl1jJB2tifqN/xJhURr5+HVlct625AmMnwLXhVfc+QPjM8/h8Y39IX6cUsjaoiHwo7wztko4yL7hQX8aWBtwSjX3O1mUkEaQ+qd5yvEiuzXEPSTW3AlM6pqNRQ6M04IKkYMG6iB8U0vqSF2jYN1lntV5hXKYYKrHeEtCR/dXfd+GIN/+km2ZXcq1GDQ7PLhTyE58V stephen@X200s

i wklejamy go do .ssh/authorized_keys na serwerze backupu

nano .ssh/authorized_keys

Jesli na kliencie nie mamy pliku .ssh/id_rsa.pub mozemy wygenerować parę kluczy poleceniem

ssh-keygen

Teraz możemy sprawdzić czy nasze repo działa poprawnie.

/root/bin/restic.sh list
password is correct
ID        Date                 Host        Tags        Directory
----------------------------------------------------------------------
----------------------------------------------------------------------
0 snapshots

Jesli wszystko poszło dobrze zobaczymy komunikat jak wyżej. Możemy teraz wykonać pierwszy backup.

/root/bin/restic.sh backup

Dodajemy poniższą linikę do crona (może byc crontab -e)

02 * * * * /root/bin/restic.sh

Powyższy wpis bedzie wykonywał backup codziennie o 2 w nocy.

Ale to nie wszystko!

Pozostało nam jeszcze zarządzać retencją oraz testowaniem backupów. Jako że nie chcemy męczyć naszego klienta zrobimy to lokalnie na serwerze backupu!

Dodamy więc urzytkownikowi restic nasz skrypt w ~/bin/restic.sh

mkdir bin
nano bin/restic.sh

Wkając identyczną zawarość jak ma klient. Zmieniając jedynie RESTIC_REPOSITORY na

export RESTIC_REPOSITORY=~/Backups/default/

Nadajem uprawnienia jak wyżej

chmod 700 ~/bin/restic.sh

I sprawdzamy czy wszystko działa:

/home/restic/restic.sh list 
repository 1eb521d1 opened successfully, password is correct
ID        Date                 Host        Tags        Directory
----------------------------------------------------------------------
----------------------------------------------------------------------
0 snapshots

teraz dodajemy wpisy w cronie odpowiedzialnie za restencję oraz testowanie

9 * * * * /home/restic/bin/restic.sh forget
13 * * * * /home/restic/bin/restic.sh check

Robimy to w dzień bo w nocy robią sie backupy.

Na ten moment mamy wykonujące się kopie zapasowe na własny serwer. Oczywiście powyży skrypt pozostawia wiele do życzenia brakuje powiadomień mailowych oraz skrytów pre i post backup.

Written by IQhost