1. Home
  2. Cloud
  3. Hvordan planlægger jeg snapshots i Oderland Cloud?

Hvordan planlægger jeg snapshots i Oderland Cloud?

Denne vejledning er beregnet til avancerede brugere.

I øjeblikket er der ingen understøttelse af planlægning af snapshots i Oderland Cloud, men du kan bruge OpenStack API til at løse det på egen hånd. Ved hjælp af et bash-script (eller et andet sprog, du foretrækker) og en planlægningstjeneste som cron eller en systemd-timer kan du automatisk tage snapshots af alle monterede diskenheder på din virtuelle server.

Vi har skrevet et forslag til et sådant manuskript, som du kan bruge som inspiration (to variationer over samme tema). Du skal udfylde alle variablerne under kommentarerne OpenStack credentials og Virtual server ID (og Email settings, hvis du bruger e-mail-indstillingen efter kørslen). Scriptet nedenfor vil iterere over alle volumener, der er monteret på serveren, tage et snapshot af dem, kontrollere status og derefter udskrive resultatet i terminalen (og sende en rapport via e-mail, hvis du ønsker det).

Data til brug for scriptet

Før du kan konfigurere og begynde at bruge bash-scriptet, skal du bruge nogle oplysninger om din Cloud-konto og den server, du vil oprette snapshots til:

  • Loginoplysningerne til din Cloud-konto (brugernavn og adgangskode). Hvis du ikke har dem, kan du få dem ved at følge instruktionerne her (afsnittet „Nulstilling af din adgangskode‟).
  • Projekt-ID for din Cloud-konto. Du kan se dette, når du er logget ind på Cloud-kontrolpanelet i øverste højre hjørne:
  • Server-ID for din server. Dette kan findes inde i Oderland Cloud-kontrolpanelet, hvis du går til Compute (ikonet, der ligner en terning) -> Virtual machines i menuen til venstre:

    Klik derefter på rækken for den server, du vil oprette snapshots for, og rul ned til rækken ID i højre del af vinduet.

Du har nu alt, hvad du skal bruge til at oprette scriptet i henhold til vores forslag nedenfor.

Bash-scripts til snapshots

Vær forsigtig med, hvor du gemmer scriptet, da oplysningerne i det giver adgang til alle servere i din Oderland Cloud-konto.

Når du har uddraget alle oplysningerne i ovenstående afsnit, kan du oprette scriptet. Vælg, om du vil modtage e-mails fra scriptet eller ej, ved at kopiere den variant af scriptet, du ønsker, nedenfor.

Scripts, der sender e-mails med resultater

Scriptet skal bruge pakkerne openstack, jq og mailx for at køre. Hvis du ikke har dem til rådighed, skal de installeres først. Hvordan du gør det, er ikke beskrevet i denne vejledning.

Kopier koden nedenfor til en fil på serveren, og kald den snapshot.sh.

Sørg for at erstatte indholdet af OS_PASSWORD, OS_PROJECT_NAME, OS_USERNAME og server_id med de data, du har indsamlet som beskrevet ovenfor.

Indtast også alle de ønskede oplysninger i afsnittet „E-mailindstillinger‟ for at sende en e-mail med resultaterne af kørslen.

#!/bin/bash

# OpenStack-legitimationsoplysninger
eksport OS_AUTH_TYPE='adgangskode'
export OS_AUTH_URL='https://cloud-api.oderland.com:5000/v3/'
export OS_DOMAIN_NAME='sky'
export OS_PASSWORD='CLOUDLÖSENORD'
export OS_PROJECT_NAME='PROJEKT-ID'
export OS_USERNAME='CLOUDANVÄNDARNAMN'

# Virtuel server-ID
server_id='SERVER-ID'

# E-mail-indstillinger
recipient=''
sender=''
smtp_password=''
smtp_port=''
smtp_server=''
smtp_brugernavn=''

# Afslut ved variabler, der ikke er indstillet
set -uo pipefail

# Tjek for afhængigheder
for dep i openstack mailx jq; do
  hvis ! hash "$dep" &> /dev/null; then
  printf 'Manglende eksekverbar afhængighed: %s\n' "$dep"
  Udgang 1
  fi
færdig

# Hent navnet på den virtuelle server
server_name=$(openstack server show -c name -f value "$server_id")

# Hent listen over diskenheder, der er knyttet til den virtuelle server
volume_list=$(
  openstack server show -c volumes_attached -f json "$server_id" |
  jq -r '.volumes_attached[].id'
)

# Variabel til at gemme resultatbeskeden
result_message=""

# Iterér over hver volume og tag et snapshot
for volume_id i $volume_list; do
  snapshot_name="snapshot-$(date +%Y%%M%")".

  # Opret snapshot
  if openstack volume snapshot create --volume "$volume_id" --force "$snapshot_name" 1> /dev/null; then
  result_message+="Snapshot oprettet med succes for volume $volume_id.\n"

  # Vent på, at snapshotet bliver tilgængeligt
  timeout=60
  elapsed_time=0
  while true; do
  snapshot_status=$(openstack volume snapshot show -c status --format value "$snapshot_name")
  if [ "$snapshot_status" == "available" ]; then
  result_message+="Snapshot $snapshot_name er tilgængeligt for volume $volume_id.\n"
  pause
  fi
  sove 5
  elapsed_time=$((elapsed_time + 5))
  if [ $elapsed_time -ge $timeout ]; then
  result_message+="Fejl: Snapshot $snapshot_name blev ikke tilgængeligt for volume $volume_id inden for timeout-perioden.\n"
  pause
  fi
  færdig
  ellers
  result_message+="Fejl ved oprettelse af snapshot for volume $volume_id.\n"
  fi
færdig

# Send e-mail med resultatet
printf "$result_message" | ?
  mailx \
  -s "Snapshot-resultat for $server_navn" \
  -S 'v15-compat' \
  -S "mta=smtp://$smtp_username:$smtp_password@$smtp_server:$smtp_port" \
  -S 'smtp-use-starttls' \
  -S 'smtp-auth=login' \
  -r "$sender" \
  "$recipient"

printf "$result_message"

Glem ikke at gøre filen, der indeholder scriptkoden, eksekverbar:

chmod +x /sti/til/snapshot.sh

Du kan nu teste at oprette snapshots ved hjælp af scriptet ved at køre det:

/sti/til/snapshot.sh

Scripts, der ikke sender e-mails med resultater

Scriptet skal bruge pakkerne openstack og jq for at køre. Hvis du ikke har dem til rådighed, skal de installeres først. Hvordan du gør det, er ikke beskrevet i denne vejledning.

Kopier koden nedenfor til en fil på serveren, og kald den snapshot.sh.

Sørg for at erstatte indholdet af OS_PASSWORD, OS_PROJECT_NAME, OS_USERNAME og server_id med de data, du har indsamlet som beskrevet ovenfor.

#!/bin/bash

# OpenStack-legitimationsoplysninger
eksport OS_AUTH_TYPE='adgangskode'
export OS_AUTH_URL='https://cloud-api.oderland.com:5000/v3/'
export OS_DOMAIN_NAME='sky'
export OS_PASSWORD='CLOUDLÖSENORD'
export OS_PROJECT_NAME='PROJEKT-ID'
export OS_USERNAME='CLOUDANVÄNDARNAMN'

# Virtuel server-ID
server_id='SERVER-ID'

# Afslut ved variabler, der ikke er indstillet
set -uo pipefail

# Tjek for afhængigheder
for dep i openstack jq; do
  hvis ! hash "$dep" &> /dev/null; then
  printf 'Manglende eksekverbar afhængighed: %s\n' "$dep"
  Udgang 1
  fi
færdig

# Hent navnet på den virtuelle server
server_name=$(openstack server show -c name -f value "$server_id")

# Hent listen over diskenheder, der er knyttet til den virtuelle server
volume_list=$(
  openstack server show -c volumes_attached -f json "$server_id" |
  jq -r '.volumes_attached[].id'
)

# Variabel til at gemme resultatbeskeden
result_message=""

# Iterér over hver volume og tag et snapshot
for volume_id i $volume_list; do
  snapshot_name="snapshot-$(date +%Y%%M%")".

  # Opret snapshot
  if openstack volume snapshot create --volume "$volume_id" --force "$snapshot_name" 1> /dev/null; then
  result_message+="Snapshot oprettet med succes for volume $volume_id.\n"

  # Vent på, at snapshotet bliver tilgængeligt
  timeout=60
  elapsed_time=0
  while true; do
  snapshot_status=$(openstack volume snapshot show -c status --format value "$snapshot_name")
  if [ "$snapshot_status" == "available" ]; then
  result_message+="Snapshot $snapshot_name er tilgængeligt for volume $volume_id.\n"
  pause
  fi
  sove 5
  elapsed_time=$((elapsed_time + 5))
  if [ $elapsed_time -ge $timeout ]; then
  result_message+="Fejl: Snapshot $snapshot_name blev ikke tilgængeligt for volume $volume_id inden for timeout-perioden.\n"
  pause
  fi
  færdig
  ellers
  result_message+="Fejl ved oprettelse af snapshot for volume $volume_id.\n"
  fi
færdig

printf "$result_message"

Glem ikke at gøre filen, der indeholder scriptkoden, eksekverbar:

chmod +x /sti/til/snapshot.sh

Du kan nu teste at oprette snapshots ved hjælp af scriptet ved at køre det:

/sti/til/snapshot.sh

Opret planlagte snapshots

Nu, hvor du har scriptet, kan du opsætte snapshot-planlægning, så du ikke behøver at bekymre dig om at oprette dem manuelt. Den enkleste løsning på dette er at oprette et cron-job, som vi vil diskutere nedenfor. Du kan også oprette en systemd-timer til planlægning, men det er ikke omfattet af denne vejledning.

Åbn cronjob-editoren:

crontab -e

Til sidst skal du tilføje følgende i crontab for at planlægge kørslen til kl. 02:00 om natten hver dag. Du kan selvfølgelig angive andre tidspunkter, intervaller osv. – dette er blot et eksempel.

0 2 * * * * /sti/til/snapshot.sh

Rediger derefter din crontab færdig.

Dit script vil nu blive udført af serveren på de tidspunkter, du har angivet i cron-jobbet.

Was this article helpful?

Related Articles