Fix backups for new multionode dbs

This commit is contained in:
Micke Nordin 2023-03-13 16:20:03 +01:00
parent c82fe2db78
commit 392e83188b
Signed by untrusted user: Micke
GPG key ID: 0DA0A7A5708FE257
4 changed files with 68 additions and 14 deletions

View file

@ -312,8 +312,6 @@ class sunetdrive::script (
ok_criteria => ['exit_status=0','max_age=2d'], ok_criteria => ['exit_status=0','max_age=2d'],
warn_criteria => ['exit_status=1','max_age=3d'], warn_criteria => ['exit_status=1','max_age=3d'],
} }
}
file { '/root/tasks/backupsinglenodedb.sh': file { '/root/tasks/backupsinglenodedb.sh':
ensure => file, ensure => file,
content => template('sunetdrive/script/backupsinglenodedb.erb.sh'), content => template('sunetdrive/script/backupsinglenodedb.erb.sh'),
@ -321,6 +319,27 @@ class sunetdrive::script (
group => 'root', group => 'root',
mode => '0700', mode => '0700',
} }
}
else {
file { '/root/tasks/backupsinglenodedb.sh':
ensure => absent,
}
file { '/root/tasks/backupmultinodedb.sh':
ensure => file,
content => template('sunetdrive/script/backupmultinodedb.erb.sh'),
owner => 'root',
group => 'root',
mode => '0700',
}
sunet::scriptherder::cronjob { "backupmultinodedb":
cmd => "/root/tasks/backupmultinodedb.sh",
hour => '2',
minute => '0',
ok_criteria => ['exit_status=0','max_age=2d'],
warn_criteria => ['exit_status=1','max_age=3d'],
}
}
$singlenodes.each | $singlenode| { $singlenodes.each | $singlenode| {
$multinode = hiera_hash('multinode_mapping')[$singlenode]['server'] $multinode = hiera_hash('multinode_mapping')[$singlenode]['server']
$multinodeserver = "${multinode}.${site_name}" $multinodeserver = "${multinode}.${site_name}"
@ -332,6 +351,7 @@ class sunetdrive::script (
ok_criteria => ['exit_status=0','max_age=30m'], ok_criteria => ['exit_status=0','max_age=30m'],
warn_criteria => ['exit_status=1', 'max_age=60m'], warn_criteria => ['exit_status=1', 'max_age=60m'],
} }
if $environment == 'prod' {
sunet::scriptherder::cronjob { "backup${singlenode}db": sunet::scriptherder::cronjob { "backup${singlenode}db":
cmd => "/root/tasks/backupsinglenodedb.sh ${multinodeserver} ${singlenode}", cmd => "/root/tasks/backupsinglenodedb.sh ${multinodeserver} ${singlenode}",
hour => '2', hour => '2',
@ -339,7 +359,6 @@ class sunetdrive::script (
ok_criteria => ['exit_status=0','max_age=2d'], ok_criteria => ['exit_status=0','max_age=2d'],
warn_criteria => ['exit_status=1','max_age=3d'], warn_criteria => ['exit_status=1','max_age=3d'],
} }
if $environment == 'prod' {
sunet::scriptherder::cronjob { "statistics${singlenode}": sunet::scriptherder::cronjob { "statistics${singlenode}":
cmd => "/root/tasks/usage.sh ${singlenode} ${multinodeserver}", cmd => "/root/tasks/usage.sh ${singlenode} ${multinodeserver}",
hour => '2', hour => '2',
@ -348,6 +367,12 @@ class sunetdrive::script (
warn_criteria => ['exit_status=1','max_age=3d'], warn_criteria => ['exit_status=1','max_age=3d'],
} }
} }
else {
sunet::scriptherder::cronjob { "backup${singlenode}db":
ensure => absent,
cmd => 'true',
}
}
unless $singlenode in ['mau', 'uu'] { unless $singlenode in ['mau', 'uu'] {
sunet::scriptherder::cronjob { "make${singlenode}buckets": sunet::scriptherder::cronjob { "make${singlenode}buckets":
cmd => "/root/tasks/makebuckets.sh ${multinodeserver} ${nccontainer} ${singlenode}-${environment}", cmd => "/root/tasks/makebuckets.sh ${multinodeserver} ${nccontainer} ${singlenode}-${environment}",

View file

@ -4,7 +4,7 @@ class sunetdrive::scriptreceiver()
sunet::system_user {'script': username => 'script', group => 'script', managehome => true, shell => '/bin/bash' } sunet::system_user {'script': username => 'script', group => 'script', managehome => true, shell => '/bin/bash' }
# These tasks correspond to a ${task}.erb.sh template # These tasks correspond to a ${task}.erb.sh template
$tasks = ['list_users', 'list_files_for_user', 'create_bucket', 'backup_db', 'purge_backups', 'maintenancemode', 'restart_sunet_service', 'start_sentinel', 'stop_sentinel', 'makeswap'] $tasks = ['list_users', 'list_files_for_user', 'create_bucket', 'backup_db', 'purge_backups', 'maintenancemode', 'restart_sunet_service', 'start_sentinel', 'stop_sentinel', 'makeswap', 'backup_multinode_db']
$environment = sunetdrive::get_environment() $environment = sunetdrive::get_environment()
$config = hiera_hash($environment) $config = hiera_hash($environment)

View file

@ -0,0 +1,24 @@
#!/bin/bash
# Backup all databases
# We sleep a deterministic amount of time, which will be between 0 an 128 m and allways the same within
# a specific host, but will differ between hosts
sleep $((16#$(ip a | grep "link/ether" | head -1 | awk -F ':' '{print $6}' | awk '{print $1}') / 2))m
number_of_full_to_keep=7
backup="multinode-db1.$(fqdn -d)"
remote_backup_dir="/etc/mariadb/backups"
backup_dir="/opt/backups"
bucket="db-backups-multinode"
mirror="common-<%= @environment %>-mirror"
echo "Backing up all databases for for multinode customer"
ssh "${backup}" "sudo /home/script/bin/backup_multinode_db.sh"
echo "Cleaning up old backups for ${backup}"
ssh ${backup} "sudo /home/script/bin/purge_backups.sh ${remote_backup_dir}"
echo "Copying backups here"
mkdir -p ${backup_dir}
scp "script@${backup}:${remote_backup_dir}/$(date +%Y/%m/%d)/*.gz" "${backup_dir}"
echo "Copying backups to remote bucket"
rclone mkdir "${mirror}:${bucket}"
duplicity --full-if-older-than 1M --tempdir /mnt --archive-dir /mnt --no-encryption "${backup_dir}" "rclone://${mirror}:/${bucket}"
duplicity remove-all-but-n-full "${number_of_full_to_keep}" --tempdir /mnt --archive-dir /mnt --force "rclone://${mirror}:/${bucket}"
echo "cleaning up"
rm -r "${backup_dir}"

View file

@ -0,0 +1,5 @@
#!/bin/bash
docker exec mariadb_db_1 /scripts/run_manual_backup_dump.sh
backupdir=/etc/mariadb/backups
chmod 755 ${backupdir}
chown -R script:root ${backupdir}