![양방향 rsync로 인해 콘텐츠 진동이 발생함](https://linux55.com/image/31594/%EC%96%91%EB%B0%A9%ED%96%A5%20rsync%EB%A1%9C%20%EC%9D%B8%ED%95%B4%20%EC%BD%98%ED%85%90%EC%B8%A0%20%EC%A7%84%EB%8F%99%EC%9D%B4%20%EB%B0%9C%EC%83%9D%ED%95%A8.png)
두 서버 간에 콘텐츠를 동기화하려고 합니다. 서버는 동일한 버전(Ubuntu 12.04LTS)이며 다음 cron 작업을 실행하여 콘텐츠를 동기화합니다.
rsync -arzc --update --delete /htdocs/testing/www/cms_uploads/* [email protected]:/htdocs/testing/www/cms_uploads/
그러나 프로세스를 테스트했을 때 아래 설명과 같이 이상한 결과가 나왔습니다.
첫 번째 테스트
- Node2에 aaaa.jpg 업로드
- 노드 1에 동기화
- 노드 1에서 삭제
- Node1에 다시 나타납니다.
- 노드 2에서 제거
- Node1에서 제거
두 번째 테스트
- Node1에 bbbb.png 업로드
- 노드 2에 동기화
- 노드 2에서 제거
- 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) 두 위치에서 단일 파일이 변경되는 경우 동기화하면 최신 변경사항만 유지됩니다.