2009-07-07 4 views
0

클러스터의 각 서버에는 15 분마다 서버 중 하나에서 동기화되는 검색 색인이 있습니다. 이것은 flock 때문에 인덱스에 추가하는 것이 nfs에서 발생할 수 없기 때문에 수행되었습니다. documentation을 참조하십시오 (그렇지 않으면 인덱스는 모든 서버가 액세스하는 공유 폴더에 있습니다).부하 분산 환경에서 Zend_Search_Lucene 인덱스 관리

내가 실행중인 문제는 색인을 수정해야하는 조치를 취한 경우 색인의 로컬 사본에서 수정이 발생하고 해당 변경 사항을 상위 항목과 다시 동기화하는 방법이 필요하다는 것입니다. 가능한 한 가장 방해가되지 않는 방법 (다음 동기화에 의해 클러스터의 모든 서버로 변경 내용이 전파되도록).

http를 통해 부모 서버 색인을 참조하려고했지만 mkdir이 http를 통해 수행 될 수 없기 때문에이 방법은 작동하지 않습니다. 원격 서버의 색인을 참조 할 수있는 방법이 있습니까?

답변

0

이 상황을 이해 했으므로 서버 색인 중 하나가 수정되면 rsynch의 원본으로 기본 색인을 사용하여 다음 번에 업데이트를 받기를 원합니다. rsync가 발생하여 모든 서버를 업데이트로 업데이트합니다.

주 서버 색인을 rsync 처리하는 대신 rsync를 사용하여 rsync의 원본으로 최신 수정 날짜를 가져 오지 않는 이유는 무엇입니까? 따라서 D 서버의 색인에 대한 최신 업데이트가 주 서버 A의 색인보다 크면 D

의 서버를 모두 동기화하십시오.

정확한 상황을 이해 했습니까?

편집

는 그런 경우에, 인덱스-ES를 구축 코드를 편집 등 쉘에 간부 인 호출을 실행하는 경우, 인덱스의 이전 빌드가 달랐다 있는지 확인 라인을 추가 명령을 직접 작성하여 중앙 서버를 업데이트하십시오. 이렇게하면 중앙 서버가 즉시 업데이트를 수신하고 큰 동기화가 중단되면 문제가 해결됩니다.

+0

이 솔루션의 문제는 서버 B와 C가 동기화 된 이후에도 동기화가 이루어져서 다른 하나를 덮어 쓰게된다는 것입니다. – Akeem

+0

아래의 솔루션과 'Jason 's'솔루션을 살펴보십시오. 아키텍처가 매우 유사하며 가장 좋은 방법 인 것 같습니다. –

0

제가 생각할 수있는 가장 좋은 해결책은보다 전통적인 마스터/슬레이브 복제 패턴을 따르는 것입니다. RDBMS 복제에서 영감을 얻으십시오 : 모든 쓰기는 마스터로 가야합니다.

물론이 작업은 직접 수행 할 수 없습니다. 앞서 언급했듯이 원격 인덱스에 직접 쓸 수는 없습니다.

이렇게하면 슬레이브가 간접적으로 색인을 업데이트하는 데 사용할 수있는 API/서비스 공개 옵션이 있습니다. 그런 다음 모든 변경 사항은 다음 예약 된 푸시시에 동기화됩니다. 이것이 설계에 중요한 변화가 될 수 있음을 알고 있지만, 복제 된 환경이나 분산 된 환경에서는 이것이 종종 필요합니다.

+0

Api 노출 아이디어가 마음에 들지만, 얼마나 빠를 지 확인합니다. 더 나은 옵션은 SOLR을 사용하는 것일 수 있습니다. – Hemc

관련 문제