개발etc
파일 동기화 - lsyncd
matt5659
2021. 10. 4. 14:31
lsyncd 란?
- lsyncd는 파일 시스템 이벤트 모니터링 시스템인 inotify를 통해 SRC 서버의 파일 시스템이 바뀌었을 때, rsync를 이용하여 동기화를 진행하는 데몬 프로그램
- 파일 시스템 이벤트를 모니터링하여 서버의 파일 시스템이 변경되었을 때만 rsync를 이용하여 동기화하기 때문에
주기적으로 변경사항을 체크하는 방식보다 네트워크적인 면에서 더 효율적
** rsync 란?
사용법
- lsyncd는 SRC 서버에 설치하며, rsync를 이용하여 파일 시스템을 동기화 하기 때문에 SRC서버와 DEST 서버 모두에 rsync 패키지가 설치되어 있어야 함
- lsyncd는 3rd party repository인 epel repository로 부터 다운 받을 수 있기 때문에,
epel-release가 설치되어 있지 않다면, epel-release를 먼저 설치해야함
epel-realse 설치 확인 방법
[root@web ~]# rpm -qa epel-release
[root@web ~]# yum list installed epel-release
epel-release 설치 방법
[root@web ~]# yum install epel-release
lsyncd 설치 확인 방법
[root@web ~]# yum list installed | grep lsynd
lsyncd 설치 방법
[root@web ~]# yum install lsyncd
lsyncd 설정
[root@web ~]# vi /etc/lsyncd.conf
settings {
logfile="/var/log/lsyncd/lsyncd.log",
statusFile="/var/log/lsyncd/lsyncd-status.log"
}
sync {
default.rsyncssh,
source="{현재 서버에서 파일 동기화할 디렉토리 경로}",
host="{파일 동기화할 상대 서버 IP}",
targetdir="{상대 서버의 파일 동기화할 디렉토리 경로}",
ssh={
port=22
}
rsync = {
archive=true,
compress=true,
verbose=true,
chown="root:root"
},
exclude= { "*.bak", "*.tmp", "*.swp" }
}
- settings
- logfile : 로그 경로 (* 설정한 경로가 존재하지 않을 경우에는 에러가 발생됨)
- statusFile : 상태 로그 경로 (* 설정한 경로가 존재하지 않을 경우에는 에러가 발생됨)
- sync
- 동기화 서버 정보
- DEST 서버가 여러개일 경우 sync 블록도 여러개 설정합니다.
- source : 동기화할 SRC 서버의 디렉토리
- host : host : 호스트(/root/.ssh/config에 설정한 호스트 정보를 이용할 수 있습니다.)
- targetdir : 동기화될 DEST 서버의 디렉토리
- rsync
- archive
- archive mode 여부
- 단, 소유권 정보는 호스트 접속 user가 root일 경우에만 동기화 가능
- compress : 압축 실행 여부
- verbose : 진행사항 로그 기록 여부
- chown : DEST에 저장될 파일들의 소유권 지정
- archive
- exclude : 전송 제외할 디렉토리 경로 및 파일 확장자
SSH 접속 설정
- 동기화할 양 서버 간의 SSH 접속이 패스워드 없이 가능해야하기 때문에 아래 작업을 진행
서버1
[root@web ~]# ssh-keygen
[root@web ~]# ssh-copy-id -p {포트} root@{서버2 IP}
[root@web ~]# ssh root@{서버2 IP}
서버 2
[root@web ~]# ssh-keygen
[root@web ~]# cat /root/.ssh/id_rsa.pub | ssh -p {포트} root@{서버1 IP} "mkdir -p /root/.ssh && cat >> /root/.ssh/authorized_keys"
[root@web ~]# ssh root@{서버1 IP}
lsyncd 실행
[root@web ~]# systemctl restart lsyncd
lsyncd 상태 확인
[root@web ~]# systemctl status lsyncd
● lsyncd.service - Live Syncing (Mirror) Daemon
Loaded: loaded (/usr/lib/systemd/system/lsyncd.service; enabled; vendor preset: disabled)
Active: active (running) since 일 2021-07-04 21:44:21 KST; 22min ago
Main PID: 18563 (lsyncd)
CGroup: /system.slice/lsyncd.service
└─18563 /usr/bin/lsyncd -nodaemon /etc/lsyncd.conf
- SSH AllowUsers 설정을 하여 특정 사용자 및 ip만 SSH 접속을 허용할 경우, 동기화가 이루어지지 않을 수 있음
그럴 경우, 동기화 하고자하는 서버의 SSH 설정 정보(/etc/ssh/sshd_config)에서 AllowUsers에 추가해주어야 함
AllowUsers root@{서버1의 IP 주소}
AllowUsers root@{서버2의 IP 주소}