Solution Architect - Bacula Konferencja

Transkrypt

Solution Architect - Bacula Konferencja
BACKUP APLIKACJI I BAZ
DANYCH W BACULA
EFEKTYWNE ZARZĄDZANIE KOPIAMI BEZPIECZEŃSTWA
Radosław Korzeniewski
Solution Architect
email: [email protected]
http://www.inteos.pl/
środa, 27 listopada 2013
AGENDA
•Elastyczne backupy aplikacji
•Mechanizmy wbudowane
•Backup baz danych
•MySQL , PostgreSQL , Oracle, SQL Server
•Backup aplikacji i środowisk
•ActiveDirectory/Systemstate
•Backup maszyn wirtualnych
•VMware Infrastructure
•Pytania i odpowiedzi ...
2
środa, 27 listopada 2013
ELASTYCZNE BACKUPY APLIKACJI
3
środa, 27 listopada 2013
ELASTYCZNE BACKUPY APLIKACJI
•Backup plików dostępnych na filesystemie
•filesystemy lokalne (ntfs, ufs, ext4, etc...)
•filesystemy sieciowe (cifs, nfs, etc...)
•Mechanizmy wbudowane
•standardowy backup plików aplikacji lub bazy danych
•wykorzystanie wbudowanych pluginów (bpipe)
•Zapewnienie spójności danych
•wyścig pomiędzy zapisem przez aplikację a odczytem przez backup
•bufory danych w pamięci aplikacji
•snapshot, offline, wyładowanie danych, itp.
4
środa, 27 listopada 2013
ELASTYCZNE BACKUPY APLIKACJI
•Uruchamianie skryptów
•Uprawnienia
•Linux/Unix - root:root
•Windows - SYSTEM
•Client Run
•Client Run
•RunScript
Before Job
After Job
Job {
Name = JobBackupApp01
Type = Backup
ClientRunBeforeJob = /bin/start-bck.sh
ClientRunAfterJob = /bin/finish-bck.sh
Client = client
Fileset = FileSetDefaultSet
Storage = "backup-sd"
Messages = "Standard"
Pool = "PoolDefault"
Priority = 10
}
•Runs On Client, Runs When
•Fail Job On Error
•Runs On Success, Runs On Failure
•Command, Console
5
środa, 27 listopada 2013
ELASTYCZNE BACKUPY APLIKACJI
•Przykłady skryptów - backup MySQL za pomocą mysqldump
•mysqldump.sh (ClientRunBeforeJob)
#!/bin/sh
# (c) Inteos Sp. z o.o.
MYUSER=root
MYPASS=ssp
MYDUMP=/usr/bin/mysqldump
MYDUMPFILE=/var/tmp/mysql.sql
MYLOGFILE=/var/log/mysql.sql.log
if [ "x$MYUSER" != "x" ]
then
MYUSEROPT="--user=$MYUSER"
fi
if [ "x$MYPASS" != "x" ]
then
MYPASSOPT="--password=$MYPASS"
fi
$MYDUMP $MYUSEROPT $MYPASSOPT --all-databases -v > $MYDUMPFILE 2>$MYLOGFILE
6
środa, 27 listopada 2013
ELASTYCZNE BACKUPY APLIKACJI
•Przykłady skryptów - backup MySQL za pomocą mysqldump
•mysqldumprm.sh (ClientRunAfterJob)
#!/bin/sh
# (c) Inteos Sp. z o.o.
MYDUMPFILE=/var/tmp/mysql.sql
rm -f $MYDUMPFILE
7
środa, 27 listopada 2013
ELASTYCZNE BACKUPY APLIKACJI
•RunScript
•bardziej zaawansowana metoda
sterowania przebiegiem backupu
•wiele definicji RunScript
z różnymi parametrami
•możliwość wykonania skryptu
“sprzątającego” także dla
nieudanego backupu
Job {
(...)
RunScript {
Runs On Client = Yes
Runs When = Before
Fail Job On Error = Yes
Command = /usr/bin/mysqldump.sh
}
RunScript {
Runs On Client = Yes
Runs When = After
Fail Job On Error = No
Runs On Success = yes
Runs On Failure = yes
Command = /usr/bin/mysqldumprm.sh
}
}
8
środa, 27 listopada 2013
ELASTYCZNE BACKUPY APLIKACJI
•Przekierowanie danych ze skryptu bezpośrednio do Bacula
•backup danych nie dostępnych w postaci plików na filesystemie
•backup danych z pominięciem etapu wyładowania danych na filesystem
•oszczędność czasu - jeden przebieg wyładowania danych i backupu
•oszczędność miejsca - brak wymogu dodatkowego miejsca na wyładowane
dane
•Plugin: bpipe-fd
Plugin=bpipe:<nazwa_pliku>:<reader_script>:<writer_script>
9
środa, 27 listopada 2013
ELASTYCZNE BACKUPY APLIKACJI
•Plugin: bpipe-fd
Plugin=bpipe:<nazwa_pliku>:<reader_script>:<writer_script>
•<nazwa_pliku> - wirtualna nazwa pliku pod którą będzie widoczny nasz
backup w bazie katalogowej
•<reader_script> - ścieżka i nazwa skryptu wykonującego wyładowanie
danych do backupu
•<writer_script> - ścieżka i nazwa skryptu wykonującego załadowanie
danych backupowych podczas odtwarzania
10
środa, 27 listopada 2013
ELASTYCZNE BACKUPY APLIKACJI
•Przykład konfiguracji Filesetu do backupu IBM DB2
•zamiast parametru File podajemy parametr Plugin z odpowiednimi
parametrami
#
# FileSet definition for Applications
#
# (c) Inteos Sp. z o.o.
#
FileSet {
Name = "FileSetDB2OnlineSet01"
Include {
Options {
signature = MD5
noatime = yes
}
Plugin = "bpipe:/DB2/backup.stream:/bin/db2backup.sh:/bin/db2restore.sh"
}
}
11
środa, 27 listopada 2013
ELASTYCZNE BACKUPY APLIKACJI
•Przykłady skryptów - backup IBM DB2 za pomocą narzędzi db2
•bpipe-fd - db2backup.sh
#!/bin/sh
# (c) Inteos sp. z o.o.
DB2USER=db2prd
DB2DB=PRD
DBPIPE=/tmp/db2pipe
if [ ! -p $DBPIPE ]
then
! mkfifo $DBPIPE
fi
chown $DB2USER $DBPIPE
su - $DB2USER -c "/db2/$DB2USER/sqllib/bin/db2 backup db $DB2DB online to $DBPIPE" \
2> /tmp/db2b2.log > /tmp/db2b1.log &
cat $DBPIPE
12
środa, 27 listopada 2013
ELASTYCZNE BACKUPY APLIKACJI
•Przykłady skryptów - backup IBM DB2 za pomocą narzędzi db2
•bpipe-fd - db2restore.sh
#!/bin/sh
# (c) Inteos sp. z o.o.
DB2USER=db2dev
DB2DB=DEV
DB2DBREST=DEVRES
DBPIPE=/tmp/db2pipe
if [ ! -p $DBPIPE ]
then
! mkfifo $DBPIPE
fi
chown $DB2USER $DBPIPE
su - $DB2USER -c "/db2/$DB2USER/sqllib/bin/db2 restore db $DB2DB from $DBPIPE into $DB2DBREST"\
2> /tmp/db2r2.log > /tmp/db2r1.log
cat > $DBPIPE
13
środa, 27 listopada 2013
BACKUP BAZ DANYCH
14
środa, 27 listopada 2013
BACKUP BAZ DANYCH
15
środa, 27 listopada 2013
BACKUP BAZ DANYCH
•MySQL
•wyładowanie danych za pomocą: mysqldump
•przykład skryptów na poprzednich slajdach
•możemy także skorzystać z pomocy bpipe-fd
•odtwarzanie bazy danych
•odtwarzamy plik z eksportem danych (plik.sql)
•uruchamiamy pustą instancję (serwer bazodanowy)
•wykonujemy: # mysql < plik.sql
•czekamy aż wszystko się ponownie załaduje
16
środa, 27 listopada 2013
BACKUP BAZ DANYCH
•MySQL
•backup binarny plików bazodanowych
•zamrożenie bazy danych: FLUSH
TABLES WITH READ LOCK
•wykonanie za pomocą skryptu w ClientRunBeforeJob
•operacje na bazie są wstrzymywane do czasu zakończenia backupu
•warto powiązać z mechanizmem filesystem snapshot
•odblokowanie bazy danych po backupie: UNLOCK
TABLES
•wykonanie za pomocą skryptu w ClientRunAfterJob
17
środa, 27 listopada 2013
BACKUP BAZ DANYCH
•MySQL
•wykorzystanie pluginu: mysql-fd
•tryb backupu binarnego z logami transakcyjnymi (binlog)
•narzędzie: innobackupex
•poziomy: Full, Diff, Incr
•standardowy tryb mysqldump
•bez potrzeby pisania skryptów
•poziomy: Full, Diff, Incr
•Point-In-Time-Recovery
•log-bin
# DUMP mode
FileSet {
Name = “mysqldumpbaculaFS”
Include {
Plugin = "mysql: database=bacula"
}
}
# BINARY mode
FileSet {
Name = “mysqlbinaryFS”
Include {
Plugin = "mysql: mode=binary"
}
}
= hostname-bin
18
środa, 27 listopada 2013
BACKUP BAZ DANYCH
•MySQL - odtwarzanie bazy danych - tryb dump
•pełne odtworzenie środowiska
•odtwarzanie pojedynczej bazy danych
•nowa baza - where =
•oryginalna baza danych
•SQL do pliku - where
•#
baculanew
= /tmp
mysql < data.sql
•Point-In-Time-Recovery
•narzędzie: mysqlbinlog
•wymaga ręcznego działania
Found MASTER_LOG position
sql-bin.000004:2083 for "test"
$ dir
/etc/mysql/my.cnf
@MYSQL/main/gobal-grants.sql
@MYSQL/main/settings.txt
@MYSQL/main/test/createdb.sql
@MYSQL/main/test/schema.sql
@MYSQL/main/test/data.sql
@MYSQL/main/test/grants.sql
@MYSQL/main/logs/mysql-bin.000001
@MYSQL/main/logs/mysql-bin.000002
19
środa, 27 listopada 2013
BACKUP BAZ DANYCH
•MySQL - odtwarzanie bazy danych - tryb binarny
•pełne odtworzenie środowiska
•wykorzystane narzędzia:
•innobackupex
•xbstream
•tymczasowe miejsce danych
•Point-In-Time-Recovery
•backupy przyrostowe oddzielnie
•aplikowanie logów
•innobackupex
•kopiowanie w docelowe miejsce
•# innobackupex --copy-back $PWD
# cd @MYSQL/main
# xbstream -x < all-databases.xbstream
# ls
all-databases.xbstream ibdata1.delta
xtrabackup_logfile
backup-my.cnf
xtrabackup_binary
performance_schema
ibdata1.meta
xtrabackup_checkpoints
mysql
xtrabackup_binlog_info
# innobackupex --apply-log --redo-only $PWD
...
02:50:02 innobackupex: completed OK!
# mkdir incr1
# cd incr1
# xbstream -x < ../all-databases-1.xbstream
# cd ..
# innobackupex --apply-log --redo-only -incremental-dir=incr1 $PWD
...
02:51:02 innobackupex: completed OK!
20
środa, 27 listopada 2013
BACKUP BAZ DANYCH
21
środa, 27 listopada 2013
BACKUP BAZ DANYCH
•PostgreSQL
•wyładowanie danych za pomocą: pg_dump
•analogiczne skrypty jak dla MySQL
•możemy także skorzystać z pomocy bpipe-fd
•odtwarzanie bazy danych
•odtwarzamy plik z eksportem danych (plik.sql)
•uruchamiamy pustą instancję (serwer bazodanowy)
•wykonujemy: # psql < plik.sql
•czekamy aż wszystko się ponownie załaduje
22
środa, 27 listopada 2013
BACKUP BAZ DANYCH
•PostgreSQL
•backup binarny plików bazodanowych
•zamrożenie bazy danych: SELECT PG_START_BACKUP(‘label’)
•aktualizacja plików bazodanowych zostaje wstrzymana
•zmiany są zapisywane tylko do plików logów (WAL)
•brak wpływu na działanie użytkowników (online)
•odblokowanie bazy danych: SELECT PG_STOP_BACKUP()
•zmiany z plików logów są przepisywane do plików bazodanowych
•wymagane osobne backupowanie archiwalnych plików logów
•archive_command = 'command %f %p'
•odtwarzanie
•odtwarzamy pliki bazodanowe i wymagane pliki logów
•wykonujemy database recovery (plik: recovery.conf)
•restore_command
= 'command %f %p'
23
środa, 27 listopada 2013
BACKUP BAZ DANYCH
•PostgreSQL
•wykorzystanie pluginu: postgres-fd
•tryb backupu binarnego z archiwizacją logów transakcyjnych (WAL)
•poziomy: Full, Diff, Incr
•standardowy tryb pg_dump
•bez potrzeby pisania skryptów
•tylko poziom Full
•pliki konfiguracyjne
•Point-In-Time-Recovery
•tylko mode=pitr
•archive_dir=<dir>
# DUMP mode
FileSet {
Name = “pgsqldumpbaculaFS”
Include {
Plugin = "postgresql: database=bacula"
}
}
# BINARY mode
FileSet {
Name = “pgsqlpitrFS”
Include {
Plugin = "postgresql: mode=pitr"
}
}
24
środa, 27 listopada 2013
BACKUP BAZ DANYCH
•PostgreSQL - odtwarzanie bazy
•tryb dump
•pełne odtworzenie środowiska wymaga instancji bazodnanowej
•odtwarzanie pojedynczej bazy danych
•nowa baza - where =
•oryginalna baza danych
•SQL do pliku - where
baculanew
= /tmp
•# pgsql < schema.sql
•tryb binarny (pitr)
•pełne odtworzenie środowiska
•Point-In-Time-Recovery
•plik: recovery.conf
•restore_command =
$ dir
@PG/main/roles.sql
@PG/main/postgresql.conf
@PG/main/pg_hba.conf
@PG/main/pg_ident.conf
@PG/main/tablespaces.sql
@PG/main/test/createdb.sql
@PG/main/test/schema.sql
@PG/main/test/data.sqlc
'command %f %p'
25
środa, 27 listopada 2013
BACKUP BAZ DANYCH
26
środa, 27 listopada 2013
BACKUP BAZ DANYCH
•Oracle RDBMS
•wyładowanie danych za pomocą: exp/expdp
•analogiczne skrypty jak poprzednio
•exp scott/tiger file=emp.dmp
log=emp.log
tables=emp rows=yes indexes=no
•możemy także skorzystać z pomocy bpipe-fd
•odtwarzanie bazy danych
•odtwarzamy plik z eksportem danych (emp.dmp)
•uruchamiamy pustą instancję (serwer bazodanowy)
•wykonujemy import danych za pomocą: imp/impdp
•imp
scott/tiger file=emp.dmp full=yes
•czekamy aż wszystko się ponownie załaduje
27
środa, 27 listopada 2013
BACKUP BAZ DANYCH
•Oracle RDBMS
•backup binarny plików bazodanowych
•zamrożenie plików bazodanowych: ALTER DATABASE BEGIN BACKUP
•aktualizacja plików bazodanowych zostaje wstrzymana
•zmiany są zapisywane tylko do plików logów
•brak wpływu na działanie użytkowników (online)
•zamrożenie poszczególnych tablespaces: ALTER TABLESPACE users
BEGIN BACKUP
•odblokowanie plików bazodanowych: ALTER DATABASE END BACKUP
•poszczególnych tablespaces: ALTER TABLESPACE users END BACKUP
•wymagany tryb ARCHIVELOG
•log_archive_dest_1='location=/u02/archive'
•log_archive_start=TRUE
•$ alter database archivelog
28
środa, 27 listopada 2013
BACKUP BAZ DANYCH
•Oracle RDBMS
•wykorzystanie pluginu: oracle-fd
•tryb RMAN Recovery Flash Area
•wymaga dodatkowego miejsca
•szybkie odtwarzanie danych
•skrypty RMAN backup/restore
•Point-In-Time-Recovery
•wymagany tryb ARCHIVELOG
•standardowy tryb exp/imp
•poszczególne schematy/tabele
•dodatkowe dane konfiguracyjne
•brak PITR
#DUMP (imp/exp)
FileSet {
Name = oracledump-FS
Include {
Plugin = "oracle: schema=bacula"
}
}
# RMAN (RFA)
FileSet {
Name = oraclerman-FS
Include {
Plugin = "oracle: mode=rman"
}
}
29
środa, 27 listopada 2013
BACKUP BAZ DANYCH
•Oracle RDBMS
•wykorzystanie pluginu: oracle-sbt-fd
•tryb backupu binarnego z logami transakcyjnymi w trybie RMAN/SBT
•instalacja libobk.so
•RMAN→libobk.so→DIR
•sterowanie przez RMAN
•alokacja wielu kanałów
•Point-In-Time-Recovery
•wymagany tryb ARCHIVELOG
RUN {
ALLOCATE CHANNEL c1 DEVICE
ALLOCATE CHANNEL c2 DEVICE
ALLOCATE CHANNEL c3 DEVICE
BACKUP INCREMENTAL LEVEL 0
}
TYPE sbt;
TYPE sbt;
TYPE sbt;
DATABASE PLUS ARCHIVELOG;
# cat /opt/bacula/etc/sbt.conf
client = oracle-fd
job = OracleBackup
bconsole = "bconsole -n -c bconsole.conf"
Job {
Name = OracleBackup
FileSet = oracleSBT-FS
}
FileSet {
Name = oracleSBT-FS
Include {
Plugin = oracle-sbt
}
}
30
środa, 27 listopada 2013
BACKUP BAZ DANYCH
•Oracle RDBMS - odtwarzanie bazy danych
•połączenie RMAN/SBT→libobk.so→DIR
•sterowanie przez RMAN
•odtwarzanie dowolnych danych zgodnie z możliwościami RMAN
•wiele kanałów danych
•odtwarzanie całościowe
•odtwarzanie pojedynczych plików
•odtwarzanie z RMAN/RFA
•odtwarzamy RFA
•bs_oracle_restore.pl
SHUTDOWN IMMEDIATE;
STARTUP MOUNT;
RUN {
ALLOCATE CHANNEL c1 DEVICE TYPE sbt;
ALLOCATE CHANNEL c2 DEVICE TYPE sbt;
SET UNTIL TIME ’2013-05-31_10:20:00’;
RESTORE DATABASE;
RECOVER DATABASE;
}
ALTER DATABASE OPEN RESETLOGS;
•odtwarzanie z dump
•sqlplus / as sysdba @users.sql
•imp scott/tiger file=data.dmp full=yes
31
środa, 27 listopada 2013
BACKUP BAZ DANYCH
32
środa, 27 listopada 2013
BACKUP BAZ DANYCH
•Microsoft SQL Server
•backup bazy danych za pomocą: osql
•analogiczne skrypty jak poprzednio
•BACKUP DATABASE test to
DISK = 'D:\test.bak'
•odtwarzanie bazy danych
•odtwarzamy plik z eksportem danych (test.bak)
•uruchamiamy pustą instancję (serwer bazodanowy)
•wykonujemy:
•RESTORE
DATABASE test from DISK = 'D:\test.bak'
•czekamy aż wszystko się ponownie załaduje
33
środa, 27 listopada 2013
BACKUP BAZ DANYCH
•Microsoft SQL Server
•wykorzystanie pluginu: vss-fd
•tryb backupu binarnego z logami transakcyjnymi
•wykorzystuje snapshot aplikacyjny VSS (SqlServerWriter)
•backup wszystkich baz danych instancji
•odtwarzanie
•zaznaczamy wszystkie pliki instancji
•zaznaczamy pliki tylko jednej bazy
•uruchamiamy zadanie restore
FileSet {
Name = "fileset-appl-mssql-set10"
Include {
Options {
Signature = SHA1
}
File = "S:/backupme"
File = "T:/backupme"
Plugin = "vss:/@MSSQL/"
}
}
34
środa, 27 listopada 2013
BACKUP APLIKACJI I ŚRODOWISK
35
środa, 27 listopada 2013
BACKUP APLIKACJI I ŚRODOWISK
•Microsoft Active Directory / SystemState
•backup z wykorzystaniem pluginu: vss-fd
•wykorzystanie mechanizmów VSS: @SYSTEMSTATE
•dodatkowy backup plików aplikacji i danych
•odtwarzanie środowiska
•instalacja systemu operacyjnego
•instalacja klienta backupowego
•odtwarzanie pełne SystemState
•restart serwera
•odtwarzanie całości plików danych
•bez nadpisywania (pominięcie)
•nie zawsze konieczne (zależy od OS)
FileSet {
Name = "fileset-appl-systemstate-1"
Include {
Options { Signature = SHA1 }
File = "C:/"
File = "D:/"
Plugin = "vss:/@SYSTEMSTATE/"
}
}
•restart serwera
36
środa, 27 listopada 2013
BACKUP MASZYN WIRTUALNYCH
37
środa, 27 listopada 2013
BACKUP MASZYN WIRTUALNYCH
•Kopie zapasowe z poziomu maszyny wirtualnej - guest
•instalacja agenta na każdej zabezpieczanej maszynie
•szybka i standardowa implementacja
•backup na poziomie wybranych plików
•poziomy backupu: Full, Diff, Incr
•efektywne odtwarzanie pojedynczych plików
•Kopie zapasowe z poziomu hypervisora - host
•instalacja agentów na serwerach proxy (dedykowane lub współdzielone)
•bardziej zaawansowana implementacja
•backup na poziomie obrazów maszyn wirtualnych i konfiguracji
•poziomy backupu: Full i Block level incremental
•efektywne odtwarzanie całych maszyn wirtualnych
•scenariusz Disaster Recovery
38
środa, 27 listopada 2013
VMWARE INFRASTRUCTURE
39
środa, 27 listopada 2013
VMWARE INFRASTRUCTURE
•SAN
•NBD
•vCenter
•VADP
•Agentless
•CBT
•block level
mgmt
LAN
vCenter
SAN
Bacula Enterprise
Edition
ESX Datastore
40
środa, 27 listopada 2013
VMWARE INFRASTRUCTURE
•VMware ESX
•plugin: vsphere-fd
•wymaga połączenia z vCenter
•obraz dysków + konfiguracja
•serwer proxy
•komunikacja po sieci FC/SAN
•komunikacja po sieci TCP/IP
•odtwarzanie
•jako nowa maszyna VM-guest
•parametr where=/
•jako pliki na filesystemie
•parametr where=/path
FileSet {
Name = vSphere
Include {
Options { Signature=MD5 }
Plugin = "vsphere: host=guest1"
}
}
% cat /opt/bacula/etc/vsphere_global.conf
[global]
keep_generations = 30
root_directory = /opt/bacula/working
vddk_path = /opt/bacula/bin/vddk
[vsphere]
username = root
password = vspherepassword
server = 192.168.0.1
url = https://192.168.0.1/sdk
41
środa, 27 listopada 2013
DZIĘKUJĘ.
PYTANIA?
Radosław Korzeniewski
Solution Architect
email: [email protected]
http://www.inteos.pl/
środa, 27 listopada 2013

Podobne dokumenty