Bacula는 오픈소스 네트워크 백업 솔루션이다. BaculaSystems(Enterprise edition)은 스위스에 본사를 두고 Subscription 방식으로 상용 서비스를 제공하고 있다. 2000년 부터 첫 개발이 시작되어 2002년 소스포지에 공개된 이후로 커뮤니티 메이저버전은 홀 수 단위로, 엔터프라이즈 메이저버전은 짝수 단위로 업데이트가 이루어지고 있다. 현재 커뮤니티 버전은 7, 엔터프라이즈 버전은 8까지 출시가 된 상태이다. 이 문서에서는 Open source Bacula 설치 및 기본적인 운영에 대해 소개한다.
발췌 : http://blog.osti.kr/os/bacula-open-source-backup-solution/
1. Bacura 구성 시스템
1.1. 구성도 그림
이 그림을 통해 Bacula 시스템의 큰 흐름을 알 수 있다.
백업 솔루션을 처음 접해본 이라면 아래 그림의 구성에 대한 이해가 쉽지 않을 것이다.
이 구성을 잘 이해해야만 Bacula config 파일들을 어렵지 않게 구성 할 수 있다.
1.2. Director Daemon
클라이언트들과 통신을 한다. 백업 및 복원명령을 직접 제어하며, 공식적으로 하나의 디렉터 데몬은 총 1천여대 정도의 클라이언트를 제어할 수 있다. Bacula 시스템의 핵심 데몬이며 포트번호는 9101을 사용한다.
1.3. File Daemon
Director Daemon으로부터 백업 명령이 들어왔을 시, 어떤 파일들을 백업해야하는지 대상 목록을 뽑아낸뒤 해당 파일들을 전송한다. Client 시스템에 설치되며 포트번호는 9102을 사용한다.
1.4. Storage Daemon
Director Daemon으로부터 백업 명령이 들어왔을 시, 파일데몬과 직접 접속하여 파일들이 저장되어야할 백업 장치를 제공하고, 파일을 실제로 저장하는 역할을 수행한다. 백업 데이터가 저장 될 시스템이며 포트번호는 9103을 사용한다.
2. Bacula Install
중급 규모 이하라면 한대의 시스템에 Direct Daemon, Storage Daemon과 SQL Catagory 역활까지 하게 하고, 각 클라이언트에 File Daemon을 설치하여 운영하도록 할 것이다.
이 문서에서는 오픈소스 Bacula의 각 데몬을 한 서버에 설치하고, 한 서버가 SQL Catalog(Mysql) 역활까지 All-in-One 구성으로 된 것을 소개한다.
Bacula 오픈소스 버전은 소스 및 rpm은 http://www.bacula.org 사이트를 통해 다운로드 가능하다.
또한 Bacula 엔터프라이즈 버전은 http://www.baculasystems.com/ 사이트를 통해 정보를 얻을 수 있다.
2.1. 설치 환경
♦ H/W : VMWare Workstation 10
♦ OS : CentOS 6.5 minimal x86_64
2.2. OS 설치
CentOS 6.5 minimal 은 basic 으로 설치한다.
OS 설치 후 Selinux 와 iptables 서비스는 off 시킨다.
2.3. 기반 utils 설치
GUI 기반의 Bacura Admin Tool(BAT)과 Bacula tray monitor를 설치하기 위해 x-windows를 설치하고, 기타 유틸들을 설치. CentOS를 Run Level 5로 구동
1 2 3 |
$ yum install –y wget bind–utils vim–enhanced rdate mysql–server mysql–devel $ yum groupinstall –y “Desktop” “Desktop Platform” “X Window System” “Fonts” “Graphical Administration Tools” “Internet Browser” “General Purpose Desktop” “kde-desktop” “Legacy X Window System compatibility” $ init 5 |
2.4. bacula 설치
Centos 6.x의 yum을 통해 설치를 하면 bacula-5.0.0-12 버전으로 설치가 된다. 참고로 현재 최신 버전은 bacula-7.0.5 버전이다.
1 |
$ yum install –y bacula–client.x86_64 bacula–common.x86_64 bacula–console.x86_64 bacula–console–bat.x86_64 bacula–director–common.x86_64 bacula–director–mysql.x86_64 bacula–docs.x86_64 bacula–storage–common.x86_64 bacula–storage–mysql.x86_64 bacula–traymonitor.x86_64 |
yum을 통한 rpm 설치 후 주요 디렉토리 및 실행 파일의 위치는 아래와 같다.
– 설정 디렉토리 : /etc/bacula
– sql 관련 파일 : /usr/libexec/bacula
– 로그 및 상태 파일 : /var/spool/bacula
– 시작 스크립트 : /etc/init.d/bacula-*
– 각종 실행 파일 위치 : /usr/sbin
2.5. DB 생성
Catagory용 database로 PostgreSQL, SQLlite, Mysql을 사용할 수 있고 Bacula에서 권장하는 DB는 PostgreSQL 이다.
여기서는 Mysql을 Catagory 용도로 사용한다. Mysql 이미 설치되어 있고 데몬이 떠 있다고 전제하고 진행한다. Mysql은 yum을 통해 설치하였다.
1 2 3 4 |
$ /usr/libexec/bacula/create_bacula_database $ /usr/libexec/bacula/make_bacula_tables $ /usr/libexec/bacula/grant_bacula_privileges $ cp /usr/share/doc/bacula–common–5.0.0/examples/sample–query.sql /etc/bacula |
2.6. bacula 실행
1 2 3 4 |
$ /etc/init.d/bacula–dir start $ /etc/init.d/bacula–sd start $ /etc/init.d/bacula–fd start $ chkconfig bacula–dir on ; chkconfig bacula–sd on ; chkconfig bacula–fd on |
2.7. 데몬 확인
아래와 같이 3개의 포트가 LISTEN 상태야지 정상적으로 데몬이 구동중인 것이다.
1 2 3 4 |
$ netstat –lnpt | grep bacula tcp 0 0 0.0.0.0:9101 0.0.0.0:* LISTEN 18764/bacula–dir tcp 0 0 127.0.0.1:9102 0.0.0.0:* LISTEN 18749/bacula–fd tcp 0 0 0.0.0.0:9103 0.0.0.0:* LISTEN 18732/bacula–sd |
만약 데몬 bacula-dir 데몬이 start 후 얼마 있지 않아서 죽거나 9101 포트가 LISTEN 상태가 아니라면 아래와 같이 디버깅을 해본다. 보통 이 문제는 mysql 권한과 관련된 문제일 가능성이 크다.
1 |
$ /usr/sbin/bacula–dir –d 100 –c /etc/bacula/bacula–dir.conf |
3. Bacula Config
Bacula config는 Console, Director, Storage, Client config 가 서로 유기적으로 연결되어있다.
서로의 연관성을 잘 이해하고 설정값을 맞춰져야지만 에러 없이 원하는대로 동작을 하게된다.
아래 그림을 통해 어떤 config 파일들이 서로의 이름과 비밀번호 등이 일치해야 하는지 한 눈에 확인할 수 있다.
3.1. 스토리지 공간
백업된 데이터가 저장될 공간을 할당한다. – 디스크 할당에 대한 자세한 내용은 생략한다.
여기서는 /backup/pool1 으로 설정을 하였다.
1 2 3 4 5 6 |
$ df –kh Filesystem Size Used Avail Use% Mounted on /dev/mapper/vg_baculasystem–lv_root 18G 6.4G 11G 39% / tmpfs 735M 80K 735M 1% /dev/shm /dev/sda1 485M 32M 428M 7% /boot /dev/mapper/vg01–lv01 20G 172M 19G 1% /backup/pool1 |
3.2. bconsole.conf
Console 프로그램의 리소스를 정의하는 설정 파일이다.
bacula를 설치하게 되면 각각의 config 파일의 Password 부분이 임의의 비밀번호로 설정 되어 있다.
그런데 rpm설치 버전의 경우 임의 비밀번호를 그냥 사용하게 되면 데몬 구동시 에러가 발생을 하게 된다.
이 문서에서는 모두 mypass라는 비밀번호로 통일 하였다. 하지만 실제 사용시에는 보안을 위해 storage와 client는 서로 다르게 하고, client 별로도 다르게 정하는걸 권장한다.
1 2 3 4 5 6 7 |
vim /etc/bacula/bconsole.conf Director { Name = bacula–dir DIRport = 9101 address = localhost Password = “mypass” } |
3.3. bat.conf
Bacula Admin Tool(BAT)에 대한 설정이다.
KDE 데스크톱을 통한 GUI Management 유틸리티가 bacula-dir을 액세스하기 위한 설정이다.
1 2 3 4 5 6 |
Director { Name = bacula–dir DIRport = 9101 address = 127.0.0.1 Password = “mypass” } |
3.4. tray-monitor.conf
KDE 데스크톱의 트레이 바에 테이프형태의 아이콘을 띄워주는 유틸리티를 위한 설정
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
Monitor { Name = bacula–mon Password = “mypass” # password for the Directors RefreshInterval = 5 seconds } Client { Name = bacula–fd Address = 127.0.0.1 FDPort = 9102 Password = “mypass” # password for FileDaemon } Storage { Name = bacula–sd Address = 127.0.0.1 SDPort = 9103 Password = “mypass” # password for StorageDaemon } Director { Name = bacula–dir Address = 127.0.0.1 DIRport = 9101 } |
3.5. bacula-dir.conf
Director에 필요한 자원들을 정의할 수 있는 설정 파일로서 bacula-sd.conf, bacula-fd.conf 파일들과 서로 연관성이 있으므로 잘 맞춰서 설정이 되어야 한다.
이 설정 파일이 bacula 의 핵심이다. 이 것을 통해 백업 타겟(Client), 저장 볼륨(Storage), 볼륨 정책 등의 대부분을 하게된다. 즉, Director 데몬이 중요한 역활을 한다. 나머지 데몬들과 설정 파일들은 껍데기에 불과하다.
기본 sample config 파일에는 주석처리된 많은 설명들이 곁들여져 있다. 그 부분을 모두 걷어내고 딱 필요한 설정 부분만 넣었다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 |
Director { Name = bacula–dir DIRport = 9101 QueryFile = “/usr/libexec/bacula/query.sql” WorkingDirectory = “/var/spool/bacula” PidDirectory = “/var/run” Maximum Concurrent Jobs = 1 Password = “mypass” Messages = Daemon } JobDefs { Name = “Test Job” Type = Backup Level = Incremental Client = bacula–Server FileSet = “Test Backup FileSet” Schedule = “WeeklyCycle” Storage = “Server Backup1” Messages = Standard Pool = “Test Data1” Priority = 10 Write Bootstrap = “/var/spool/bacula/%c.bsr” } Job { Name = “BackupClient1” JobDefs = “Test Job” Pool = “Test Data1” Client = “bacula-Server” } # 복구를 위한 job 이다. Job { Name = “RestoreFiles” Type = Restore FileSet = “Test Backup FileSet” Client = “bacula-Server” Pool = “Test Data1” Messages = “Standard” Where = /opt # Path for the restore files } FileSet { Name = “Test Backup FileSet” Include { Options { signature = MD5 compression = GZIP } File = /usr/sbin File = /test } Exclude { File = /.fsck } } Schedule { Name = “WeeklyCycle” Run = Full 1st sun at 23:05 Run = Differential 2nd–5th sun at 23:05 Run = Incremental mon–sat at 23:05 # 테스트이기 때문에 제대로 돌아가는지 빨리 보는게 좋으므로 incremental을 매시간 5분 단위로 설정하여 매 5분마다 백업이 될 수 있도록 하였다. Run = Level=Incremental hourly at 0:00 Run = Level=Incremental hourly at 0:05 Run = Level=Incremental hourly at 0:15 Run = Level=Incremental hourly at 0:20 Run = Level=Incremental hourly at 0:25 Run = Level=Incremental hourly at 0:30 Run = Level=Incremental hourly at 0:35 Run = Level=Incremental hourly at 0:40 Run = Level=Incremental hourly at 0:45 Run = Level=Incremental hourly at 0:50 Run = Level=Incremental hourly at 0:55 } Client { Name = bacula–Server Address = 127.0.0.1 FDPort = 9102 Catalog = MyCatalog Password = “mypass” File Retention = 30 days Job Retention = 6 months AutoPrune = yes } Storage { Name = “Server Backup1” Address = 127.0.0.1 SDPort = 9103 Password = “mypass” Device = FileStorage1 Media Type = File } Catalog { Name = MyCatalog dbname = “bacula”; dbuser = “bacula”; dbpassword = “” } Messages { Name = Standard mailcommand = “/usr/sbin/bsmtp -h localhost -f \”\(Bacula\) \<%r\>\” -s \”Bacu la: %t %e of %c %l\” %r” operatorcommand = “/usr/sbin/bsmtp -h localhost -f \”\(Bacula\) \<%r\>\” -s \” Bacula: Intervention needed for %j\” %r” mail = root@localhost = all, !skipped operator = root@localhost = mount console = all, !skipped, !saved append = “/var/spool/bacula/log” = all, !skipped catalog = all } Messages { Name = Daemon mailcommand = “/usr/sbin/bsmtp -h localhost -f \”\(Bacula\) \<%r\>\” -s \”Bacu la daemon message\” %r” mail = root@localhost = all, !skipped } Pool { Name = “Test Data1” Pool Type = Backup Recycle = yes AutoPrune = yes Volume Retention = 365 days Maximum Volume Bytes = 1000M Maximum Volumes = 100 Storage = “Server Backup1” # 아래 설정을 통해 Volume이 사이즈가 1000Mbyte가 넘어가면 Vol001, Vol002 식의 이름으로 자동생성된다. LabelFormat = “Vol” } Console { Name = bacula–mon Password = “mypass” CommandACL = status, .status } |
3.6. bacura-sd.conf
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
Storage { Name = bacula–sd SDPort = 9103 WorkingDirectory = “/var/spool/bacula” Pid Directory = “/var/run” Maximum Concurrent Jobs = 20 } Director { Name = bacula–dir Password = “mypass” } Director { Name = bacula–mon Password = “mypass” Monitor = yes } Device { Name = FileStorage1 Media Type = File Archive Device = /backup/pool1 LabelMedia = yes; Random Access = Yes; AutomaticMount = yes; RemovableMedia = no; AlwaysOpen = no; } Messages { Name = Standard director = bacula–dir = all } |
3.7. bacula-fd.conf
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
Director { Name = bacula–dir Password = “mypass” } Director { Name = bacula–mon Password = “mypass” Monitor = yes } FileDaemon { Name = bacula–fd FDport = 9102 WorkingDirectory = /var/spool/bacula Pid Directory = /var/run Maximum Concurrent Jobs = 20 FDAddress = 127.0.0.1 } Messages { Name = Standard director = bacula–dir = all, !skipped, !restored } |
4. Bacula-WEB
Bacula-WEB은 Bacula를 웹으로 모니터링하기 위한 별도의 오픈소스 프로젝트로 PHP 기반의 웹 모니터링 툴 이다.
http://www.bacula-web.org/ 사이트를 통해 소스를 다운 받을 수 있다.
4.1. php install
php 코드 해석 및 그래프 등을 웹서버로 표현하기 위해 apache, php, php-gd 등을 설치 한다.
1 |
$ yum –y install php php–gd php–gettext php–mysql php–pdo httpd wget |
4.2. bacula-web 설치
1 2 3 4 5 6 |
$ mkdir /var/www/html/bacula–web $ cd /var/www/html/bacula–web $ wget http://www.bacula-web.org/files/bacula-web.org/downloads/bacula-web-latest.tgz $ tar zxvf bacula–web–latest.tgz $ chmod 700 –R /var/www/html/bacula–web $ chown –R apache.apache /var/www/html/bacula–web |
4.3. config.php 수정
기본 sample config 파일에서 mysql 부분 주석을 제거한다.
1 2 3 4 5 6 7 8 9 10 11 |
$ cd /var/www/html/bacula–web/application/config $ cp config.php.sample config.php $ vim config.php // MySQL bacula catalog $config[0][‘label’] = ‘Backup Server’; $config[0][‘host’] = ‘localhost’; $config[0][‘login’] = ‘root’; $config[0][‘password’] = ”; $config[0][‘db_name’] = ‘bacula’; $config[0][‘db_type’] = ‘mysql’; $config[0][‘db_port’] = ‘3306’; |
4.4. php.ini 수정
bacula-web 화면 중 일부 화면에서 date 함수 호출에서 timezone을 요구하는 경우 해당 설정이 안되어있으면 에러가 발생을 한다.
따라서 아래와 같이 php.ini 파일에 한 줄을 추가한다.
1 2 |
$ vim /etc/php.ini date.timezone = “Asia/Seoul” |
4.5. httpd config 및 시작
1 2 3 4 5 6 7 |
$ vim /etc/httpd/conf.d/bacula–web.conf ServerName Bacula–web <Directory /var/www/html/bacula–web> AllowOverride All </Directory> $ /etc/init.d/httpd start |
httpd (을)를 시작 중: httpd: apr_sockaddr_info_get() failed for Bacula-system
–> 이 메시지가 나오면 bacula-web.conf 또는 httpd.confdp ServerName을 지정해 주지 않아서 그렇다.
4.6. bacula-web 접속
웹 브라우져에 http://서버IP/bacula-web 을 입력하면 아래와 같은 화면이 출력된다.
현재 상황을 표와 그래프로 한눈에 알아보기 쉽게 레포트 해주며 그래프 등을 클릭하면 자세한 내역이 출력된다.
5. Bacula running
5.1. 데몬 재시작
변경된 설정 파일이 적용되도록 데몬을 재시작한다.
1 2 3 |
$ /etc/init.d/bacula–dir restart $ /etc/init.d/bacula–sd restart $ /etc/init.d/bacula–fd restart |
5.2. BAT 실행
KDE 데스크톱에서 BAT를 실행하여 Job 상황을 보거나 각종 설정을 한다.
또한 웹브라우져를 통해 Bacula-Web을 띄워 백업 현황을 살펴볼 수 있다.
아래 그림을 클릭하면 그림별로 상황 설명이 있으니 참고하도록 한다.
이상으로 bacula open source 버전에 대한 설명을 마친다. 다음 bacula 포스팅에선 bacula를 소스로 컴파일 설치하고 Director & File, Catagory 데몬용 서버, Storage 데몬 서버, 다수의 Client 를 각각 구분하여 구성하는 방법에 대해 알아보겠다.