2014-07-18 5 views
0

LBHttpSolrServer의 경우 쿼리 흐름과로드 균형 조정이 어떻게 작동하는지 이해하고 싶습니다. 하나의 컬렉션으로 SolrCloud를 설정했으며 그 컬렉션에는 4 개의 샤드가 있으며 각 샤드에는 마스터와 복제본이라는 두 개의 노드가 있습니다.LBHttpSolrServer의 쿼리 동작 이해

다음과 같이 LBHttpSolrServer를 구성했습니다. 내 이해 SOLR 및 solrj에서

SolrServer lbHttpSolrServer = new LBHttpSolrServer("shard1_master:8080/solr/","shard2_master:8080/solr/","shard3_master:8080/solr/","shard4_master:8080/solr/","shard1_replica:8080/solr/","shard2_replica:8080/solr/","shard3_replica:8080/solr/","shard4_replica:8080/solr/",); 

  1. LBHttpSolrServer는 서버의 목록 위에 핑을 유지하고 라이브 서버의 목록을 유지, 다음과 같이 작동합니다.
  2. 쿼리가 발생할 때마다 목록에서 하나의 서버를 선택합니다 (라운드 로빈 방식)
  3. 선택한 서버 서버에 쿼리를 보냅니다.
  4. 쿼리가 solr 노드에서 실행되면 나머지 파편에 쿼리를 내부적으로 배포하고 결과를 수집, 병합, 순위 지정하고 응답을 다시 사용자에게 보냅니다.

내 혼란이 포인트 번호 4에 있는데, 제 이해가 맞습니까? 그렇지 않다면 수정하십시오. 그리고 LBHttpSolrServer에 8 개의 노드를 모두 전달해야하거나 아니면 4 개만 있으면 충분합니다.

답변

1

네, 맞습니다. 그러나 LBhttpSolrServer를 사용하는 대신 클라우드를 인식하는 SolrCloudServer를 사용할 수 있습니다.

CloudSolrServer는 쿼리중인 컬렉션을 구성하는 노드 에 자동으로 부하 분산 요청을로드합니다. 최신 버전의 클라이언트는 올바른 샤드의 리더에게 직접 업데이트를 라우팅하므로 서버로드가 줄어들고 인덱싱 속도가 빨라집니다.

내부적으로 CloudSolrServer는 LBHttpSolrServer의 인스턴스를 사용하지만 URL 목록이 동적으로 관리되므로 프로그램에서 걱정할 필요가 없습니다.

http://lucene.apache.org/solr/4_9_0/solr-solrj/org/apache/solr/client/solrj/impl/CloudSolrServer.html