Elasticsearch 기타 항목

4822 단어 elasticsearch

1.elasticsearch는 어떻게 마스터 선거를 실현합니까


elasticsearch 선주는 zenDiscovery 모듈이 책임지고 주로 ping(노드 간의 RPC를 통해 서로를 발견)과 Unicast(단방 모듈은 호스트 목록을 포함하여 그 노드를 제어하기 위해 ping통을 필요로 한다).마스터가 될 수 있는 모든 노드(node.master:true)에 대해nodeId 사전 정렬에 따라 매번 선거마다 자신이 알고 있는 노드를 순서대로 배열한 다음에 첫 번째 노드(0위)를 선택하여 마스터 노드로 간주합니다.만약에 어떤 노드에 대한 투표수가 일정한 값(master 노드 수 n/2+1이 될 수 있음)에 도달하고 이 노드 자신도 자신을 선택한다면 이 노드가 바로 master이다.그렇지 않으면 상술한 조건을 충족시킬 때까지 재선거할 것이다.

2.es 데이터 작성 프로세스

  • 클라이언트가 node를 선택하여 전송합니다. 이 node는coordinating node(조율 노드)입니다
  • coordinating node는document에 대한 루트를 진행하여 해당하는 node(primary shard)에 요청을 전달합니다.라우팅 알고리즘hashcode(document_id)%shards
  • 실제 node의parimaryshard 처리 요청을 처리한 다음 데이터를 Replica node에 동기화합니다
  • coordinating node 만약primaryshard 처리 요청을 발견하면 데이터를 Replica node에 동기화합니다
  • coordinating node 만약primary node와 모든replica node가 끝난 것을 발견하면 응답 결과를 클라이언트에게 되돌려줍니다

  • 3.es 데이터 읽기 프로세스


    docid를 통해 조회할 수 있습니다.docid에 따라hash를 진행합니다. 당시 docid가 그shard 위에 분배되었음을 판단하고 그shard에서 조회합니다
  • 클라이언트가 임의의 node로 요청을 보내서coordinate node가 됩니다
  • coordinate node는doc id에 대해hash 루트를 진행하여 요청을 대응하는 node로 전송합니다. 이때 round-robin 퀴즈 알고리즘을 사용하여primary shard와 그 모든replica 중 하나를 무작위로 선택하여 읽기 요청의 부하를 균형 있게 합니다
  • 요청을 받은 node는coordinate node에 문서를 되돌려줍니다
  • coordinate node에 문서를 클라이언트에게 되돌려줍니다

  • 4.es 쓰기 데이터의 밑바닥 원리


    1). document는 메모리 버퍼에 쓰고translog 로그를 씁니다
    2). refresh 작업이 실시간 검색인 이유: 새 세그먼트 (추가 역렬 인덱스) 를 작성하고 열기 위한 경량 프로세스를 refresh라고 합니다.1초마다 버퍼의 데이터를 새 segement로 만듭니다.이 새 세그먼트는 파일 시스템 캐시에 먼저 기록되고 나중에 디스크로 불러옵니다.그러나 파일이 캐시에 있으면 다른 파일처럼 열리고 읽을 수 있습니다.메모리 버퍼가 비워졌습니다.이 때 새로운segment의 파일이 검색될 수 있습니다. 이것은 문서가 검색될 때까지 1초가 걸릴 수 있음을 의미합니다. 이 속성을 변경하려면 다음과 같은 작업을 수행할 수 있습니다.
    put /index_test
    {
    	"settings":
    	{
    		"refresh_interval":"30s"	
    	}
    }
    

    3). flush 작업은 지속적인 변경을 초래합니다. 제출을 실행하고translog를 차단하는 행위는Elasticsearch에서flush라고 합니다.리셋 (refresh) 이 완료되면 캐시가 비워졌지만translog 로그는 비워집니다.translog 로그도 점점 많아질 것입니다. translog 로그가 한 한도값보다 크거나 30분이면flush 작업을 보냅니다.
  • 모든 메모리 캐시 영역의 문서가 새 segement에 기록됩니다..
  • 캐시 영역이 비워졌습니다
  • 커밋 포인트가 디스크에 기록됩니다
  • 파일 시스템은 fsync를 통해 디스크로 이동합니다
  • 오래된 translog가 삭제되었습니다

  • 조각이 30분마다 자동으로 (flush) 나translog가 너무 크면 리셋됩니다.flush 명령으로 수동으로 실행할 수도 있습니다.
    translog는 5초마다 디스크에 기록됩니다. (따라서 이 5s의 데이터가cache에 있고 로그가 오래 지속되지 않으면 잃어버립니다.)한 번의 삭제 수정 작업 후translog는replica와primaryshard에서 모두 성공해야만 성공할 수 있습니다. 조작 속도를 높이려면 비동기적으로 설정할 수 있습니다
    PUT /index_test
    {
     "settings": {
      "index.translog.durability": "async" ,
      "index.translog.sync_interval":"5s"
     }
    }
    

    그래서 총괄적으로 세 가지 작업이 있는데 1초에 한 번refresh는 실시간을 확보하고 5초에 한 번은translog의 지구화를 보증한다. 데이터가 지구화되기 전에 밑바닥을 남기고 30분에 한 번 지구화를 한다.

    4.es 데이터 검색 프로세스


    클라이언트가coordinate node로 보냅니다.
    조정 노드는 검색 요청을 모든shard에 대응하는primaryshard나replicashard로 전송할 수 있습니다.
    query phase: 모든shard는 자신의 검색 결과(doc id)를 조율 노드에 되돌려주고 조율 노드에서 데이터 통합, 정렬, 페이지 나누기 등 조작을 하여 최종 결과를 산출합니다.
    fetchphase: 이어서 조율 노드가 doc id에 따라 형 노드에서 실제 문서 데이터를 추출하여 클라이언트에게 되돌려줍니다.

    5.translog와commitpoint의 데이터 복구


    디스크에 지난번 지속적인commitpoint가 있습니다.translog에commitpoint가 있습니다. 이 두 개의commitpoint에 따라translog의 변경 기록을 답방하여 이전의 작업을 다시 실행합니다.

    6. 삭제 및 업데이트 방법


    문서가 삭제되었는데, 실제로는 그저 있습니다.del 파일에서 삭제가 표시됩니다.삭제된 문서는 검색에 일치할 수 있지만, 최종 결과가 되돌아오기 전에 결과에서 제거됩니다.
    문서 업데이트도 비슷한 작업 방식입니다. 문서가 업데이트되면 이전 버전의 문서가 삭제되고 문서의 새 버전이 새 세그먼트로 인덱스됩니다.두 버전의 문서는 모두 조회에 일치할 수 있지만, 삭제된 이전 버전의 문서는 결과집이 돌아오기 전에 제거됩니다.
    segment가 통합될 때 삭제된 문서는 삭제됩니다.삭제된 문서 (또는 업데이트된 문서의 이전 버전) 는 새 큰 segement로 복사되지 않습니다.

    7.segment 병합


    버퍼 데이터는segment에 갱신되기 때문에segment는 매우 많습니다. 이런 상황을 방지하기 위해es는 작은 segment를 통합합니다.그리고 물리적으로 소segement를 삭제합니다.
    세그먼트 병합 명령 수동 실행
    POST /index_test/_forcemerge?max_num_segements=1
    

    좋은 웹페이지 즐겨찾기