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