약 10GB의 MongoDB 데이터베이스가있는 단일 전용 서버가 있습니다. 매일 백업을 수행해야하지만 데이터베이스로 다운 타임을 가질 수는 없습니다. 단일 디스크에서 복제 세트를 사용하고 (다른 포트에서 2 개의 mongod 인스턴스가 실행 중) 보조 2 개의 오프라인을 오프라인으로 가져 와서 데이터 파일을 S3과 같은 오프 사이트 스토리지에 백업하는 것이 가능합니까 (저널링이 켜져 있음)? 아니면 마스터 / 슬레이브를 사용하는 것이 복제 세트보다 낫습니까?
이것이 가능한가? 그렇다면 어떤 잠재적 문제가있을 수 있습니까? 그렇지 않다면 어떻게 작동하도록 개념화합니까?
답변
이 시나리오에서는 ReplicaSet이 작동합니다. 그러나 동일한 서버에 두 개의 MongoDB 인스턴스가있는 것이 좋은 아이디어인지 알 수 없습니다. 이는 서버 하드웨어 / 소프트웨어 및로드에 따라 다릅니다.
확인하십시오하려면 backup
MongoDB의 노드가되지 않는 마스터를, 그 설정 priority
매개 변수를 하는 0
, 예를 들어,
rs.add({_id: 1, host: "localhost:<port>", priority: 0})
참고 : 가동 중지 시간이없는 경우 ReplicaSet에 기본 MongoDB 노드가 2 개 이상 있어야합니다 ( 문서 참조).
답변
고려해야 할 한 가지 전략은 복제 세트의 백업 노드에서 “hidden”옵션을 사용하는 것입니다. MongoDB 블로그에서 :
숨겨진 서버는 isMaster () 결과에 나타나지 않습니다. 이것은 또한 드라이버가 자동으로 읽기를 슬레이브에 분배하는 경우 사용되지 않음을 의미합니다. 숨겨진 서버의 우선 순위는 0이어야합니다 (숨겨진 기본을 가질 수 없음). 숨겨진 멤버를 추가하려면 다음을 실행하십시오.
rs.add ({ “_ id”: num, “host”: hostname, “priority”: 0, “hidden”: true})
답변
복제본 세트는 일반적으로 선호되지만이 경우에는 자동 복구 및 자동 재 동기화 기능 때문에 간단합니다. 설명하는 백업 방법은 완벽하게 합리적이며 다른 데이터베이스에서도 사용되었습니다.
내가 볼 수있는 유일한 잠재적 인 문제는 특정 상황에서 보조가 주 보조로 승격 될 수 있으며 a) 새 보조에서 백업을 가져와야하거나 b) 해당 인스턴스를 알릴 수 있도록 똑똑한 백업 스크립트를 만들어야한다는 것입니다 MongoDB를 단계적으로 종료합니다.
좋은 소식은 그것이 꽤 사소한 것입니다
- 백업 소스를 쿼리하여 기본 인스턴스와 보조 인스턴스 (
db.isMaster()
) 를 찾으십시오. - 백업 명령 이
rs.freeze()
및rs.stepDown()
명령을 사용하여 단계적으로 종료 하거나 보조 서버에 다시 연결하도록 설득