두 개의 원격 Linux 서버간에 큰 파일 트리의 양방향 실시간 동기화


21

큰 파일 트리는 약 200k 파일을 의미하며 항상 증가합니다. 주어진 시간에 비교적 적은 수의 파일이 변경되고 있습니다.

양방향으로 나는 서버 중 하나에서 변경이 발생할 수 있으며 다른 서버로 푸시해야하므로 rsync가 적절하지 않은 것으로 보입니다.

멀리 있다는 것은 서버가 데이터 센터에 있지만 지리적으로 서로 떨어져 있다는 것을 의미합니다. 현재 2 대의 서버 만 있지만 시간이지나면서 확장 될 수 있습니다.

실시간으로 동기화 사이에 약간의 대기 시간이있을 수는 있지만 1-2 분마다 크론을 실행하는 것은 옳지 않은 것처럼 보입니다. 분의 파일은 물론 소수의 파일도 아주 적은 시간에 변경 될 수 있기 때문입니다.

편집 : 이것은 VPS에서 실행되므로 내가 할 수있는 커널 수준의 종류에 제한이있을 수 있습니다. 또한 VPS는 리소스가 풍부하지 않으므로 Gluster와 같은 많은 램이 필요한 솔루션을 피하고 싶습니다.

이 작업을 수행하는 가장 좋은 방법은 무엇입니까? 이것은 일반적인 요구 인 것처럼 보이지만, 일반적으로 받아 들여지는 접근법을 아직 찾지 못했지만 놀라운 일이었습니다. (나는 대중의 안전을 찾고 있습니다. :)

나는 건너 한 lsyncd 파일 시스템 변경 수준에서 동기화를 트리거 할 수 있습니다. 그것은 흔하지는 않지만 영리한 것처럼 보이며 다양한 lsyncd 접근 방식에 약간 혼란 스럽습니다. rsync와 함께 lsyncd를 사용하고 있지만 rsync에 메모리 개념이 없기 때문에 양방향에 취약 할 수 있습니다 (예 : A에서 삭제 된 파일을 B에서 삭제 해야하는지 또는 B에서 새 파일인지 여부를 알기 위해) A)로 복사해야합니다. 립싱크는 단지 lsyncd + rsync를 구현, 잘 될 것 같습니다?

그런 다음 csync2와 함께 lsyncd를 사용 하고 있습니다 : https://icicimov.github.io/blog/devops/File-system-sync-with-Csync2-and-Lsyncd/ ...이 접근법에 기대어 있습니다. csync2는 약간 기발하지만, 테스트를 성공적으로 수행했습니다. 나는이 방법에 대해 많은 커뮤니티 확인을 할 수 없었 을까 걱정하고있다.

여기에있는 사람들은 Unison을 많이 좋아하는 것처럼 보이지만 더 이상 활발히 개발 중이 아니며 lsyncd와 같은 자동 트리거가 있는지 확실하지 않습니다.

나는 Gluster가 언급 된 것을 보았지만 , 내가 필요로하는 것에 대해 지나치게 과잉 일까?

업데이트 : 참고-나는 내가 언급 한 원래 솔루션 인 lsyncd + csync2로 끝났습니다. 꽤 잘 작동하는 것 같습니다. 서버를 매우 느슨하게 연결하는 아키텍처 방식이 마음에 들기 때문에 각 서버는 링크 품질에 관계없이 자체적으로 무기한으로 작동 할 수 있습니다.


어떤 종류의 변경을 처리해야합니까? EG 생성, 삭제, 수정.
sciurus

또한 충돌이 예상됩니까? 두 서버에서 동일한 파일을 수정할 수 있습니까?
sciurus

모든 변경 사항 : 생성, 삭제, 수정 갈등의 가능성이 있지만 드 물어야합니다. 내가 수동으로 해결해야하는 충돌에 대한 경고를 수신해도 상관 없습니다.
dlo

답변:


5

DRBD듀얼 차 A를 모드 프록시는 옵션입니다.


프록시는 오픈 소스도 아니고 무료도 아닌 것 같습니다. 비동기 모드에서 프록시를 사용하지 않은 결과에 대해 잘 모르겠습니다. 확장 된 다운 타임 동안 프록시가 없으면 [작은?] 출력 버퍼가 가득 차서 동기화를 잃을 수 있습니까? 그로부터 회복하기가 어렵습니까?
dlo

위의 답변을 참조하십시오. 나는 프록시가 필요한 것이라고 생각하지 않습니다. 작은 가동 중지 시간 동안에도 drbd-meta-device는 "더러운"블록을 표시하고 연결이 다시 설정된 후 전송합니다. 프록시와 비동기 모드의 주요 차이점은 비동기 모드가 최대 MB의 버퍼를 사용한다는 것입니다. 그런 다음 버퍼를 다시 채우기 전에 동기화됩니다. 프록시는 더 큰 버퍼를 허용합니다 (대기 시간이 길거나 원격보다 로컬에서 훨씬 더 빨리 쓸 수있는 경우 필요).
Nils

2

동기화하는 대신 NFS를 통해 동일한 파일 시스템을 공유하지 않겠습니까?


2
NFS는 끔찍합니다. NFS보다 더 나은 것
AliGibbs

2
다중 서버 설정의 주요 포인트 중 하나는 장애 조치 / 이중화입니다. 따라서 한 서버는 다른 서버 없이도 계속 사용할 수 있어야합니다.
dlo

당신은 당신의 질문에서 언급했을 것입니다-완벽하게 합리적인 답변을 투표 할 필요가 없습니다!
Bart B

참고로 나는 그것을 공감하지 않았다. 그러나 그렇습니다, 나는 그것을 시작할 것이라고 언급 했어야합니다.
dlo September

@Bart : 음-그는 두 개의 원격 사이트에 동시 액세스가 있다고 언급했습니다. 따라서 HA-NFS를 설치하더라도 NFS 액세스 중에 한쪽에서 대기 시간이 발생하기 때문에 나쁜 솔루션이 될 수 있습니다. 그리고 나는 또한 downvote하지 않았다. 하지만 AliGibbs를 지원하기에 충분한 NFS 관리자였습니다. :-/
Nils

2

분산 파일 시스템을 구현하는 것이 도구 및 스크립트와 함께 해킹하는 것보다, 특히 서버 클러스터가 커지는 경우보다 낫습니다. 다운 된 노드를 더 잘 처리 할 수도 있습니다.

나는 Gluster (또는 AFS)가 전혀 과도하다고 생각하지 않습니다.


Gluster에는 1GB 램이 필요합니까? gluster.com/community/documentation/index.php/… ... 또한 VPS를 사용 중이므로 AFS에 필요한 커널 수준 변경을 확신 할 수 없습니다. 그러나 적절한 분산 fs가 더 나은 경로라는 것을 알기 시작했습니다.
dlo

예, VPS 호스트를 사용하고 있다는 사실을 미리 파악하지 못했습니다. 서버 및 클라이언트의 Gluster 메모리 공간은 작지 않으며 실질적으로 커질 수 있습니다. DRBD가 더 적절하게 들립니다.

AFS는 갈 길입니다.
Anthony Giorgio

2

귀하의 경우 이중 기본 모드와 gfs 또는 ocfs에서 DRBD의 조합을 권장합니다.

이중 기본에서 DRBD의 단점은 동기 모드에서 실행된다는 것입니다. 그러나 여기서 쓰기 속도는 중요하지 않은 것 같습니다.

DRBD의 대안은 많은 (2+) iSCSI 대상을 사용하는 Soft-Raid1 일 수 있지만 두 개의 노드가있는 DRBD를 선호합니다.


1
동기 모드는 좋지 않습니다. 필요하지 않으며 서버가 대륙에 걸쳐 WAN을 통해 연결되어 있기 때문에 성능을 저하시키고 싶지 않습니다. 그러나 비동기 모드에서는 이중 기본을 가질 수 없습니까?
dlo

현재 DRBD 8.3.5를 사용하고 있습니다. 이중 기본 모드로 들어가려면 동기화 모드 ( "C")에 있어야합니다. DRBD 프록시에 대한 개인적인 경험은 없지만 Veritas Volume Replicator와 비슷해 보이지만 양면 쓰기 쓰기를 원하므로 적합하지 않습니다. 블록 수준의 동기화 모드는 생각만큼 나쁘지 않을 수 있습니다. 아마도 gfs 및 / 또는 ocfs는 쓰기를 버퍼링 할 수 있습니다.
Nils

방금 GFS2와 OCFS2를 비교 한 독일 기사를 확인했습니다 . 그로부터 적어도 OCFS2는 버퍼 파일 시스템 액세스를 지원하는 것으로 보입니다. GFS2는 이전 기사이므로 권장됩니다. GFS2에 대한 자세한 내용은 GFS2에 대한 RedHat 설명서 를 참조하십시오. 버퍼링도 사용하지만 최상의 성능을 얻으려면 동시 쓰기에 다른 디렉토리를 사용해야합니다.
Nils

0

위에서 설명한 것처럼 각각의 장점과 단점이있는 많은 솔루션을 사용할 수 있습니다.

전체 트리를 버전 제어 ( 예 : Subversion )에 배치하고 cron 작업의 두 서버에서 주기적으로 체크인 / 업데이트하는 것을 고려할 것이라고 생각 합니다.


0

똑같은 것에 대해 약간의 탐구를 끝내고 난 글 러스터로 갈거야. 그러나 성능 테스트를 수행하지 않았습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.