읽기 연산 전용 :MongoDB 복제본 집합이 기본 데이터베이스를 쿼리하지 못하도록하려면 어떻게해야합니까?
MongoDB 복제 세트를 사용하는 방법이 있지만 연결되어있는 상자에서 MongoDB 인스턴스를 쿼리하려면 MongoDB가 될 수 있습니까?
세 개의 EC2 인스턴스가 AWS로드 밸런서 뒤에 있습니다.
각 EC2 인스턴스의은 복제 세트의 일부인 MongoDB를 실행합니다.
나는 nodeJS에 명시 엔드 포인트를 가지고 있고 균일 기본함으로써 대신 설정 내 MongoDB의 복제의 세 인스턴스에서 쿼리의 부하를 분산하려는
mongodb.MongoClient.connect('mongodb://1.1.1.1,2.2.2.2,3.3.3.3.',
function (err, db)
{
if (err)
{
complete('{}');
}
else
{
을 다음과 같이 나는 복제 세트에 연결 내 기본 MongoDB가 정의 된 EC2 인스턴스로 라우팅되는 모든 쿼리는 내로드 밸런서의 지점을 파괴하기 때문에 (모든 세 인스턴스에서 쿼리의로드 균형을 균등하게 유지하기 때문에).
내 이해는 MongoDB 복제 세트에 연결할 때 기본 인스턴스가 다운되지 않으면 기본 인스턴스가 항상 선택되므로 모든 보조 인스턴스의 목적은 백업 역할을한다는 것입니다.
필자의 예에서는 일부 사람이 HOT, COLD, COLD라고 부릅니다. 결코 사용되지 않는 두 개의 인스턴스가 있기 때문입니다.
쿼리로드가 균등하게 분산되도록하려는 이유는 내 설정이 WARM, WARM, WARM 일 수 있기 때문입니다.
향후 사용자 수가 증가 할 때 쿼리 성능이 최적으로 유지되도록 쿼리 성능을 향상시키기 위해로드 밸런서 뒤에 EC2 인스턴스를 추가 할 수 있습니다.
데이터가 커지면 단일 인스턴스가 너무 늦어서 데이터를 제 시간에 반환 할 수 없게됩니다. 즉, 각 인스턴스를 다른 EC2 인스턴스로 분할 할 때입니다.
참고 : 모든 EC2 인스턴스의 소스 코드가 같아지기를 바랍니다. 나는 자식을 사용하고 있으며 복제본 세트의 모든 인스턴스에 소스 코드를 쉽게 넣고 가져오고 싶습니다.
나는 readpreference = secondary를 사용하고 두 개의 보조 항목 (2.2.2.2에 하나, 3.3.3.3에 하나)이 있습니다. 사용하게 될 mongoDB 보조 노드가로드 밸런서가 라우팅 된 시스템에 있는지 여부를 알고 있습니까? 예를 들어, AWS로드 밸런서가 엔드 포인트가 읽기 기본 설정이 보조 노드로 설정된 mongoDB 복제 세트에 연결되는 3.3.3.3 상자로 라우팅하는 경우, 보조 선택 항목도 3.3.3.3에 있습니까? – user1709076
가장 가까운 소리처럼 들립니다 ** 동일한 상자에있는 집합에서 mongoDB 복제본을 선택해야합니다 - 그러나 그것이 사실인지 또는 확인하는 방법이 나에게 명확하지 않습니다 – user1709076
드라이버가 AWS 토폴로지에 대해 전혀 알지 못할 것입니다 또는 ELB 또는 NEAREST 컴퓨팅시의 모든 것. 이는 네트워크 대기 시간에만 계산됩니다. 클라이언트가 복제 세트 구성원과 동일한 인스턴스에서 실행 중이면 일반적으로 기본 복제본인지 보조 복제본인지 여부를 조회합니다. 그러나 새로운 기본 노드는 언제든지 선출 될 수 있으며 NEAREST로 실행중인 경우 기본 노드에서 읽지 못하도록하지는 않습니다. MongoDB 복제 세트 구성원과 동일한 인스턴스에서 앱을 실행하는 것은 일반적으로 최선의 방법은 아닙니다. –