1.1.1 분포식 구조의 투명한 숨김 특성(Elasticsearch 집단의 분배가 얼마나 합리적인가) ElasticSearch는 복잡한 처리 메커니즘을 숨긴 분산 아키텍처입니다. 슬라이드 메커니즘(shard): 우리는 데이터가 어떤 메커니즘에 따라 슬라이드를 나누는지, 마지막으로 어떤 슬라이드에 넣는지 신경 쓸 필요가 없다 섹션 복사본 (replica): 서버가 언제든지 고장나거나 다운될 수 있습니다. 이 때shard는 잃어버릴 수 있기 때문에 각각shard에 여러 개의 Replica 복사본을 만들 수 있습니다.리플리카는shard가 고장났을 때 데이터를 잃어버리지 않도록 예비 서비스를 제공할 수 있으며, 여러 개의 리플리카는 검색 작업의 흡수량과 성능을 향상시킬 수 있다.primaryshard(인덱스를 만들 때 한 번 설정, 수정할 수 없음, 기본 5개), replicashard(수시적으로 수량을 수정, 기본 1개), 기본 인덱스당 10개의shard, 5개의primaryshard, 5개의replicashard, 최소 고가용 설정, 2대의 서버 그룹 발견 메커니즘(cluster discovery): 현재 es 프로세스를 시작했습니다. 두 번째 es 프로세스를 시작할 때 이 프로세스는node로서 자동으로 그룹을 발견하고 가입합니다. shard 부하 균형: 예를 들어 현재 10shard가 있고 집단에 3개의 노드가 있습니다. es는 각 노드의 균형을 유지하는 부하 요청을 균형 있게 분배합니다. 요청 라우트:!!es 루트 원리는es에 있습니다. 하나의 index는 조각으로 나뉘어져 있습니다. 하나의 index에는 많은 문서가 존재합니다. 이 문서는 다른shard에 저장되고 하나의 문서는primaryshard에만 존재합니다. 그러면 클라이언트가 문서를 만들어서es에 저장할 때es 내부에서 이 문서가 다른primaryshard에 저장되는 것을 결정해야 합니다. 이것이 바로 es의 문서 루트 분배입니다. 1.1.2 확장 메커니즘 수직 확장: 새로운 기계를 구입하여 기존의 기계를 교체하다 수평 확장: 직접 기계 증가 rebalance: 노드 증가 또는 감소 시 자동 균형 마스터 노드: 마스터 노드의 주요 직책은 집단 조작과 관련된 내용입니다. 예를 들어 색인을 만들거나 삭제하고 어떤 노드가 집단의 일부분인지 추적하며 어떤 부분을 관련 노드에 분배할지 결정합니다.안정적인 주노드는 집단의 건강에 매우 중요하다. 노드 대등: 모든 노드는 요청을 받아들일 수 있고, 모든 노드는 요청을 받은 후에 이 요청의 루트를 관련 데이터의 다른 노드에 전달할 수 있으며, 원시 요청을 받은 노드는 데이터를 수집하여 클라이언트에게 되돌려줄 수 있다.
1.2 분할 및 복제본 메커니즘
index는 여러 개의shard
를 포함한다
모든shard는 최소 작업 단원으로 부서 데이터를 적재한다.모든shard는 하나의 루틴 실례로 색인을 만들고 요청을 처리하는 완전한 능력이 있다
노드를 증감할 때,shard는 자동으로nodes에서 부하 균형
primaryshard와 replicashard, 모든 문서는 특정한 primaryshard와 그에 대응하는 replicashard에만 존재하고 여러 개의 primaryshard
primaryshard의 수량은 색인을 만들 때 고정됩니다.replicashard의 수량은 언제든지 수정할 수 있습니다(문서를 저장할 때 루트 Id에 따라hash 알고리즘을 통해 이 문서가 어느 메인 슬라이드에 저장되었는지 확인하기 때문에 메인 슬라이드의 수량이 수정되면 같은 루트 Id가 이 문서를 읽고hash 알고리즘을 통해 이 문서가 있는 슬라이드의 위치를 확정하지만 이때 슬라이드의 위치는 원본 파일이 저장된 위치가 아니기 때문에 데이터가 부족하여 데이터를 찾을 수 없음)
(인덱스를 만들 때 지정하지 않으면)primaryshard의 기본 수량은 5,replica는 1입니다. 즉, 기본값은 10개의shard,5개의primaryshard,5개의replicashard
primaryshard는 자신의 Replicashard와 같은 노드에 놓을 수 없습니다(그렇지 않으면 노드가 다운되고 primaryshard와 사본이 모두 분실되어 용착의 작용을 하지 않습니다). 그러나 다른 primaryshard의 Replicashard와 같은 노드에 놓을 수 있습니다
위의 설정에 따라 색인을 만들 때, 3개의primaryshard를 하나만 있는 node에 분배하고, 나머지 3개의replicashard는 분배할 수 없습니다. (하나의shard 복사본replica는 같은 노드에 있을 수 없습니다.)클러스터는 정상적으로 작동할 수 있지만 노드 다운이 발생하면 데이터가 모두 손실되고 클러스터를 사용할 수 없어 요청을 받아들일 수 없습니다.
# yellow( )
GET _cat/health
1.4 두 노드 환경에서 색인 분석 만들기
3개의primaryshard를 하나의node에 분배하고, 다른 3개의replicashard를 다른 노드에 분배하다 primary shard와 replica shard가 동기화되어 있음 primaryshard와replicashard는 클라이언트의 요청을 처리할 수 있습니다
1.5 수평 확장 과정
확장 후primaryshard와replicashard는 자동 부하 균형
확장 후 각 노드의shard가 감소하면 각각shard에 분배된 cpu, 메모리, IO 자원이 더욱 많아지고 성능이 향상된다
확장의 한계, 만약에 6개의shard가 있다면 확장의 한계는 6개의 노드이고 각 노드에 하나의shard가 있다. 만약에 확장의 한계를 초과하고 싶다면 예를 들어 9개의 노드로 확대하면 리플리카shard의 개수를 증가시킬 수 있다
6개의shard, 3개의 노드, 최대 몇 개의 노드가 있는 서버의 다운타임을 견딜 수 있습니까?(용량) 3개 노드, 6개shard, 최대 1대의 서버 다운을 받아들여 용량을 높일 수 있습니까?다운된 데스크톱의 수가 많을수록 용량성이 높아진다. 다운된 데스크톱의 개수를 증가한다(shard의 개수를 증가하면 각 노드 아래에 더 많은shard가 있고 충분한 수량으로 증가하면 한 노드가 모든 데이터를 포함할 수 있다. 그러면 한 노드가 있으면 서비스가 정상적으로 진행될 수 있다. 일반적으로shard의 총 수량 = 노드 개수 * 주shard 개수) 예를 들어 현재 3개의primaryshard, 3개의node가 있다.최대 용량 오류율을 달성하기 위해서는 6개의 Replica shard를 추가해야 합니다. 이렇게 하면 최대 두 대의 서버 다운을 용인할 수 있습니다. 요약: 용량 확장은 시스템의 토출량을 향상시키는 동시에 용량 오류성을 고려해야 합니다. 즉, 가능한 한 많은 서버가 다운되고 데이터가 손실되지 않도록 해야 합니다
1.6 ES 내결함성 메커니즘
9개의shard, 3개의 노드를 예로 들면:masternode가 다운되면 모든primaryshard가 Activestatus가 아니기 때문에 이때의 집단 상태는red입니다.
오류 처리의 첫 번째 단계: 마스터로 서버 한 대 선택
용착 처리의 2부: 새로 선출된 마스터는 끊어진primaryshard의 어떤replicashard를primaryshard로 승급합니다. 이때 집단의 상태는 yellow입니다. replicashard가 하나 부족하기 때문에 모든 replicashard가 Activestatus
가 아닙니다.
용량 오류 처리의 세 번째 단계: 고장난 기계를 다시 시작하면 새 마스터는 모든 복사본을 이 노드에 복사합니다. (다운된 후 발생하는 수정을 동기화합니다.) 이때 집단의 상태는 그린입니다. 모든 primary shard와 Replica shard는 Active status
이기 때문입니다.
1.7 문서의 핵심 메타데이터
_index: 한 문서가 어느 인덱스에 저장되는지 설명합니다. 같은 인덱스에 저장된 것은 비슷한 문서입니다. (문서의field는 대부분 같습니다) 인덱스 이름은 소문자여야 합니다. 밑줄로 시작할 수 없고 쉼표를 포함할 수 없습니다
_type: 문서가 색인에 속하는 유형을 나타냅니다. 하나의 색인 아래에는 하나의 type만 있을 수 있습니다. 유형명은 대문자나 소문자일 수 있습니다. 밑줄로 시작할 수 없고 쉼표를 포함할 수 없습니다
_id: 문서의 유일한 표지, 색인, 유형과 함께 유일하게 문서를 표시합니다. 수동으로 값을 지정할 수도 있고,es에서 이 값을 생성할 수도 있습니다
1.8 문서 id 생성 방식
수동 지정은 보통 다른 시스템의 기존 데이터를 es로 가져올 때
es 생성 id값es 생성의 길이는 20문자로base64 인코딩을 사용하여 URL이 안전합니다.GUID 알고리즘을 사용하여 분산된 동시 생성 Id 값이 충돌하지 않음
1.9 문서 내용 원리 해석 변경
POST: 사용자가 전달한 데이터에 따라doc를 조회한 다음에 사용자가 제출한 데이터를 사용하여 doc에 업데이트하고 기존doc를deleted로 표시하여 이doc에 따라 새로운doc
를 만듭니다
PUT: 먼저 es에서 doc를 조회하여 사용자에게 되돌려주고, 사용자는 수정된 doc를 es에게 전달하고, es는 원래의 doc를 deleted로 표시하고, 사용자가 전달한 doc를 새로운 doc로 만듭니다
요약: ①post방식은put방식보다 네트워크 데이터 전송 횟수가 적고(조회가 사용자에게 되돌아갈 필요가 없음) 성능을 향상시켰다 ②post방식은 문서를 조회하는 것부터 문서를 수정하는 것부터 새로운 문서를 만드는 것까지 모두 es내부에서 이루어졌다 ③post방식이 발생하고 충돌할 가능성이 낮아졌다
1.10 문서 데이터 루트 원리 분석
데이터 루트: 하나의 인덱스는 여러 개의 블록으로 구성되어 있으며, 하나의 문서를 추가(보기, 수정, 삭제)할 때es는 이 문서가 어느 블록에 저장될지 결정해야 한다. 이 과정을 데이터 루트(routing)
라고 부른다.
라우팅 알고리즘:
shard = hash(routing) % number_of_primary_shards
예시: 인덱스 하나,primaryshard ① 세 개가 삭제될 때마다routing 값이 있습니다. 기본값은 문서의_id의 값 ② 이 루팅 값에 대해 해시 함수를 사용하여 계산하기 ③ 계산된 값과 주분편의 개수와 나머지 값은 반드시 0----(number_of_primary_shards-1) 사이이며, 문서는 대응하는shard에 루팅 기본값은 문서의_id의 값, 수동으로 값을 지정할 수도 있습니다. 수동으로 지정하면 부하 균형과 대량 읽기 성능을 향상시키는 데 도움이 됩니다.
primaryshard 개수는 확정되면 수정할 수 없습니다
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다: