2020. 11. 5. 17:49ㆍCentOS 7/Basic
1. 실시간으로 파일시스템 백업을 하려면?
원본 서버에 저장된 파일 시스템을 다른 서버로 실시간으로 백업하고자 할 때 어떻게 해야할까요.
이전 포스팅에서 scp를 이용하여 다른 호스트 간에 secure copy를 하는 방법을 알아봤습니다.
scp의 경우, 특정 디렉토리를 복사할때 예전에 이미 복사했던 파일도 함께 복사한다는 단점이 있습니다.
변경되지 않은 파일은 복사하지 않고, 변경된 파일만 복사하고 싶다면 어떻게 해야할까요?
또, 이런 효율적인 복사를 실시간으로 자동으로 처리하려면 어떻게 해야할까요?
이번 포스팅에서는 효율적인 실시간 백업을 위한 방법을 알아볼 것입니다.
편의를 위해 원본이 위치한 서버를 SRC(source) 서버, 복사본이 저장될 서버를 DEST(destination) 서버라고 칭하도록 하겠습니다.
2. rsync?
remote sync
rsync [OPTION...] [USER@]HOST:SRC... [DEST]
rsync [OPTION...] SRC... [USER@]HOST:DEST
- -a : archive mode (= -rlptgoD)
- -r : 하위 디렉토리
- -l : symbolic link
- -p : permission(권한)
- -t : timestamp(최종 수정일)
- -g : 그룹
- -o : 소유자, super user only
- -v :동기화 내역 상세 출력
- -X : xattr
- -A : ACL
- -H : hard link
- --exclude : 제외할 파일확장자 설정
rsync는 효율적으로 파일을 동기화하기 위한 툴입니다.
파일의 timestamp(마지막 수정일)와 size(용량)을 검사하여 변경된 파일만 동기화를 시행합니다.
변경된 파일만을 전송할 수 있기 때문에 rsp나 scp보다 효율적입니다.
link 복사도 지원하고 permission이나 owner/group 정보의 복사도 지원합니다.
rsync를 이용한 동기화 테스트를 하기 전에 서버에 rsync 패키지가 설치되어있는지 확인해봅니다.
yum list installed | grep rsync
만일 설치되어있지 않다면 rsync 패키지를 설치합니다.
sudo yum install rsync
SRC 서버인 apple에서 cherry서버로 root 권한으로 동기화해봅시다.
sudo rsync -avz --exclude="*.bak" --exclude="*.tmp" \ ./ cherry-root:/usr/local/cherry/jini
sending incremental file list ./ sed-test.txt ttt.sh vim-test/ vim-test/Hello.java vim-test/apple.txt vim-test/banana.sql vim-test/lpsum.txt vim-test/melon.txt sent 4,241 bytes received 164 bytes 1,258.57 bytes/sec total size is 7,937 speedup is 1.80
-v
속성을 설정했기 떄문에 명령어 실행시 동기화된 파일들이 위와같이 출력됩니다.
cherry-root는 /root/.ssh/config
에 설정한 ssh 접속정보입니다.
※ config파일을 설정하는 방법을 알고싶다면 [CentOS 7] ssh config를 이용하여 간편하게 ssh접속하기 포스팅을 참고해주세요.
3. lsyncd?
live syncing daemon
SRC 서버에 있는 파일 시스템을 DEST 서버에 실시간 동기화하기 위해 설계된 daemon입니다.
lsyncd는 파일 시스템 이벤트 모니터링 시스템인 inotify를 통해 SRC 서버의 파일 시스템이 바뀌었을 때 rsync를 이용하여 동기화를 진행합니다.
주기적으로 변경사항을 체크하는 방식보다 네트워크 적인 면에서 효율적입니다.
rsync+ssh를 방식을 이용하면 ssh를 이용하여 DEST 서버와 파일 시스템을 동기화 시킬 수 있습니다.
/etc/lsyncd.conf
구성파일에 동기화 관련 설정을 추가할 경우 별도의 추가 설정 없이 lsyncd 데몬 시작으로 동기화할 수 있습니다.
lsyncd.conf 파일은 LUA 언어로 작성합니다.
lsyncd는 SRC 서버에 설치하며, rsync를 이용하여 파일시스템을 동기화 하기 때문에 SRC서버와 DEST서버 모두에 rsync 패키지가 설치되어있어야 합니다.
SRC 서버에 lsyncd 가 설치되어있는지 확인하고 설치되어있지 않다면 설치합니다.
yum list installed | grep lsyncd
sudo yum install lsyncd
참고로 lsyncd는 3rd party repository 인 epel repository로 부터 다운 받을 수 있는 패키지이기 때문에
epel-release
가 SRC 서버에 설치되어있지 않다면 먼저epel-release
를 설치한 후 진행해야 합니다.
lsyncd 을 설치하면, /etc/lsyncd.conf
설정파일이 생성됩니다.
이 설정파일에 실시간으로 동기화할 디렉토리 정보를 설정해준 후, lsyncd 를 실행하면 모든 설정이 끝납니다.
settings { logfile="/var/log/lsyncd/lsyncd.log", statusFile="/var/log/lsyncd/lsyncd-status.log" } sync{ default.rsyncssh, source="/usr/local/apple/ttt", host="cherry-root", targetdir="/usr/local/cherry", rsync = { archive=true, compress=true, verbose=true }, exclude= { "*.bak", "*.tmp", "*.swp" } }
- settings
- logfile : 로그 경로
- statusFile : 상태 로그 경로
- sync
- 동기화 서버 정보
- DEST 서버가 여러개일 경우 sync 블록도 여러개 설정합니다.
- source : 동기화할 SRC 서버의 디렉토리
- host : 호스트(/root/.ssh/config에 설정한 호스트 정보를 이용할 수 있습니다.)
- targetdir : 동기화될 DEST 서버의 디렉토리
- rsync
- archive
- archive mode 여부
- 단, 소유권 정보는 호스트 접속 user가 root일 경우에만 동기화할 수 있습니다
- compress : 압축 실행 여부
- verbose : 진행사항 로그 기록
- chown
- DEST에 저장될 파일들의 소유권 지정
- ex)
chown="jini:jini"
- archive
- exclude : 전송 제외할 디렉토리 경로 및 파일확장자를 설정합니다.
※ 옵션에 대해 더 알고 싶다면 Lsyncd Menual - Config Layer 4: Default Config를 참고해주세요.
설정을 완료했다면, lsyncd 를 실행해줍니다.
sudo systemctl restart lsyncd
아래는 위의 설정의 의해 자동으로 동기화 된 파일 시스템의 화면입니다.
++ tip
ssh AllowUsers 설정을 하여 특정 사용자 및 ip만 ssh 접속을 허가할 경우 동기화가 이뤄지지 않을 수 있다.
그럴 경우, 동기화 하고자하는 서버의 ssh 설정정보(/etc/ssh/sshd_config
)에서 AllowUsers에 추가해줘야 합니다
AllowUsers yeonjin@10.28.11.12 AllowUsers yeonjin@10.28.221.11
++
- CentOS7 실시간 백업
- CentOS7 실시간 파일시스템 동기화
'CentOS 7 > Basic' 카테고리의 다른 글
[CentOS 7] swap 메모리 늘리기 (0) | 2020.10.18 |
---|---|
[CentOS 7] ssh config를 이용하여 간편하게 ssh접속하기 (0) | 2020.10.18 |
[Suricata 5] 1. CentOS 7에 suricata 5 설치하기 (0) | 2020.07.10 |
[CentOS 7] timedatectl을 이용하여 서버의 timezone 변경하기 (0) | 2020.03.20 |
[CentOS 7] ntpdate 명령어를 이용하여 NTP 서버와 시간 동기화 (0) | 2020.02.26 |