elasticsearch 원본 분석의 인덱스 작업 (9)
6928 단어 elasticsearch
createIndex
1. 인덱스를 만들고 클라이언트가 인덱스의 기본 정보(인덱스 이름, 섹션 수, 복사본 수)를 제출하여 CreateIndex Request 클래스로 봉인하여 서버에 제출합니다.2. 서비스 측이 요청을 받았고 actionname와 판단하여 구체적인 응답 action을 얻었으며 구체적으로elasticsearch 원본 분석의 서비스 측을 참조한다(4).TransportCreateIndex Action을 실행하는 masterOperation입니다. 이 클래스는 TransportMasterNodeAction을 계승합니다.
TransportMasterNodeAction 클래스,master 노드 실행 클래스,master 노드에서 실행되는 모든 응답 클래스의 부류입니다.마스터 노드 판단 요청과 처리 실패 재시도 기능을 주로 완성합니다.HandledTransportAction 클래스를 계승하여doExecute 방법을 실현하였다.새로운 비동기 단일 스레드 (이동기 응답, 수신 리퀘스트 스레드를 차지하지 않음) 를 시작합니다. 이 노드가 마스터 노드라면 마스터 Operation을 시작합니다.만약 그렇지 않다면mastr 노드에 전송하여 실행하고 추상적인 방법masterOperation을 실행하여 하위 클래스에서 실현한다.또한 ClusterStateObserver를 통해waitForNextChange에서 오류 재시도 기능이 완료되었습니다.
ClusterStateObserver 클래스, 클러스터 상태 모니터.집단 상태 처리를 간소화하는 도구 클래스로 실패한 재시도와 다른 집단 상태에 의존하는 데 사용됩니다.그 중에서wait For Next Change(listener,state Predicate) 방법은 ① 집단 상태가 변화하고 전송된state Predicate를 만족시킬 때, 또는 ② 시간 초과 시간 Out Value에 도달할 때(cluster Service.add Timeout Listener를 빌려 실현), 리셋을 실행한다.
3、TransportCreateIndexAction.masterOperation 방법은 CreateIndexRequest를 CreateIndexClusterStateUpdateRequest로 변환하고 MetaDataCreateIndex Service를 호출합니다.createIndex 메서드이 방법은clusterstate에서 새로운 index (only Create Index 방법) 를 만들고 지정한 수의 active 상태의shard 던전 수 (active Shards Observer.wait For Active Shards 방법이 실현되기를 기다리며 최종적으로listener에게 되돌려줍니다.
1. clusterstate index, CreateIndexClusterStateUpdateResponse#isAcknowledged() true, false
2. clusterstate , active shard , CreateIndexClusterStateUpdateResponse#isShardsAcked() true, false
4, onlyCreateIndex 메서드는 내부적으로 cluster Service를 수행합니다.submitStateUpdateTask, 집단 상태 수정 작업을 제출합니다. 제출 작업의 실행 논리는 AckedClusterStateUpdateTask 클래스 내부의execute 방법입니다.내부 논리:
1. index index settings , request
2. findTemplates
3. customs、mappings、templatesAliases、templateNames
4. indexSettings
5. indicesService index ,mapperService mappings(indicesService.createIndex,mapperService.merge)
6. IndexMetaData
7. ClusterState updatedState
8. index open, allocationService.reroute shard
9. (indicesService.removeIndex)
5. 수정 완료clusterstate,submitState UpdateTask를 통해 집단 상태 수정 제출(상단계 논리), 1 발표 집단 상태(master일 경우), 2 알림 집단 상태 응용 프로그램 applier(예를 들어 Gateway 서비스 지속화state, IndicesCluster State 서비스 등), 3 알림 집단 상태 감청기listener(gateway 등 포함)를 통해 집단 기능을 완성한다.다른 집단은 집단 상태의 변화를 받아들여 indices 서비스 서비스를 시작해야 한다(IndicesClusterState Service.applyClusterState를 통해 완성).
6. clusterstate 수정에 성공하여 지정된 수의active 상태의shard 복사본 수를 기다리기 시작합니다.ActiveShardsObserver.waitForActiveShards.핵심적인 판단 논리는 다음과 같다.
Predicate shardsAllocatedPredicate = newState -> activeShardCount.enoughShardsActive(newState, indexName);
위의 Predicate 판단과 실행은 ClusterStateObserver를 통해 이루어집니다.waitForNextChange 메서드가 완료됩니다.최종 판단 실행 결과는 ShardsAcked로 설정됩니다.
이로써 es 집단은createIndex 기능을 완성했다.
existIndex
색인 존재 조작은 비교적 간단하다. Transport Indices Exists Action 클래스를 통해 완성된다. 이 클래스는 Transport Master Node Read Action 클래스를 계승하고 이름은master 노드에서 읽기 조작을 할 수 있다.TransportIndicesExistsAction.masterOperation에서 indexName을 해석했습니다.어떤 집단 상태 처리도 할 필요가 없다.
Override
protected void masterOperation(final IndicesExistsRequest request, final ClusterState state, final ActionListener listener) {
boolean exists;
try {
// Similar as the previous behaviour, but now also aliases and wildcards are supported.
indexNameExpressionResolver.concreteIndexNames(state, request);
exists = true;
} catch (IndexNotFoundException e) {
exists = false;
}
listener.onResponse(new IndicesExistsResponse(exists));
}
해석의 과정은 실질적으로clusterState를 조회하는 것이다.metaData에 indexName이 있는지 여부, 없으면 예외를 던집니다. 해석 클래스 IndexNameExpression Resolver.concreteIndices
final Set concreteIndices = new HashSet<>(expressions.size());
for (String expression : expressions) {
AliasOrIndex aliasOrIndex = metaData.getAliasAndIndexLookup().get(expression);
if (aliasOrIndex == null) {
if (failNoIndices) {
IndexNotFoundException infe = new IndexNotFoundException(expression);
infe.setResources("index_expression", expression);
throw infe;
} else {
continue;
}
}
...
}
deleteIndex
CreateIndex를 이해하면 삭제도 간단합니다.서비스 측은 TransportDelete Index Action을 통해 이루어졌고 TransportMasterNode Action 클래스를 계승하여 마스터 노드의 실행과 재시도 기능을 완성했다.1、TransportDeleteIndexAction.masterOperation 방법은 request를 DeleteIndexClusterStateUpdateRequest로 바꾸어 deleteIndex Service를 실행합니다.deleteIndices 메서드.2. 색인을 삭제하는 것은 주로clusterstate 메타데이터를 수정하고 그 중의 index를 삭제한다.
for (final Index index : indices) {
String indexName = index.getName();
logger.info("{} deleting index", index);
routingTableBuilder.remove(indexName);
clusterBlocksBuilder.removeIndexBlocks(indexName);
metaDataBuilder.remove(indexName);
}
3、allocationService.reroute,shard를 재분배합니다.4. 새 clusterstate 생성을 수정하고submitStateUpdateTask를 통해 상태 발표를 합니다.여기에는 군더더기가 없다.
총결산
elasticsearch의 색인 관리 조작 분석 절차는 이미 분석이 끝났다.주로 세 가지 업무가 있다.
ElasticSearch의 인덱스 처리는 비교적 정교하고 각 부분의 구조 정의가 비교적 뚜렷하다. 예를 들어 TransportMasterNodeAction 메인 노드 조작, ClusterStateObserver 집단 상태 모니터링 집행기, 각종 Builder(clusterstate,setting) 등이다.그 원인은 집단 서비스 인식이 깊고 작가가 대단하기 때문이다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
kafka connect e elasticsearch를 관찰할 수 있습니다.No menu lateral do dashboard tem a opção de connectors onde ele mostra todos os clusters do kafka connect conectados atu...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.