양방향 rsync로 인해 콘텐츠가 진동함

양방향 rsync로 인해 콘텐츠가 진동함

두 서버 간에 콘텐츠를 동기화하려고 합니다. 서버는 동일한 빌드(Ubuntu 12.04LTS)이며 콘텐츠를 동기화하기 위해 다음 cron 작업이 실행됩니다.

rsync -arzc --update --delete /htdocs/testing/www/cms_uploads/* [email protected]:/htdocs/testing/www/cms_uploads/

하지만 아래에 자세히 설명된 프로세스를 테스트할 때 이상한 결과가 나타납니다.

첫 번째 테스트

  • aaaa.jpg를 Node2에 업로드했습니다.
  • Node1과 동기화
  • Node1에서 삭제
  • Node1에 다시 나타납니다.
  • Node2에서 삭제
  • Node1에서 제거됨

두 번째 테스트

  • Node1에 bbbb.png를 업로드했습니다.
  • Node2와 동기화
  • Node2에서 삭제
  • Node2에 다시 나타남
  • 노드 1에서 삭제
  • Node1에 다시 나타납니다.

내가 하려는 것은 동일한 콘텐츠가 두 서버 모두에서 항상 동일한지 확인하는 것입니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?

답변1

rsync양방향 동기화를 수행하도록 설정되지 않았습니다. 특별한 도움(예: 변경된 컴퓨터의 동기화)과 많은 행운이 없으면 그렇게 할 수 없습니다.

변화가 드물고 멀리 떨어져 있으려면 행운이 필요합니다. 다음 동기화가 시작되기 전에 Node1과 Node2가 모두 변경되면(두 시스템 모두에서) 동기화 시 일부 변경 사항이 손실됩니다.

또한보십시오이것

답변2

문제 설명에 근본적으로 문제가 있는 부분이 있습니다. 서버가 동기화된 다음 aaaa.jpg노드 2에 파일을 생성한다고 가정합니다. 다음 동기화 시 해당 가짜 파일을 노드 2에서 삭제해야 하거나(노드 1에 존재하지 않기 때문에 삭제되어야 함) 파일을 노드 1에 복사하시겠습니까(노드 1에는 없으므로 새로 생성해야 합니다)?

동기화를 실행하는 순서에 따라 각 경우에 어떤 일이 발생하는지가 결정됩니다. 이는 많은 경우에 원하는 결과를 얻지 못하는 것이 실질적으로 보장됩니다. 더 나쁜 것은 동기화가 병렬로 실행되면(즉, 호스트 중 하나가 자체 동기화 작업에 의해 업데이트되고 동시에 다른 호스트에서 실행 중인 동기화 작업에 의해 통과되는 경우) 결과가 다소 무작위로 보일 것입니다.

Rsync는 기본적으로 단방향 동기화를 위해 설계되었습니다. 두 개의 rsync 작업을 실행하면서 양방향 동기화를 수행할 수는 없습니다.

조화양방향 동기화를 위해 설계된 파일 동기화 장치입니다. 이는 귀하의 작업에 가장 적합한 도구에 가장 가까운 것입니다. unison -auto remote.example.com://path/to/directory /path/to/directory호스트 중 하나에서 설정하고 실행하십시오 .

어떤 도구를 사용하든 충돌이 발생할 가능성이 있습니다. 예를 들어 동일한 파일이 서로 다른 두 시스템에서 서로 다른 두 버전으로 대체되는 경우입니다. 이러한 충돌을 자동으로 해결할 수 있는 좋은 방법은 없으므로 수동 개입이 필요합니다.

대부분의 설정에서 올바른 방법은 단일 서버를 업로드할 장소로 지정하고 해당 마스터 서버의 다른 모든 서버를 동기화하는 것입니다. 누군가 슬레이브에 파일을 업로드하는 경우 업로드를 마스터에 전달하도록 만드세요. 로컬에서는 아무것도 변경하지 마세요. 마스터에서 파일이 변경될 때마다 이를 슬레이브로 푸시합니다.

답변3

rsync에는 다음을 수행하는 -u 옵션이 있습니다.
"이렇게 하면 rsync가 대상에 존재하는 모든 파일을 건너뛰고 소스 파일보다 새로운 수정 시간을 갖게 됩니다. (기존 대상 파일의 수정 시간이 소스 파일의 수정 시간과 동일한 경우) , 크기가 다르면 업데이트됩니다.)" 따라서 1) 사용자가 제공한 명령에 -u 옵션을 더하고 -c 옵션을 뺀 명령과 2) 동일한 명령이지만 방향이 반대인
쉘 스크립트는 정렬할 수 있습니다. 양방향 동기화를 수행할 수 있지만 두 가지 문제가 있습니다. 1) 원격 서버에서 삭제된(또는 이름이 바뀐) 파일은 로컬에서 복사됩니다. b/c rsync는 로컬에서 새 파일을 찾은 것으로 간주하며, 2) 다음과 같은 경우 동기화 간에 두 위치 모두에서 단일 파일이 변경되면 가장 최근의 변경 사항만 보존됩니다.




관련 정보