[Tableau Server] Linux에서 crontab을 이용해 백업하기

j2·2022년 9월 24일
0

Tableau Server

목록 보기
2/3
post-thumbnail

지난 포스팅에서 linux 환경에서 Tableau Server 설치를 진행했다. 이번 포스팅에서는 마찬가지로 linux 환경에서 crontab을 이용하여 데이터를 주기적으로 백업하는 과정을 정리해보자.

백업을 시작하기 전에

서버 환경이나 설정에 따라 백업 방법이 달라질 수 있기 때문에 먼저 살펴봐야할 점들이 있다.

  1. 백업 파일을 저장할 만한 디스크 공간이 있는가
    공식 문서를 참고하여 백업 파일을 저장할 만한 공간이 있는지 계산해보아야 한다.
  2. 어떤 데이터가 백업되는가
    tsm 명령어로 모든 데이터를 백업할 수 있는 것은 아니다. 물론 일반적으로 백업될 것이라 기대하는 데이터, 추출, 흐름, 사용자 데이터, 사이트 구성 데이터 같은 데이터는 백업할 수 있지만 TSM 자체에서 설정했던 설정과 일부 인증 자산은 백업이 안되므로 나중에 다시 수동으로 설정해야한다. 공식 문서의 백업 데이터 유형, 수동 프로세스가 필요한 백업 자산 부분에서 자세하게 확인할 수 있다.
  3. 데이터를 백업하는 서버 설정과 이후 백업을 복원할 서버의 설정이 다른가
    데이터를 백업할 때 서버 설정과 새로 설치할 서버의 설정이 다른지 살펴봐야한다. 백업 파일은 서버 버전이 동일하거나 더 최신의 버전으로만 복원 가능하고 업그레이드되는 버전 차이가 크면 서버 업그레이드와 복원 방법이 다르기도 하다. 또 태블로 서버를 설치할 때 초기 노드를 설정하는 부분에서 선택했던 ID저장소(Local, Active Directory)가 같아야만 복원이 가능하다.
    간단히 정리한 것이니 꼭 공식 문서를 참고하길 바란다.

백업하자!

Tableau server에서 tsm 명령어를 이용해 백업할 수 있는 데이터는 2가지이다. 첫번째는 데이터, 흐름, 통합 문서, 사용자 데이터, 사이트 구성 데이터 등 Tableau Server로 관리되는 데이터이고(tsm maintenance backup 명령어로 tsbak 파일 생성) 두번째는 서버 구성 및 Tableau Server 프로세스 구성 데이터이다.(tsm settings export 명령어로 json 파일 생성)

아래 코드로 백업이 가능하다.

tsm maintenance backup -f <filename>.tsbak -d
tsm settings export -f <filename>.json

tsbak 파일은 파일 경로가 지정되지 않으면 자동으로 /var/opt/tableau/tableau_server/data/tabsvc/files/backups/ 경로에 저장된다.

crontab을 이용해서 주기적으로 백업하기

linux에서 기본적으로 제공하는 crontab 스케줄러를 이용하여 백업 명령을 시켜보자. 백업 명령을 .sh 파일로 만들어 crontab이 해당 bash 파일을 주기적으로 실행시키도록 한다.

1. bash 파일 만들기

backup.sh 파일을 만들어 아래 코드를 넣고 저장했다. terminal에서는 경로 상관없이 tsm명령어가 사용되지만 crontab으로 실행하게 되면 경로를 찾지 못해 tsm 경로를 언급해주어야 한다. 백업 파일은 2개 모두/var/opt/tableau/tableau_server/data/tabsvc/files/backups/ 폴더에 저장하도록 설정했다. 그리고 백업 날짜가 자동으로 파일명에 추가되는 tsbak 파일과는 달리 topology 데이터를 저장하는 json 파일에는 백업 날짜가 추가되지 않기 때문에 백업 날짜를 추가해주었다. (비교적 topology 데이터는 변동이 적어서 자주 백업할 필요가 없어서인 듯 하다.)

/opt/tableau/tableau_server/packages/customer-bin.20222.22.0712.0324/tsm settings export -f /var/opt/tableau/tableau_server/data/tabsvc/files/backups/backup_topology_$(date '+%y-%m-%d').json
/opt/tableau/tableau_server/packages/customer-bin.20221.22.0712.0324/tsm maintenance backup -f backup_repository.tsbak -d

추가로 필자는 백업을 하루에 한번 실행할 계획인데 백업 파일도 그 크기가 작지 않으므로 7일이 지나면(7개 까지만 저장) 삭제되도록 설정하기 위해 다음 코드를 추가하였다.

find /var/opt/tableau/tableau_server/data/tabsvc/files/backups/*.json -mtime +6 -delete
find /var/opt/tableau/tableau_server/data/tabsvc/files/backups/*.tsbak -mtime +6 -delete

2. crontab 설정하기

1) 사용자가 root가 아닌 사용자일 경우
기본 사용자 root가 아닌 다른 사용자를 사용할 경우 crontab 사용에서 오류가 날 수 있다. root 사용자로 crontab을 이용한다면 이 과정은 생략해도 된다. terminal에서 다음 코드를 입력하자.

cd /etc/cron.d
sudo touch cron.allow
sudo vim cron.allow

i를 눌러 insert 모드로 들어간 뒤, crontab을 사용할 사용자 리스트를 적는다. 내가 사용한 계정은 user1이다.

root
user1

esc를 눌러 insert 모드를 종료시키고 :wq로 종료하면 user1 계정에서도 crontab을 사용할 수 있다.

2) 로그 기록하기
crontab으로 명령어를 실행하면 terminal에서 실행하는 것처럼 바로 로그를 볼 수는 없다. 그래서 로그를 남기는 옵션을 3)에서 설정할 것이다. 로그 파일을 남기지 않을 거라면 이 과정은 생략해도 된다. 로그 파일을 쓰기 위해 backup.sh 파일 권한을 수정하자. 필자의 backup.sh 파일은 Desktop 폴더에 위치한다.

ls -l /home/user1/Desktop/backup.sh

위 코드를 실행하면 Desktop 폴더에 위치한 파일과 그 앞에 파일 권한이 표기되는데 backup.sh 파일의 권한이 -rw-rw-r--로 나타난다면 권한을 수정해주어야 한다. 수정하지 않고 로그를 기록하려고 할 경우 Permission Denied error가 발생하므로 다음 코드를 실행시키자.

sudo chmod +x /home/user1/Desktop/backup.sh

다시 bash.sh 파일 권한을 확인해보면 -rwxrwxr-x으로 나타나면 성공이다.

ls -l /home/user1/Desktop/backup.sh

3) crontab 설정하기
드디어 crontab을 입력하여 bash.sh에 담긴 코드를 주기적으로 실행시켜보자. terminal에 다음 코드를 실행시켜 crontab 편집 모드에 들어간다.

crontab -e

주석 맨 밑에 다음 코드를 입력한다. 형식은 '(실행 시간 및 주기) (명령어)'이다. 다음 코드는 매일 새벽 4시에 backup.sh 파일을 실행한다. crontab이 실행되는 시간을 변경하고 싶다면 친절하게 잘 설명된 글이 많으니 구글링 해보길 바란다.

00 04 * * * /home/user1/Desktop/backup.sh

필자처럼 crontab 실행동안 생성되는 로그를 기록하고 싶다면 다음 코드를 입력하자. Desktop 경로에 backup_날짜.log 파일명으로 로그가 저장된다.

00 04 * * * /home/user1/Desktop/backup.sh > /home/user1/Desktop/backup_$(date '+\%y\%m\%d').log 2>&1

이렇게 설정하면 자동으로 매일 새벽 4시에 백업이 되는 것을 확인할 수 있다. 로그로 확인하면 더 편리하다. 환경이 허락한다면 백업한 파일로 복원 과정도 테스트해보길 바란다.

profile
Data Analyst 주니어의 공부 기록

0개의 댓글