본문 바로가기

리눅스

lsyncd를 사용하여 A 서버와 B 서버 간 양방향 동기화를 설정하는 방법

728x90

lsyncd를 사용하여 A 서버와 B 서버 간 양방향 동기화를 설정하는 방법

lsyncd는 파일 동기화를 감시하고 변경이 발생할 때 실시간으로 동기화하는 도구입니다.

테스트 환경

구분 호스트 이름 아이피 비고
A 서버 node2 192.168.20.212  
B 서버 node3 192.168.20.213  

1. 설치

먼저, A 서버와 B 서버에 lsyncd를 설치합니다. 각 서버의 패키지 관리자를 사용하여 설치할 수 있습니다.

  • Ubuntu / Debian
sudo apt-get update
sudo apt-get install -y rsync lsyncd
  • CentOS / RHEL
sudo yum install epel-release
sudo yum install -y rsync lsyncd

2. SSH 키 생성 및 배포

A 서버(192.168.20.212와 B 서버 간에 비밀번호 없이 SSH 통신을 위해 SSH 키를 생성하고 배포합니다. 이미 SSH 키가 있는 경우 이 단계를 건너뛸 수 있습니다.

useradd -m -c "file sync" -d /home/filesync -s /bin/bash -u 1901 filesync
echo "filesync:filesyncpw1!" | chpasswd
echo "filesync ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers
su - filesync
  • A 서버에서 SSH 키 생성
ssh-keygen -t rsa
ssh-copy-id filesync@node2
  • A 서버의 공개 키를 B 서버로 복사
ssh-copy-id user@B_server_IP
ssh-copy-id filesync@node3
scp ~/.ssh/id_rsa filesync@node3:~/.ssh/id_rsa
scp ~/.ssh/id_rsa.pub filesync@node3:~/.ssh/id_rsa.pub

3. lsyncd 설정 파일 생성

sudo mkdir -p /app/filesync
sudo chown -R filesync.filesync /app/filesync

A 서버와 B 서버 간의 양방향 동기화를 설정하기 위해 lsyncd 설정 파일을 생성합니다.

  • A 서버에서 lsyncd.conf.lua 파일을 생성합니다.
sudo mkdir -p /etc/lsyncd
sudo vim /etc/lsyncd/lsyncd.conf.lua
  • A 서버에서 아래와 같이 설정 파일을 작성합니다.
settings {
  logfile = "/var/log/lsyncd.log",
  statusFile = "/var/log/lsyncd-status.log",
  statusInterval = 3,
  insist = true
}

sync {
  default.rsyncssh,
  source        = "/app/filesync",
  host          = "filesync@192.168.20.213",
  targetdir     = "/app/filesync",
  --delete      = true,
  delay         = 1,
  rsync = {
    archive = true,
    compress = true,
    verbose = true,
    owner = true,
    group = true,
    perms = true,
    rsh="ssh -i /home/filesync/.ssh/id_rsa -o StrictHostKeyChecking=no"
  }
}
  • logfile: lsyncd의 로그 파일 경로를 지정합니다.
  • statusFile: 상태 정보를 기록하는 파일 경로를 지정합니다.
  • statusInterval: 상태 파일 업데이트 간격(초)을 지정합니다.
  • source: 동기화를 수행할 A 서버의 소스 폴더 경로를 지정합니다.
  • target: B 서버의 동기화 대상 폴더 경로를 지정합니다.
728x90
  • B 서버에서 아래와 같이 설정 파일을 작성합니다.
vim /etc/lsyncd/lsyncd.conf.lua
settings {
  logfile = "/var/log/lsyncd.log",
  statusFile = "/var/log/lsyncd-status.log",
  statusInterval = 3,
  insist = true
}

sync {
  default.rsyncssh,
  source        = "/app/filesync",
  host          = "filesync@192.168.20.212",
  targetdir     = "/app/filesync",
  --delete      = true,
  delay         = 1,
  rsync = {
    archive = true,
    compress = true,
    verbose = true,
    owner = true,
    group = true,
    perms = true,
    rsh="ssh -i /home/filesync/.ssh/id_rsa -o StrictHostKeyChecking=no"
  }
}

4. lsyncd 실행

이제 설정 파일을 저장한 후 lsyncd를 실행합니다.

sudo systemctl start lsyncd
sudo systemctl status lsyncd
sudo systemctl stop lsyncd

이제 A 서버의 변경 사항이 B 서버로 실시간으로 동기화되고, B 서버의 변경 사항도 A 서버로 실시간으로 동기화될 것입니다.

 

  • A 서버에서 node2-AServer.txt 파일 생성
cd /app/filesync
root@node2:filesync$ touch node2-AServer.txt
root@node2:filesync$ ls -l
total 0
-rw-r--r-- 1 root root 0 Jul 24 21:18 node2-AServer.txt
root@node3:filesync$ ls -l
total 0
-rw-r--r-- 1 filesync filesync 0 Jul 24 21:18 node2-AServer.txt
  • B 서버에서 node2-BServer.txt 파일 생성
root@node3:filesync$ touch node3-BServer.txt
root@node3:filesync$ ls -l
total 0
-rw-r--r-- 1 filesync filesync 0 Jul 24 21:18 node2-AServer.txt
-rw-r--r-- 1 root     root     0 Jul 24 21:19 node3-BServer.txt
root@node2:filesync$ ls -l
total 0
-rw-r--r-- 1 root     root     0 Jul 24 21:18 node2-AServer.txt
-rw-r--r-- 1 filesync filesync 0 Jul 24 21:19 node3-BServer.txt

 

참고: 양방향 동기화를 구성할 때 주의할 점은 무한 루프를 피하는 것입니다. 두 서버 간의 동기화가 서로 영향을 미치지 않도록 설정 파일을 조심스럽게 구성해야 합니다.

 

728x90