2012-09-07 4 views
2

Node.js + Express + Mongoose를 사용하여 MongoDB 복제 세트 (3x 인스턴스)에 연결합니다. Mongoose의 "connectSet"명령을 사용하여 복제 세트에 연결하면 내 복제 세트간에로드 균형이 잡힌다는 인상을 받았습니다.Node.js/Mongoose/MongoDB + ConnectSet을 사용하여 올바르게로드 밸런스하는 방법은 무엇입니까?

그러나 nodetime을 사용하면 모든 쿼리 (find() 쿼리 포함)가 복제본 세트의 PRIMARY 인스턴스로 이동한다는 것을 알 수 있습니다.

나는 여기에 오해가 있습니까? 실종되었거나 복제 세트의 설정이 있습니까? 복제 세트의 목적은 읽기 전용 쿼리와 세트의 두 번째 MongoDB 서버 간의 균형을 맞추는 것이라고 생각했습니다 ...

고마워.

+0

나는 당신에게 답을 가지고 있지 않지만 나는 단지 출혈에 대한 당신을 upvoted :) – jcollum

답변

4

Mongoose의 "connectSet"명령을 사용하여 복제 세트에 연결하면 내 복제 세트간에로드 균형이 잡힌다는 인상을 받았습니다.

이 인상이 잘못되었습니다.

기본적으로 MongoDB는 &을 읽으며 복제 세트의 기본 구성원에게 전송됩니다. 복제 세트의 주 목적은 고 가용성 (HA)을 제공하는 것입니다. 기본 노드가 다운되면 드라이버는 기존 연결에 대한 예외를 throw 한 다음 새 주 노드로 선출 된 노드에 자동 다시 연결합니다.

여기에는 드라이버가 개입없이 구성 변경없이 새로운 주를 찾을 것이라는 아이디어가 있습니다.

실종되었거나 복제 세트의 설정이 있습니까?

당신이 정말 당신이 를 상태 쿼리에 플래그를 구성 할 수 있습니다 보조에 쿼리를 보내려면

"이 쿼리는 보조로 전송 될 수 있습니다." 구현 방법은 Mongoose의 경우 here's a version입니다.

보조 노드에 쿼리를 보내는 것이 기본 동작이 아니며 많은 함정이 있습니다. MongoDB의 대부분의 구현은 단일 쓰기 잠금에 의해 제한되므로 읽기로드 균형 조정이 필요하지 않습니다. 읽기 확장은 성능 향상을 보장하지 않으며 쉽게 더티 읽기가 발생할 수 있습니다.

이러한로드 균형 조정을 수행하기 전에 절대적으로 필요한로드 균형 조정을 수행하십시오. 샤딩이 더 좋은 옵션 일 수 있습니다.

관련 문제