
Ubuntu Server 10.04를 실행하는 3개의 서버가 있으며 DNS를 통해 이들 간의 로드 밸런싱을 수행합니다. 콘텐츠를 제공하기 위해 Django, nginx를 사용하고 데이터베이스로 PostgresQL을 사용합니다.
PostgresQL의 경우 몇 가지 미러링 솔루션이 있지만 "3개의 마스터" 스키마를 사용하여 정적 파일을 미러링하는 가장 좋은 방법은 무엇입니까?
단순히 재동기화하는 것만으로는 확장 가능하고 유지 관리가 쉬운 방법이 아닐 것 같습니다.
답변1
파일이 자주 변경되지 않고 항상 동기화를 유지해야 하는 한 rsync를 사용하는 것은 어떨까요? 파일을 편집하는 마스터 서버가 하나 있는지 확인하면 동기화가 더 쉬워집니다.
그 외에는 NFS와 같은 네트워크 파일 시스템이 작동할 수도 있고 다음과 같은 것을 구현할 수도 있습니다.DRBD파일을 항상 동기화된 상태로 유지합니다.
답변2
다른 솔루션(afs, Unionfs...)이 많이 있지만 rsync는 놀랍게도 단방향 복제에 잘 작동하고 자가 치유 기능이 있으며 복제 경로를 정의한 대로 확장 가능합니다(단일 마스터는 최대 약 5개의 슬레이브가 있지만 그 이상에는 다중 계층 복제로 전환해야 할 이유가 있을 것입니다.
유일한 문제는 복제 타이밍입니다. 라운드 로빈 DNS를 사용하고 있으므로 이미 서버 선호도가 있으므로 사용자가 서버 A를 업데이트한 다음 서버 B를 보고 있기 때문에 업데이트를 볼 수 없는 문제가 발생하지 않습니다. 코드는 배포 시 약간의 어려움을 초래할 수 있습니다(특히 공통 데이터베이스에 대한 DDL 변경에 대한 코드 의존성이 있는 경우).
양방향 복제가 필요하다면(가능하다면 피하십시오) 그렇습니다. 실시간 복제 시스템이 더 적합할 것입니다.
현재 수동으로/cron을 통해 rsync를 실행 중인 경우 지연이 매우 짧아지도록 파일이 변경될 때 inotify를 사용하여 파일에서 rsync를 실행하는 것을 고려할 수 있습니다.
씨.
답변3
코드가 프로덕션에 배포되면 모든 서버에 동시에 배포되어야 합니다. 이 작업이 적절하게 제어되면 제어의 일부로 미러링되어야 하며 기술 솔루션은 필요하지 않습니다. 모든 관리 솔루션이 기술을 기반으로 하는 것은 아닙니다.
오픈EFS변경 제어 및 배포가 가능하도록 설계된 도구로, 도움이 될 수 있습니다. 혼자서 하는 일을 많이 구현했지만 기초가 없는 사람에게는 좋은 시작이 될 것입니다.
변경 제어 범위에 포함되지 않는 정적 서버의 경우 과거에는 rsync가 적절한 솔루션이라는 것을 알았습니다. 일반적으로 이 범주에 속하는 서버의 경우 확장이 문제가 될 가능성은 없지만 문제가 되는 경우NFS또는AFS작용할 수도 있습니다.