Differences between revisions 14 and 15
Revision 14 as of 2023-04-15 11:57:05
Size: 6815
Comment:
Revision 15 as of 2023-04-15 12:06:53
Size: 5158
Comment:
Deletions are marked like this. Additions are marked like this.
Line 2: Line 2:
Backup kjøres automatisk fra manager en gang i døgnet ved hjelp av scriptet [[https://git.sesse.net/?p=backup.sh|backup.sh]].
Line 4: Line 3:
== Ta backup ==
For å ta backup av en maskin må følgende gjøres på manager og maskinen det skal tas backup av.
Backup-serveren er freebeast.nuug.no. Programvaren som brukes er [[https://rdiff-backup.net/|rdiff-backup]], samt noen egne scripts.
Line 7: Line 5:
=== På maskinen ===
Sett femte kolonne i fstab for alle diskene som skal dumpes til 1 eller høyere.
Backup starter 01:00 hver natt, og kjører foreløpig mot to hosts om gangen.
Line 10: Line 7:
La backupsh@manager.skolelinux.no logge på som root på den aktuelle maskinen. SSH-nøkkelen kan finnes i ~backupsh/.ssh/id_rsa.pub på manager.

=== På manager ===
Lag ZFS volum og sett rettigheter. Siden backupjobben kjører som brukeren backupsh på manager er det viktig at den har tilgang til volumet man lager.
{{{
zfs create nuugh1/backup/$host
chown backupsh:backupsh /nuugh1/backup/$host
}}}

Legg til maskinen i listen over maskiner det tas backup av.
{{{
echo "$host" >> /nuugh1/backup.sh/conf/computers.unix
}}}

Hvis det trengs kan man lage preexec og postexec script for maskinen, disse kan f.eks. dumpe en database før backupen tas og fjerne gamle databasedumper etter backupen har kjørt. Disse heter i så fall {{{/nuugh1/backup.sh/conf/preexec.$host}}} og {{{/nuugh1/backup.sh/conf/postexec.$host}}} og må være kjørbare.

== Restore ==
Restore gjøres ved å pakke ut filene man trenger fra tar arkivet som inneholder dem. For hver tar-ball er det også en fil med endelsen idx, denne inneholder en liste over alle filer i den aktuelle tar-ballen. Dette kan brukes for å enkelt finne hvilket arkiv som inneholder filene man er ute etter.

Skal man gjøre en full restore må man legge til flagget {{{--incremental}}} når man pakker ut de daglige arkivene for at tar ikke skal slette alle filer som ikke er med i arkivet.

<<Anchor(nyttoppsett)>>
= Nytt backup-oppsett =

Dette er foreløpige notater for oppsett av ny backup-løsning. Ved fullføring vil hele denne wiki-siden oppdateres med korrekt informasjon om oppsett og bruk.

Den nye backup-serveren vil være freebeast.nuug.no. Programvaren som brukes er [[https://rdiff-backup.net/|rdiff-backup]].

Installasjon av software:
Installasjon av software gjort for formålet:
Line 65: Line 34:
# Backup av alle servere listet i do-backup.conf starter 01:00 hver natt. # Gjør evt. justeringer i filelist_<fqdn> slik at innholdet i backupen blir riktig.
Line 69: Line 38:

(Alt dette oppsettet skal inn i ansible på sikt.)
Line 74: Line 45:
root@<hostnavn>:~# adduser --system --shell /bin/bash --group rdfbck root# adduser --system --shell /bin/bash --group rdfbck
Line 76: Line 47:
root@<hostnavn>:~# cat /home/rdfbck/.ssh/authorized_keys root# mkdir /home/rdfbck/.ssh
roo
t# vim /home/rdfbck/.ssh/authorized_keys
#
Innhold:
Line 78: Line 51:
root# chown rdfbck:rdfbck /home/rdfbck/.ssh{,/authorized_keys}
Line 79: Line 53:
root@<hostnavn>:~# cat /etc/sudoers.d/rdiff-backup-client root# visudo -f /etc/sudoers.d/rdiff-backup-client
# Innhold:
Line 83: Line 58:

Backup-scriptene:

Backup

Backup-serveren er freebeast.nuug.no. Programvaren som brukes er rdiff-backup, samt noen egne scripts.

Backup starter 01:00 hver natt, og kjører foreløpig mot to hosts om gangen.

Installasjon av software gjort for formålet:

root@freebeast:~ # pkg install py39-rdiff-backup py39-yaml sudo bind-tools

Klargjøring av disk/zfs:

root@freebeast:~ # zfs create -o compression=lz4 data/backup # Skru på compression, så rdiff-backup slipper

Sudo-rettigheter for rdfbck:

[root@freebeast ~]# cat /usr/local/etc/sudoers.d/rdfbck
# Allow the rdfbck user to run necessary commands as root, without password.
# Rdiff-backup itself must run as root to allow backed up files to have their
# original UID/GIDs when stored in the backup repository.  The zfs commands are
# used in the add-new-host script.
rdfbck ALL=(ALL:ALL) NOPASSWD: /usr/local/bin/rdiff-backup, /sbin/zfs create *, /sbin/zfs list *

Oppsett/konfigurasjon for ny host å ta backup av

På freebeast

root@freebeast:~ # su - rdfbck
[rdfbck@freebeast ~]$ bin/add-new-host <fqdn for ny host>

# Gjør evt. justeringer i filelist_<fqdn> slik at innholdet i backupen blir riktig.

På hosten du skal ta backup av

(Alt dette oppsettet skal inn i ansible på sikt.)

  • Installer rdiff-backup 2.x fra pakke-repo eller andre måter

# Legg til gruppe/bruker rdfbck
root# adduser --system --shell /bin/bash --group rdfbck

root# mkdir /home/rdfbck/.ssh
root# vim /home/rdfbck/.ssh/authorized_keys
# Innhold:
command="sudo /usr/local/sbin/snapback",from="158.36.191.154",no-port-forwarding,no-X11-forwarding,no-pty ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQC/QHCeEKUfpzhVHJTEbVUFxf4npnXmF+/0bLAaYprpmHACzIBEto+k2/QT+amDatN12eTANVrcmycaWjfjrAXRNP9pyAWPrvBu7eRScXmrwaOkD3beenuyOu5MrZ+0OhUKW8UQp0bPxd+f4wrIdwZniYPVc88HnbzULyypACkIww/X5xRNwtZ2bLVn4h4MMfv6oE2Mp9lspLm4Lt7kZsTMSAnTc03GWFB9emru9lvlp4hBD4OEQrWU1lXCm3Rt7PID/5FGwkYjR9r17X5Vm36ybFwywUIIf31NVEqXp1jaLtYVsudEEK6codHybarqgAGqAoGwsC8SeOX6suuUI8rEX404b6MSkH6syBiin5Nd5S3gqdi3dIpvcJFvgluJUyvxk2rMtG1dM49j1MswdlBthY6q9G8UGNd1bhIwd+bqqnvC+f3qkyr3c42CMexEEz5jasNVpOddmDeN4nX7gUPmQBRA3zdkINHljRaWno5bKh2+N/U2tNLPMa1+RJxaaMU= rdfbck@freebeast.nuug.no (rdiff-backup)
root# chown rdfbck:rdfbck /home/rdfbck/.ssh{,/authorized_keys}

root# visudo -f /etc/sudoers.d/rdiff-backup-client 
# Innhold:
# Allow the backup user to run the backup script as root without password.
rdfbck ALL = NOPASSWD: /usr/local/sbin/snapback

Backup-scriptene:

root@git:~# cat /usr/local/sbin/snapback
#!/bin/bash

export PATH=/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/local/sbin
logfile="/var/log/snapback.log"

# Function that takes an argument of number of seconds, and prints the time
# in the format HHh:MMm:SSs. You can use this to print e.g. runtime for a
# script.
# Usage: seconds_to_hms [SECONDS]
# If the argument is missing, or it is not an integer >0, 'NaN' is printed.
function seconds_to_hms() {
    local S_TIME HMS_TIME
    if [ -z "${1}" ]; then
        S_TIME="NaN"
    else
        S_TIME=${1}
    fi
    if [ ${S_TIME} -ge 0 ] 2> /dev/null; then
        HMS_TIME="$(printf '%02dh:%02dm:%02ds' $((S_TIME/3600)) $((S_TIME%3600/60)) $((S_TIME%60)))"
    else
        HMS_TIME="NaN"
    fi
    echo ${HMS_TIME}
}

# In case pre/post scripts don't exist, default value for their exit code
# variables is 0.
preexitcode=0
postexitcode=0

echo "$(date) Snapback started." >> ${logfile}
start=$(date +%s)

if [ -x "/usr/local/sbin/snapback.pre" ]; then
    echo "$(date) Pre-script starting." >> ${logfile}
    /usr/local/sbin/snapback.pre >> ${logfile} 2>&1
    preexitcode=${?}
    echo "$(date) Pre-script finished and returned with exit status ${preexitcode}." >> ${logfile}
fi

echo "$(date) Rdiff-backup started." >> ${logfile}
/usr/bin/rdiff-backup --server --restrict-read-only /
rdiffexitcode=${?}
echo "$(date) Rdiff-backup finished and returned with exit status ${rdiffexitcode}." >> ${logfile}

if [ -x "/usr/local/sbin/snapback.post" ]; then
    echo "$(date) Post-script starting." >> ${logfile}
    /usr/local/sbin/snapback.post >> ${logfile} 2>&1
    postexitcode=${?}
    echo "$(date) Post-script finished and returned with exit status ${postexitcode}." >> ${logfile}
fi

end=$(date +%s)
runtime=$((end-start))
echo "$(date) Snapback finished. Pre:${preexitcode}, Rdiff-backup:${rdiffexitcode}, Post:${postexitcode}. Duration: $(seconds_to_hms ${runtime}) (${runtime} seconds)." >> ${logfile}

# Exit with the sum of all exit codes from pre, rdiff-backup and post.
sumexitcode=$((preexitcode+rdiffexitcode+postexitcode))
exit ${sumexitcode}

root@git:~# cat /usr/local/sbin/snapback.pre 
#!/bin/bash

# This script runs as root

# Do something useful here if you want. Dump databases, create LVM snapshots or whatever

root@git:~# cat /usr/local/sbin/snapback.post 
#!/bin/bash

# This script runs as root

# Do something useful here if you want, like delete the LVM snapshots from .pre

grupper/sysadmin/backup (last edited 2023-04-15 12:38:30 by KristianRonningen)