설치를 해보자. Bacula의 설치는 무척이나 간단하다. 먼저, 어떤 머신을 디렉터로 쓰고 어떤 머신을 스토리지로 쓸건지 정해야할텐데 설마 이 글을 보면서 현 업무에 바로 적용하실 분은 없을거라 가정하고, 일단 Bacula의 클라이언트가 될 머신들부터 설치를 하자. 글쓴이는 매뉴얼을 써야하므로 쉬운 이해를 위해 총 4대의 가상 컴퓨터를 운영한다고 들어가기편에서 미리 언급했다. 자세한 사항을 나열해본다. 참고로, 모든 가상머신용 운영체제는 우분투 12.04 64비트를 사용했으며, 루트 파티션으로는 8기가를, 램은 1기가를 할당했다.

상황을 가정해보자. 데스크탑 1, 웹서버 1, MySQL DB서버 1, FTP 서버 1. 총 4대의 머신이 있다. 다음의 조건을 정하도록 한다.

1. 4대 모두 백업되어야한다.
2. FTP 서버가 그나마 스토리지의 용량이 가장 커야할테니, FTP 서버를 스토리지 데몬으로 운영하도록 한다. 루트파티션용 하드디스크 외에 별도로 2개의 20기가짜리 가상 하드디스크를 더 붙인다.
3. 본 매뉴얼에서는 스토리지 데몬과 디렉터 데몬을 각기 다른 서버에 나눠서 운영하는 것으로 정했다. 현실적으로는 CPU의 부하가 덜한 FTP 서버에서 디렉터 데몬도 함께 돌려야겠지만, 여기서는 DB 설정의 편의상, DB서버에서 디렉터 데몬을 운영하게 한다. 디렉터 데몬용 가상머신을 한 대 더 올리려니 실습치고는 너무 복잡해보여서 수정했다.
4. Bacula 백업을 위한 DB는 꼭 하나만 돌아갈 필요는 없다. 하지만 역시 마찬가지로 설정의 편의상 하나만 돌리며, 백업 규모가 수천대가 아니라면 하나로도 충분하다고 판단된다. 그리고 DB는 보안상, 그리고 성능상 실제 현업에서 운영 중인 DB 서버와는 별개로 운영하는 것이 맞겠지만, 경험상 디렉터 데몬과 디렉터 데몬이 사용할 DB가 서로 다른 곳에 있으면 성능상 좋지않았다. 또한 위에 적은 이유도 있고해서, DB는 디렉터 데몬이 설치될 곳에 설치한다.
5. 호스트명은 각각 desktop, webserver, dbserver 그리고 ftp라고 정한다.

정리해보자.
DB Server – 디렉터 데몬, 파일 데몬, MySQL 데이터베이스 서버
FTP Server – 파일 데몬, 스토리지 데몬, vsFTPd, 하드디스크 2개 추가
Web Server – 파일 데몬, Apache2
Desktop – 파일 데몬, 그외 데스크탑용 어플리케이션들

나중에 fstab을 설정하는게 귀찮으신 분들께서는, FTP 머신 설정하기 전에 하드디스크 2개를 더 붙이고 이것들을 설치 과정에서 파티션을 생성하고 ext4로 포맷한뒤, 각각 /mnt/backup-1 그리고 /mnt/backup-2로 마운트 포인트를 주도록 하자.

일단 가장 쉬운 “클라이언트”부터 설치해보자. 서버-클라이언트의 개념으로 놓고보자면, 클라이언트의 역할을 하는 데몬은 파일데몬이다. 클라이언트용으로 필요한 패키지는 딱 2개이며, bacula-commonbacula-fd 이다. 설치는 아시다시피 뻔하다. sudo apt-get install bacula-fd 이것만 쳐주면 bacula-common은 알아서 딸려온다. 위의 조건 #1에서, “4대 모두 백업되어야한다”고 했으니, 파일데몬 설치 명령어는 4대 모두 실시해야한다. 즉, 위의 설명대로 FTP 서버는 스토리지 데몬과 파일 데몬이 같이 돌아가는 것이고, DB서버는 디렉터 데몬과 파일데몬이 같이 돌아가게 되는 것이다.

용량이 크지않기 때문에 설치는 금방 끝난다. 설치가 끝났으면, 아무 가상머신에서 /etc/bacula/bacula-fd.conf 파일을 열어보도록 하자. 루트권한이 필요하다. 주석을 제외한 핵심만 보도록 하자. 글쓴이는 데스크탑에서 작업해보도록 한다.

Director {
  Name = desktop-dir 
  Password = "39oawhr8gQpsSDq3948tWwe4SdlED12LZ12" 
}

Director {
  Name = desktop-mon
  Password = "Jd904Kddfjw3932djv4Ldvn4234I3damz" 
  Monitor = yes
} 

FileDaemon {
  Name = desktop-fd
  FDport = 9102
  WorkingDirectory = /var/lib/bacula
  Pid Directory = /var/run/bacula
  Maximum Concurrent Jobs = 20
  FDAddress = 127.0.0.1
}

Messages {
  Name = Standard
  Director = desktop-dir = all, !skipped, !restored
}

이번에는 이걸 그림으로 표현한 것을 보자.

이 매뉴얼을 보시는 분들이라면 현업에서 이미 시스템 관리자로 일하시는 분들이 대부분일거라 짐작되며, 그렇지 않은 분들이라도 리눅스 쓰는데 익숙하신 분들이라면 위의 설정은 딱 보면 아마 다들 한 번에 이해하실 거다. 참고로, 동시에 백업 가능하도록 허용된 최대 백업은 20이라고 지정되어있다. 아마 이 옵션 필요하신 분들이 많을 것으로 생각한다.

일단 항목별 설명부터 드린다.
첫번째 Director 섹션은, desktop-dir 이라고 되어있는데, 이 부분은 디렉터 데몬이 파일 데몬에게 접속을 요청할 때 패스워드를 인증하는 부분이다. 따라서, 디렉터 데몬을 위한 부분이다.
두번째 섹션은, 자세히 보면 뒤에 -mon 이라는 글자가 붙어있는데, 예상하시는대로 모니터링용 섹션이다. 이 부분은 나중에 따로 설명드린다. 참고로 *거의* 사용하지 않는다. 하지만, 규모가 거대한 곳이라면 필요할 수도 있다.
세번째 섹션은 파일 데몬이 작동하는 부분이다.
마지막 네번째 Messages 섹션은 작업메시지를 처리하는 부분이다. 한 번만 설정하면 다시는 건드릴 일이 없다.

여기서 우리가 건드려야할 부분은 딱 2개다. 정말이다. 파일데몬 설정은 건드릴게 아예 없다고 봐도 될 정도다. 건드려야할 2개 중 하나는 디렉터 데몬의 이름인데, 데스크탑의 호스트명은 desktop이라고 하기로했고 따라서 자동으로 호스트명-dir이 붙은 것뿐이다. desktop-dir을 본 매뉴얼에서 쓰기로 정한 디렉터 데몬 이름으로 바꿔주기만 하면 된다. 이 매뉴얼에서의 디렉터 데몬은 DB서버에 설치하기로 했고, DB서버의 이름은 위에서 편의상 dbserver라고 하기로 했다. 따라서, desktop-dir이라고 되어있는 이름을 dbserver-dir로 바꿔주고 저장한 다음, 파일데몬을 재시작해주자. 참고로, 이름은 중요하다. Bacula는 모든 객체를 이름으로 구분한다. bacula-fd.conf에 들어가는 디렉터 데몬의 이름과, 실제 디렉터 데몬의 이름은 반드시 같아야한다 (디렉터 데몬 부분에서 다시 설명드린다). 물론, 디렉터 데몬이나 파일데몬의 이름이 꼭 호스트명으로 이루어져야하는건 아니라는 점을 알아두자. 나머지 다른 하나는 FDAddress = 127.0.0.1이라는 디폴트값을 loopback이 아닌 FQDN이나 eth0 등의 실제 내/외부에서 지정된 IP 주소나 호스트명을 넣도록 한다.

$ sudo service bacula-fd restart

가상머신 4대 전부 위에서 했던 것들을 똑같이 해주되, Password는 변경 후 꼭 기억하고 있자. 나중에 해깔린다. 앞서 설명했듯 저 패스워드는 디렉터 데몬이 파일데몬과 통신하기 위한 인증암호인데, 파일데몬의 패스워드와 똑같은 패스워드를 디렉터 데몬이 갖고있어야 접속할 수 있다. 다시 말하자면, 디렉터 데몬은 자신이 접속할 클라이언트의 비번을 알아야 접속을 한다는 것이다. 정말 간단하지 않은가? 클라이언트는 이것으로 더 이상 손댈 게 없다. 한 가지 더 추가한다면, sudo netstat -ltnp를 입력해서 해당 포트가 해당 데몬에 의해 제대로 열려있는지 확인하는 정도는 해볼 수 있겠다.

$ sudo netstat -ltnp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address     Foreign Address State      PID/Program name
tcp   0      0      127.0.0.1:9102    0.0.0.0:*       LISTEN     4760/bacula-fd
tcp   0      0      127.0.0.1:53      0.0.0.0:*       LISTEN     4980/dnsmasq
tcp   0      0      127.0.0.1:631     0.0.0.0:*       LISTEN     4980/cupsd

제대로 동작하고 있다. 그럼 이쯤에서 수정이 완료된 bacula-fd.conf 파일을 보자. 보시면 아시겠지만, Name이랑 FDAddress 빼고는 바뀐게 없다.

Director {
  Name = dbserver-dir 
  Password = "desktop" 
}

Director {
  Name = desktop-mon
  Password = "Jd904Kddfjw3932djv4Ldvn4234I3damz" 
  Monitor = yes
} 

FileDaemon {
  Name = desktop-fd
  FDport = 9102
  WorkingDirectory = /var/lib/bacula
  Pid Directory = /var/run/bacula
  Maximum Concurrent Jobs = 20
  FDAddress = 10.211.55.32
}

Messages {
  Name = Standard
  Director = dbserver-dir = all, !skipped, !restored
}

참고로 패스워드에 대한 추가설명을 해드리자면, 패스워드는 설치시 자동으로 생성되지만 특별한 규칙은 없다고 공식 매뉴얼에 기술되어있다. 따라서, 별도의 원하는 패스워드가 있으면 그것을 써도 무방하겠다.

이제 스토리지 데몬을 보자. 스토리지 데몬은 FTP 머신에 설치하기로 했으므로, FTP 머신으로 옮겨서 작업을 진행한다. 스토리지 데몬의 설치는 bacula-sd-mysql만 하면 된다. 파일데몬 설치하는 것만큼이나 쉽다.

$ sudo apt-get install bacula-fd bacula-sd-mysql

그림부터 보자.

파일데몬과 다른건 Device 섹션이 더 추가된 것 뿐이다.

예상하시는대로 설정파일은 /etc/bacula/bacula-sd.conf이며, 마찬가지로 루트권한이 필요하다. 기본적인 구조도 파일데몬과 거의 비슷한데, 먼저 디렉터 데몬의 이름과 패스워드를 위한 섹션, 모니터 섹션, 스토리지 데몬을 위한 섹션 (그래봐야 포트 번호랑 데몬 이름 말고는 다를 것도 없다), 그리고 각각의 저장장치에 대한 설정이 전부다. 데몬 설치 후 설정파일 열면 디렉터 데몬 이름 바꿔주는 거랑 저장장치 추가하는 거 외에는 특별히 할 일이 없다. 설정파일을 보자. 일단은 설명을 위해 설치하자마자 바로 생성된 파일을 수정없이 올린다. 마찬가지로 주석처리된 부분은 제외한다.

Storage {
  Name = ftp-sd
  SDPort = 9103
  WorkingDirectory = "/var/lib/bacula"
  Pid Directory = "/var/run/bacula"
  Maximum Concurrent Jobs = 20
  SDAddress = 127.0.0.1
} 

Director {
  Name = ftp-dir 
  Password = "29q48hfaFiuhfGq234908aHer" 
}

Director {
  Name = ftp-mon
  Password = "2309IOdf23D302jlsdfawerfcdf"
  Monitor = yes
}

Device {
  Name = FileStorage
  Media Type = File
  Archive Device = /nonexistant/path/to/file/archive/dir
  LabelMedia = yes;
  Random Access = Yes;
  AutomaticMount = yes;
  RemovableMedia = no;
  AlwaysOpen = no;
}

…….. (생략)


Messages {
  Name = Standard
  director = ftp-dir = all
}

여기서 실제 파일의 Messages 섹션 위의 주석처리된 부분을 보면, 테이프 장치 및 여러가지 저장장치에 대한 옵션의 예제들이 주석처리되어있다. 자세히 보면 auto-changer도 보이고, Bacula에서 제공하는 mtx-changer 명령어도 보인다.

첫번째로 할 일은 아마 다들 예상하시겠지만, 디렉터 데몬의 이름을 바꿔주는 거다. 위에서 언급했듯, 디렉터 데몬의 이름은 dbserver-dir이 될 예정이므로 ftp-dir이라고 적혀있는 부분을 dbserver-dir로 변경해주자. 두번째로는 SDAddress 항목에서 마찬가지로 loopback으로 두면 안되고, 내부 네트워크에서 사용하는 FQDN이 있으면 그것을 넣어주거나 아니면 IP Address를 지정해주자. 여기서는 10.211.55.34라는 주소를 사용한다.

세번째이자 마지막으로 할 일은 저장장치를 추가해주는 것이다. 테이프 백업장치가 없으신 분들이라면 아마 간단하게 끝내실 수 있을 것 같다. 일단 본 매뉴얼에서는 가상머신을 이용하기로 했고, 가상 테이프 백업장치를 이용한 설명은 추후 고급편에서 설명하도록 하겠다. 따라서, 10GB 용량의 하드디스크 2개를 더 생성해서 이것을 붙이도록 한다. FTP용 가상머신에 설치하기로 했으므로, 가상머신을 옮겨서 설치하도록 한다. 편의상 이 둘을 각각 /mnt/backup-1, 그리고 /mnt/backup-2에 마운트 하고, 부팅시마다 자동으로 마운트하는 것으로 fstab을 수정해놨다고 가정한다 (아니면 설치시 미리 되어있거나). 일단 본 매뉴얼에서는 하드디스크를 이용한 백업만 하기로 결정했지만, 테이프 백업장치를 설정한다고 해도 제대로 구성되어진 설정이 주석처리되어있으므로 그것들의 주석만 풀어서 그냥 그대로 써도 된다 (이름 제외하고는 수정할 필요가 없다).

만약 스토리지 데몬 자체의 이름을 따로 사용하고 싶으신 분은 Name 항목을 모두 바꿔주시면 되겠다. 주의사항은, ftp-sd를 FTPStorage-sd라고 바꾼다면, 모니터링 항목의 ftp-mon 역시 반드시 FTPStorage-mon 이라고 변경되어야하며, 스토리지 섹션에는 이름 뒤에 반드시 -sd가 붙어야하며, 모니터링 항목에는 반드시 뒤에 -mon이 붙어야하고, 마지막으로 이름에는 공란이 들어갈 경우 반드시 쌍따옴표로 묶어줘야한다. 하지만, 사실 이름은 전혀 중요하지 않다. 나중에 클라이언트들을 식별하기 위한 이름은 클라이언트가 아닌 디렉터 데몬에서 설정하기 때문이다. 따라서, 이름은 그냥 냅두도록 하자.

하드디스크 백업장치의 지정은, 장치명을 지정해주는 것이 아니라 마운트 포인트를 지정해주는 것이라 상당히 편리하다. 한 하드디스크 내에서도 공간을 원하는대로 나눠서 쓸 수 있다는 장점이 되겠다.

그외, 동시에 여러개의 백업 작업이 실행되는 관계로 이것에 대한 속도저하 내지는 한 번에 실행되는 백업의 숫자를 제한하고 싶을 때 Maximum Concurrent Job 항목의 숫자를 조절해주면 된다. 이제 이쯤에서 완성된 bacula-sd.conf 파일을 보도록 하자. 잘 보면 Device 섹션 2개가 새로 추가됐다.

Storage {
  Name = ftp-sd
  SDPort = 9103
  WorkingDirectory = "/var/lib/bacula"
  Pid Directory = "/var/run/bacula"
  Maximum Concurrent Jobs = 20
  SDAddress = 10.211.55.34
} 

Director {
  Name = dbserver-dir 
  Password = "ftpserver" 
}

Director {
  Name = ftp-mon
  Password = "2309IOdf23D302jlsdfawerfcdf"
  Monitor = yes
}

Device {
  Name = FileStorage-1
  Media Type = File
  Archive Device = /mnt/backup-1/bacula
  LabelMedia = yes;
  Random Access = Yes;
  AutomaticMount = yes;
  RemovableMedia = no;
  AlwaysOpen = no;
}

Device {
  Name = FileStorage-2
  Media Type = File
  Archive Device = /mnt/backup-2/bacula
  LabelMedia = yes;
  Random Access = Yes;
  AutomaticMount = yes;
  RemovableMedia = no;
  AlwaysOpen = no;
}


Messages {
  Name = Standard
  director = dbserver-dir = all
} 

참고로 테이프 백업 장치를 위한 항목을 올려드린다. 글쓴이의 사무실에서 사용하는 LTO-5 테잎 장치다.

Device {
  Name = Neo-200s
  Media Type = LTO-5
  Archive Device = /dev/nst0
  AutomaticMount = yes
  AlwaysOpen = yes
  RemovableMedia = yes
  RandomAccess = no
  Changer Command = "/etc/bacula/scripts/mtx-changer %c %o %S %a %d"
  Changer Device = /dev/sg2
  AutoChanger = yes
  Alert Command = "sh -c 'smartctl -H -l error %c'"  
}

테이프 장치와 하드디스크의 차이점은, 일단 RemovableMedia, RandomAccess, Commands가 제공된다는점, 그리고 마운트 포인트가 아닌 장치명을 사용한다는 점이 되겠다. 사실, Changer commandAlert Command 등의 Commands는 Bacula에서 이미 다 제공된다.

추가된 2개의 하드디스크를 위한 장치 섹션을 살펴보자.
Name = FileStorage-1: 장치의 이름을 정한다. 이 이름은 디렉터 데몬에서 반드시 매치되어야한다. 디렉터 데몬에서 다시 설명한다.
Media Type = File: 미디어의 타입은 두가지 뿐이다. 파일, 아니면 테이프(LTO-1, LTO-2, LTO-3, LTO-4, LTO-5)
Archive Device = /mnt/backup-1/bacula: 백업되는 파일이 저장될 곳을 의미한다. 여기서 우리는 추가 하드디스크를 지정한다.
LabelMedia = yes;: 미디어에 레이블을 한다. 보통은 테이프 장치에서 테이프의 레이블을 자동으로 인식한다. 하드디스크에 적용하면 자동으로 장치명을 레이블해준다. 세미콜론은 디폴트로 붙어나오는데, 매뉴얼에는 설명이 없다.
Random Access = Yes; 하드디스크일 경우는 yes이며, 테이프 장치는 no로 정한다.
AutomaticMount = yes; 백업작업마다 저장되는 장치가 다를 경우, Bacula가 자동으로 장치를 마운트 해준다 (테이프도 가능).
RemovableMedia = no; 제거 가능한 장치인지 지정해준다. 하드디스크라면 당연히 No다.
AlwaysOpen = no; 하드디스크라면 당연히 No이고, 테이프라면 yes를 줘도 된다.

다 됐으면 백업될 파일들(볼륨)이 저장되는 디렉토리를 생성하고 소유권을 변경해준다.

$ sudo mkdir /mnt/backup-1/bacula /mnt/backup-2/bacula
$ sudo chown bacula:bacula /mnt/backup-1/bacula /mnt/backup-2/bacula 

스토리지 데몬을 재시작해주자.

$ sudo service bacula-sd restart

솔직히 말해서 하나도 어려운 게 없다. 만약 뭐가 뭔지 모르시겠다면, 지금껏 대충 읽으신 거다. 차근차근 직접 따라하면서 하시면 상당히 쉽다는 것을 알 수 있을 거라고 확신한다. 본인도 역시, 처음에는 뭐가 뭔지 몰라서 해깔렸는데, 조금만 파보니까 눈에 쉽게 들어오더라.

이제 가장 중요하고 복잡한 디렉터 데몬을 설정해보자. 내용이 조금 해깔릴 수 있으며 설정이 아주 길다.