설치를 해보자.  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-common과 bacula-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 파일을 보도록 하자.  마찬가지로 변경되거나 추가된 항목은 붉은 색으로 표시했다.

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 command와 Alert 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

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

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

블로그 이미지

jswlinux

Seowon Jung의 잡동사니 보관소

,

이번 편에서는 Bacula가 어떠한 방법으로 백업을 하는지, 그 방법에 대한 개념을 잡아보도록 한다.  Bacula는 다소 특이한 방식으로 작동하는데, 처음 보면 뭐가뭔지 이해가 잘 안가고, 언뜻 보면 상당히 복잡해보이기 때문이다.  bacula.org에는 이해를 돕기위한 그림이 몇 개 있지만 사실 이게 본인 입장에서는 더 해깔린다.  별것도 아닌건데 어렵게 설명하는 느낌이랄까.

Bacula는 3개의 서비스 데몬과 카탈로그라고 하는 하나의 DB로 구성된다.  결국 총 4개의 서비스 데몬이 필요한 셈인데, 이 4개의 서비스 데몬은 얼마든지 확장이 가능하다.  그렇다면, DB를 제외한 나머지 3개의 서비스 데몬에 대해서 보자.

1.  Director Daemon - 클라이언트들과 통신을 한다.  백업 및 복원명령을 직접 제어하며, 공식적으로 하나의 디렉터 데몬은 총 1천여대 정도의 클라이언트를 제어할 수 있다.  포트번호는 9101을 사용한다.
2.  File Daemon - Director Daemon으로부터 백업 명령이 들어왔을시, 어떤 파일들을 백업해야하는지 대상 목록을 뽑아낸뒤 해당 파일들을 전송한다.  포트번호는 9102을 사용한다.
3.  Storage Daemon - Director Daemon으로부터 백업 명령이 들어왔을시, 파일데몬과 직접 접속하여 파일들이 저장되어야할 백업 장치를 제공하고, 파일을 실제로 저장하는 역할을 수행한다.  포트번호는 9103을 사용한다.

조금 이해가 되실거다.  디렉터 데몬은 하나만 있으면 되지만 규모가 많거나, 혹은 특정한 목적에 의해 서버별로 백업을 나눠서 해야하는 경우라면 디렉터 데몬은 여러 개를 두면 된다.  결국 명령은 디렉터가 내리는 것이므로, 두개의 디렉터에서 하나의 클라이언트에 백업명령을 두번 세번 내리는 것도 가능하다는 얘기다.  물론 그렇게 쓸 일은 없겠지만.

파일데몬의 경우, 대부분의 머신에 설치되는 클라이언트인데, 설정 자체는 아예 손댈 일이 없을 정도로 간단하게 돌아간다.  메모리에 상주해있기만하면 디렉터 데몬에 의해서 알아서 동작하기 때문에 신경쓸 일은 전혀 없다고 봐도 무방하다.  실제로 대부분의 에러는 디렉터 데몬이 돌아가는 서버에서 발생하지, 파일데몬이 설치되어있는 클라이언트에서는 거의 생기지 않는다.

스토리지 데몬은, 머신에 어떤 저장장치가 연결되어있는지를 정의해놓으면 작업별로 특정 장치를 지정할 수 있다.  예를 들어서, 사용자의 FTP 디렉토리는 LTO-5로 백업하고, /etc 디렉토리는 하드디스크에 저장하는 형태도 가능하다.  따라서, 스토리지만 정의해놓으면 디렉터 데몬이 설정대로 파일을 백업해준다.  서버의 규모가 작은 곳이라면, 하나의 머신에 모든 저장장치를 전부 연결하고 디렉터와 스토리지 데몬을 한 서버에서 돌리는 식으로 하면 되겠다.  글쓴이가 일하는 곳에서는 디렉터 데몬은 오픈스택의 한 가상머신에서, 스토리지 데몬은 LTO-5 장치를 연결한 서버에서 운영한다.  그외 모든 물리적인 서버와 오픈스택 가상머신들에 파일데몬을 설치하여 백업 중에 있다.  Bacula가 사용하는 CPU 점유율은 무척 낮기 때문에 가상머신에서 돌려도 거의 문제가 없다.

그러면 이제 bacula.org에서 제공하는 그림을 보자.

 

이제 위의 그림이 쉽게 이해 가실거다.  다만 Admin Workstation이 2대가 보이는 부분은, 관리자의 개인 컴퓨터에서 디렉터 데몬을 통한 모니터링이 가능하다는 것을 보여주는 그림인데, 실제로 3줄짜리 설정파일만 있으면 모니터링이 가능하다.  따라서, 관리자가 여러 명인 상황에서도 각각 자기들의 컴퓨터를 통해서 모니터링이 가능한 것이다.

그러면, 왜 데이터베이스가 필요한지 설명을 할 차례가 왔다.  Bacula에는 "카탈로그"라고 하는 일종의 백엔드 서비스가 있는데, 백업되는 파일들의 인덱싱을 한다고 보면 이해가 쉬우실 거다.  즉, 파일 관리의 수월함과 빠른 복원을 위해 백업시마다 파일들에 대한 목록을 DB에 넣어서 관리를 하게되며, 공식적으로 MySQL, PostgreSQL, 그리고 SQLite를 지원한다.  물론, DB가 손상됐을 때를 대비해서 수동으로 복원할 수 있는 방법 역시 제공되는 CLI 툴을 통해 가능하다.  공식적으로는 PostgreSQL을 권장하며, 실제 기업업무용으로 SQLite는 권장하지 않는다.

여기서 어떤 분들은 아마 "어차피 백업된 경로 들어가서 ls 치면 파일목록 다 나올텐데 뭐하러 DB를 쓰는가" 라고 의문점이 생기실텐데, Bacula는 파일의 목록을 DB에 넣고, 실제 파일들은 압축하거나 아니면 그냥 하나의 파일로 묶어서 보관한다.  쉽게 생각해서 tar 명령어처럼 하나의 파일을 만들어서 여기에 몽땅 넣어버리는데, 물론 여기에도 다양한 옵션이 있다.  용어가 해깔릴 수 있으므로, 백업되는 파일들을 몰아넣는 파일을 "볼륨"이라고 부르도록 하자.

1.  볼륨의 용량을 제한할 수 있다.  예를 들어 볼륨 하나당 10기가로 지정해두고 백업을 진행하다 10기가가 넘어가게 되면 또 다른 볼륨을 생성한다.
2.  생성되는 볼륨의 갯수를 제한할 수 있다.
3.  특정 백업분을 삭제할 경우, 사용자는 몇개의 볼륨이 존재하는지, 어떤 파일이 어떤 볼륨에 있는지 상관하지 않아도 된다.  따라서, 목적별로 스토리지를 운영ㅇ할 수 있다.
4.  특정 볼륨에서 특정 백업분만 삭제할 수 있다.
5.  볼륨에 auto-prune을 지원한다. 
6.  백업되는 파일들의 유지기간 (Retention) 지정이 가능하며, 기일이 지난 백업분은 Bacula가 알아서 삭제해준다.
7.  특정 백업분을 특정 볼륨에 지정하는 것이 가능하다.  예를 들어, Incremental은 볼륨 AAA, Differential은 볼륨 BBB, Full은 CCC 이런 식으로.
8.  따라서, 백업에 쓸 수 있는 스토리지의 용량이 한정되어있어서 이것을 매번 신경써줘야하는 관리자라면, 이 문제에서 해방될 수 있다. 

Bacula의 공식문서에 의하면, 데이터를 저장하는 방식인 Pool이니 Volume이니 하는 것들은 사실상 테이프 백업 장치의 개념을 하드디스크 백업에 적용시키는 거라고 한다.  또한, 하나의 파일로 묶어서 보관한다는게 뭐하러 그렇게 하는건지 다소 이해가 가지않을 수도 있지만, 서버의 보안이 뚫렸거나 관리자가 아닌 유저가 접속해서 백업데이터에 접근하더라도 데이터 자체가 하나 혹은 몇개의 파일에 전부 모아져있기 때문에 내용을 볼 수 없다는 장점이 있다.  따라서, 하나의 파일로 묶는건 보안상 그렇다고 이해하면 되겠다.

스토리지 서버가 다른 곳에 있기 때문에, 재해복구나 Bare Metal Recovery도 가능하다.  평소 서버들을 백업할 때 시스템 전체 (/)를 백업해뒀다면, 나중에 우분투 라이브 씨디 등으로 부팅한뒤 네트워크를 설정해주고 파일데몬을 설치해서 CLI 툴로 복원해주면 되는 것이다.

 

이것으로 Bacula의 백업 프로세스에 대해서 알아봤다.  복잡해보이지만, 알고보면 무쟈게 간단하다.  정리를 해보자.

1.  Bacula는 3가지 서비스 데몬과 데이터베이스로 구성된다.
2.  디렉터 데몬은 일종의 관제탑으로서, 백업/복원/모니터 등등의 모든 작업에 대한 통솔을 한다.
3.  파일 데몬은 어떤 파일이 백업되어야하는지를 목록을 뽑아낸다.
4.  스토리지 데몬은 디렉터 데몬의 백업 및 복원 명령에 의해 저장장치를 제공하고, 데이터를 읽고쓴다.
5.  디렉터 데몬은 백업되는 파일들의 목록과 모든 상황을 데이터베이스에 기록한다.
6.  백업되는 파일들은 볼륨이라는 몇개의 거대한 파일이나 테이프에 기록된다.

다음 편에는 Bacula의 서비스 데몬들을 설치해보도록 한다.

블로그 이미지

jswlinux

Seowon Jung의 잡동사니 보관소

,

또 다른 매뉴얼 작성을 시작한다.  Bacula 라고하는 엔터프라이즈급 오픈소스 네트워크 백업 솔루션이다.  엔터프라이즈 라는 단어에서 오는 의미를 봐서, 개인용은 아니라는 것이 짐작되실 거다.  물론 개인용으로 써도 된다.  전혀 문제없다.

이걸 처음 써보고서는 오픈소스에 이 정도 성능의 솔루션이 한국에서 널리 알려지지 않은 것이 안타까워서, 본인 스스로가 이걸 좀 알려야겠다고 마음을 먹게되었다.  또한, 나는 Bacula Systems에서 주관하는 공인 교육인 Bacula Systems Administrator I과 II 교육을 모두 수료하여 Certified Backup Admin 인증서를 받았다.

한 가지 덧붙이자면, 본 매뉴얼은 Bacula Systems의 경영진 및 직원들에게 작성을 통보했었고, 사실 그들도 어느정도 관심있게 지켜보고 있다.  언어적인 문제일 수도 있겠지만, Bacula가 독일을 비롯한 유럽과 서양에서는 상당히 인기있는 반면 아시아에서는 언급은 커녕 이런게 있는지도 모르는 경우가 태반이기 때문이다.  이 매뉴얼을 시작으로 한국의 IT 시장에도 Bacula가 어느 정도 알려지길 바라는 기대가 어느정도 있어보인다.

본 매뉴얼을 시작하게 된 계기는, 이렇게 훌륭한, 그것도 오픈소스 솔루션을 모르는 분들이 생각보다 너무 많아서였다.  Bacula는 한 번도 들어본 적이 없었지만 처음 접하고나서는 완전히 반해버렸다.  너무나도 훌륭하고 이걸 집이건 어디건 내가 관리하는 컴퓨터라면 전부 이걸로 갈아엎고 싶을 정도다.  내가 일하는 곳이 미국이라서 오픈소스를 접하기가 쉽긴 하지만, 주립대학이 주정부기관의 한 부서이다보니 아무래도 비용을 최대한 줄일 수 있는 오픈소스만 고집하는 것이 진짜 오픈소스 솔루션을 쉽게 접할 수 있는 이유가 아닐까 싶다.

Big Blue Button이라고 하는 너무나도 훌륭한 영상/음성지원 실시간 프레젠테이션 솔루션에 대해서도 잠깐 언급을 해드린다.  정말 이것이 과연 오픈소스인가 할 정도로 좋고, 게다가 상당수의 교직원들이 우분투 리눅스를 사용하는 본인의 직장환경에서도 모든 기능이 100% 작동되었다.  윈도우, 리눅스, 그리고 맥까지 모두 작동되는 이런 훌륭한 오픈소스 프로그램들이 많은데, 이런 것들을 알지 못해서 못쓰는 상황이 많이 안타깝다.

이 매뉴얼에서 곧 다룰 Bacula라고 하는 백업 솔루션도 마찬가지로, 오픈소스이며 너무나도 잘 만들어져있고, 쉽고, 간편하다.  해외에서는 이미 커뮤니티 버전에 대한 유저들의 참여가 활발하며, Bacula를 만든 Bacula Systems의 CTO인 Kern Sibbald가 직접 메일링 리스트의 답변을 주기도 한다.  공식적으로 리눅스, 윈도우, 맥, 그리고 여러 유닉스를 지원하며, 그외 잘 쓰이지 않는 유닉스 유저의 경우는 소스가 오픈되어있기 때문에 소스를 가져다 설치하면 된다.  공식적으로 지원되는 클라이언트용 플랫폼으로는 리눅스, 솔라리스, Free/Net/OpenBSD, 윈도우, 맥, HP-UX, Tru64, Irix가 되겠다.  특히나 백업이라는 행위가, 모든 장소에 똑같은 방식이 적용하는 것이 불가능한 아주 다양한 상황에 대한 요구가 필요한 것인데 Bacula는 이런 요구를 모두 처리할 수 있는 기능을 갖추고 있다.

또한 Bacula는, "오픈소스로 돈을 버는" 한국에서는 다소 성공하기 어려운 형태의 비지니스 모델을 이뤄냈는데,
1. 오픈소스 솔루션을 개발해서 배포한다.
2. 유료로만 지원되는 플러그인 및 모듈, 기술지원, 그리고 전문교육
을 판매하는 형태로, Bacula Systems라고하는 회사가 별도로 존재한다.  따라서, bacula.org는 오픈소스의 커뮤니티 버전을, baculasystems.com 이라고 하는 엔터프라이즈 레벨의 상품을 판매하는 것이다.  Bacula는 2000년 1월에 처음 개발이 시작되어, 2002년 4월에서야 소스포지에 첫 버전이 올라왔고, 유료버전은 짝수이며 현재 버전 6까지 나와있다.

Bacula의 특징으로는 다음과 같다.

1.  쉬운 설치 및 쉬운 설정
2.  다양한 백업 장치 지원 (하드디스크, LTO 1-5 테이프 장치 등등)
3.  다양한 모니터링툴 지원
4.  증분, 차등, 차등 증분, 변경분, 가상백업, 백업 주기, 압축, 프로토콜 등 다양한 백업방식 지원
5.  원하는 경로 설정 및 백업 전후 실시할 명령어 지정 가능 
6.  네트워크로 백업되는 데이터의 암호화를 위한 다양한 옵션 (MD5, SHA, TLS, CRAM-MD5 등등)
7.  압축 

글쓴이가 근무하는 서버실 서버 중 대략 60대를 Bacula로 백업하고있는데, 사실 옵션이 아무리 많아도 쓰는건 한정되어있기 마련이다.  따라서, 본인의 상사께서 정해준 규정과 옵션으로만 운영하는 현재, 매일 하루에 한 번씩 이메일로 날라오는 백업 리포트를 읽는 것 외에는 백업에는 아예 신경을 안쓰고 근무할 정도로 편하고 쓰기쉬운 백업 솔루션이라고 말할 수 있다.  또한, 글쓴이의 서버실 규모가 작아서 그렇지, 교육에서 만났던 브라질에서 온 참가자의 경우는 1천대 가량 규모의 백업을 Bacula로 하고있다고 했다.  다른 참석자 중에서는 NASA에서 근무하는 System Admin도 있었다.

본 매뉴얼을 따라하기 위한 조건으로, 아래의 환경처럼 구성하고자 한다.  반드시 맞춰야할 필요는 없지만, "네트워크 백업 솔루션"인만큼 최소 2대의 컴퓨터가 있어야겠다.  다만, 반드시 필수적인 조건으로는, 본 매뉴얼을 따라하고자하는 분께서는 반드시 리눅스 터미널과 명령어 사용에 익숙해야하고, 네트워크에 대한 최소한의 개념은 이해하고 있어야한다는 점이다.  본인의 실습 조건이다.

1.  노트북
2.  가상화 프로그램 (Parallels 혹은 VMware)
3.  4대의 가상 컴퓨터
4.  글쓴이는 우분투 한국 로코팀 컨택터이므로, 가상 컴퓨터 4대의 운영체제는 모두 우분투 리눅스로 실시하며, 특별히 한 대는 데스크탑으로 한다.
5.  맥용 클라이언트 설치는 설명에서 제외한다.  일단, MacPorts에서 설치가 가능하고, 설정은 리눅스랑 100% 똑같다.
6.  윈도우용 클라이언트는 부득이하게 제외하기로 한다.  맥용 클라이언트와 마찬가지로, 설정은 리눅스랑 100% 같다.  참고로, 현재 윈도우용은 2012년 6월 28일자 버전인 5.2.10을 끝으로 무료버전은 개발이 중단됐다.  참고로, 최대 9대까지 쓸 수 있는 윈도우용 라이센스는 불과 1년에 $25 밖에 안한다.  1,000대 이상도 그래봐야 $600 밖에 안한다.기업용으로 이 정도 가격은 정말로 껌값이다.  무료 버전의 클라이언트는 현재 개발이 중단됐다는 점을 기억하자.
7.  백업 명령/복원 등의 실습은 CLI로 먼저 시작하고, CLI가 어느정도 익숙해지면 GUI를 진행한다.  사실 GUI를 사용하는 진짜 이유는, Bacula에서 화면에 출력되는 데이터가 횡으로 너무 길어서 CLI로 보면 상당히 불편하다.
8.  다양한 환경과 상황에서의 실습은 차후에 보여드릴 예정이다.  백업이라는 게 상황마다 조건마다 다들 판이하게 다르기 때문에 그것들을 일일히 다 실습해볼 수도 없거니와, 여러가지 상황에 대비한 옵션과 각각의 옵션에서 파생될 수 있는 결과 역시 수없이 많이 달라질 수 있기 때문에 개념을 설명하는 부분에서는 설명을 제외한다. 

이제 설치에 들어가보자.  가상 컴퓨터가 아닌 진짜 컴퓨터로 해도 상관은 없겠지만, 리눅스 설치에 시간이 좀 걸릴테니 미리 준비하실 분들은 우분투 설치부터 시작하시면 되겠다. 

다음 편으로...

블로그 이미지

jswlinux

Seowon Jung의 잡동사니 보관소

,