두 개의 원격 디렉토리를 우분투에서 실시간으로 동기화 유지

두 개의 원격 디렉토리를 우분투에서 실시간으로 동기화 유지

내 의도는 두 개의 원격 디렉터리(예: dir1 및 dir2)를 동기화된 상태로 유지하는 것입니다. 따라서 dir1의 내용이 변경될 때마다(새 파일이나 디렉터리의 추가 또는 삭제 또는 디렉터리의 파일 내용 수정 등) 변경 사항이 dir2에 전파되어야 하며 그 반대의 경우도 마찬가지입니다.

내가 생각할 수 있는 순진한 방법은 두 시스템 모두에서 cron을 통해 주기적으로 rsync를 실행하는 것입니다. 그러나 이 접근 방식에는 오류가 있습니다.

  1. 이전 rsysnc가 완료되지 않았고 이전 rysnc가 계속 진행되는 동안 cron이 rsync를 한 번 더 실행한 경우가 발생할 수 있습니다.
  2. 새 파일이 dir1에 추가되고 rsync가 dir2에서 실행되기 전에 dir1의 rsync가 실행된 다음 새로 추가된 파일이 dir2에 없기 때문에 dir1에서 삭제될 수 있습니다.
  3. 또한 이것은 실시간이 아닙니다.

이 작업을 수행하는 더 나은 방법을 제안할 수 있습니까? 저는 설정하고 시작하기가 더 쉬운 오픈 소스를 찾고 있습니다.

답변1

경쟁 기간 없이 "하드 실시간" 보장을 제공하는 유일한 방법은 쓰기가 양쪽에 모두 도달한 후에만 승인되도록 하는 것입니다. 이를 달성하는 일반적인 방법은 공유 블록 장치의 클러스터 파일 시스템(예: OCFS2 또는 GFS2)을 사용하는 것입니다. 이러한 공유 블록 장치는 DRBD를 사용하여 쉽고 저렴하게 구축할 수 있습니다.

모든 동기화 메커니즘과 마찬가지로 클러스터 내 네트워크는 허용 가능한 대기 시간으로 변경 속도를 전달할 수 있어야 합니다.

치트 시트는 다음과 같습니다.

  • 양쪽에 블록 장치(디스크, 파티션, LV, ..)를 예약합니다.
  • DRBD(apt-get install drbd-utils)를 설치 및 구성하려면 다음의 우수한 문서를 사용하세요.그들의 웹사이트
  • 원하는 클러스터 스택을 설치하십시오. 완전한 기능을 갖춘 Red Hat(단순한 공유 파일 시스템 이상이 필요한 경우) 또는 미니멀하지만 매우 쉬운 O2DLM(OCFS2에 포함됨).
  • GFS2(Red Hat 스택만 해당) 또는 OCFS2(두 스택 모두 가능)로 DRBD 장치를 포맷하고 양쪽에 마운트합니다.

이제 동기화된 디렉터리 쌍이 없습니다. 두 노드 모두에서 사용할 수 있는 단일 디렉터리가 있습니다. 이는 기능적으로 동일하지만 경주 창이 없습니다.

답변2

동일한 시스템에 있는 경우 파일 시스템 링크 사용을 고려하십시오. 이는 dir2가 dir1을 "가리키거나" 그 반대로 투명하다는 의미입니다. 이를 수행하려면 ln예 를 들어 ln -s /path/to/dir1 /path/to/dir2상대 경로를 사용하거나 대안으로 사용하십시오. 이는 -s심볼릭 링크이므로 의 inode가 아닌 경로를 참조한다는 의미입니다 dir1.

편집: 죄송합니다. "두 기계" 부분을 놓쳤습니다.

네트워크 공유 사용을 고려해 보세요. 두 위치를 (거의) 실시간으로 동기화하는 것은 항상 어렵습니다.

관련 정보