2011-10-21 3 views
3

현재 중재자가있는 두 대의 서버가있는 현재 Mongo 구성을 설정할 때 이해해야하는 한 가지 사실이 있습니다.Mongo DB에 대한 복제 세트를 질의하는시기

이제 내가 먼저 마스터에 대한 레코드를 만들었습니다. 대한 Slave OK 내가 보조 서버에 내가

rs.slaveOk(); 

을 설정하는 데 필요한 것을 발견 몽고의 웹 사이트에 읽는시

error: { "$err" : "not master and slaveok=false", "code" : 13435 } 

: 보조에 갔다는 그것을 찾기 위해 노력하고 내가처럼 보였다 오류를 수신했다 그러나 나는 PHP를 서버에 질의 할 때 왜 이것을 할 것인지 완전히 이해하지 못한다. 또는 내가 모든 점을 잘못 이해하고 있다면 그러나이 읽기 부하를 분산 나타나지 않습니다 ..

$m = new Mongo("mongodb://localhost:27017", array("replicaSet" => "myReplSetName"));?> 

이 후 마스터에 연결하는 것 : 기본적으로

나는 서버 풀을 가지고 있고, 나는 그런 그들을 연결 계획했다 그렇다면 어떻게하면 두 서버에 걸쳐서 쿼리를 더 빠르게 만들 수 있도록 읽기로드를 배포 할 수 있습니까?

미리 복제 세트에 연결 허용 방법입니다

+0

궁금한 점 : Doctrine MongoDB 및/또는 Symfony2를 사용하고 있습니까? –

답변

10

에 감사드립니다. 명명 된 서버가 가동되었다고 가정하면 드라이버 연결은 클러스터의 나머지 서버를 검색하고 허용 될 때 쿼리를 지시 할 수있게되며 페일 오버 이벤트를 통해 "PRIMARY"지정을 따릅니다. 하지만이 "시드 목록"에 다른 서버를 추가하는 것이 좋습니다. 그러면 "시드"서버 중 하나가 다운 된 경우에도 연결이 계속 성공할 수 있습니다.

읽는 중 ...이 동작은 실제로 운전자의 재량에 따라 다릅니다. 그러나 일반적으로 받아 들여지는 의미는 : 만약 slaveOk 읽기가 요구된다면, 읽기 질의가 이용 가능하다면 그 읽기 질의는 2 차 서버로 갈 것입니다. 아무도 사용할 수없는 경우에만 PRIMARY로 이동합니다. 쓰기 쿼리는 물론 항상 PRIMARY로 이동합니다.

읽기 부하의 일부를 PRIMARY 점유율을 가지고에 대한 하나의 제안, 당신은 slaveOk 같은 쿼리 플래그 때 무작위로하는 것입니다

- 플래그로 see the discussion here

PHP에서 slaveOk 같은 쿼리, 당신은 몇 가지에이 비트를 설정할 수 있습니다 레벨 - 연결, 데이터베이스, 콜렉션 또는 클러스터 - API details here 이것은 앞서 언급 한 임의 화 기법을 구현하는 여러 가지 가능한 방법을 제공합니다. 예를 들어 연결 풀의 연결 중 절반에 slaveOk 비트가 설정되어 있는지 확인하십시오.

희망 하시겠습니까?

+1

시드 목록에 중재자가 없어야한다는 점에 유의하십시오. https://jira.mongodb.org/browse/PHP-392를 참조하십시오. –