Elasticsearch * cluster internal workings

4451 단어 elasticsearch

Elasticsearch cluster internal workings


Elasticsearch를 사용할 때shard,replicate,failover를 오랫동안 걱정할 필요가 없다. 그러나 이것은 Elasticsearch 내부의 작업 절차를 이해하는 데 도움을 줄 것이다
Elasticsearch는 노드를 증가시켜 부하를 균등하게 할당하고 신뢰성을 증가시킵니다.
Elasticsearch는 천성적으로 분포식이다. 노드를 어떻게 관리하여 높은 확장성과 높은 가용성을 제공하는지 안다.이것은 너의 프로그램이 이런 것에 관심을 가질 필요가 없다는 것을 의미한다.

2.1 Empty cluster


빈 노드만 있는 집단
하나의 노드는 Elasticsearch의 실례이다.cluster 중의 여러 node, they have the same cluster.name.그들은 협동하여 데이터와 부하를 공유한다.새로운 노드에 가입하거나 하나의 노드를 삭제하면 집단이 감지하고 데이터를 균형 있게 한다.
그룹에 있는 node는master로 선출되며, cluster level의 일부 변경, 예를 들어create index,add ordel node 등을 임시로 관리합니다.마스터는doclevel의 변경이나 검색에 참여하지 않습니다. 이것은 데이터가 증가할 때 이 마스터는 집단의 병목이 되지 않는다는 것을 의미합니다.어떤 노드든 마스터가 될 수 있어요.
As user,clusterany node 통신.모든 node는 문서가 어느 node에 존재하는지 알고 있으며, 해당 node에 요청을 전달할 수 있습니다.우리가 방문한 node는 각 nodes가 되돌아오는 데이터를 수집하고 마지막으로 클라이언트에게 함께 되돌아옵니다.이 모든 것은 Elasticsearch가 처리합니다.

2.2 Cluster healthy


green、yellow、red.
GET /_cluster/health
{
   "cluster_name":          "elasticsearch",
   "status":                "green",
   "timed_out":             false,
   "number_of_nodes":       1,
   "number_of_data_nodes":  1,
   "active_primary_shards": 0,
   "active_shards":         0,
   "relocating_shards":     0,
   "initializing_shards":   0,
   "unassigned_shards":     0
}

색깔
의미
green
All primary-shard and replica-shard good
yellow
All primary-shard good,not all replica-shard is good
red
not all primary-shard is good

2.3 Add index


index는 여러 shards "logical namespace"를 가리키는 데 사용됩니다.
하나의shard는 인덱스의 모든 데이터의 일부분만을 저장하는 최소 단계의'worker unit'입니다.그러나 이제 우리는shard가 Lucene의 실례이고 그 자체가 완전한 검색엔진이라는 것을 알기만 하면 된다.우리의doc는shard에 저장되고shard에 인덱스되지만, 우리 프로그램은 그것들과 직접 통신하지 않고 index와 직접 통신합니다.
복제 필름은 주 필름의 복사본일 뿐, 하드웨어 고장으로 인한 데이터 분실을 방지할 수 있으며, 검색이나 다른shard에서 문서를 되찾을 수 있는 읽기 요청도 제공할 수 있다.
index 창설이 완료되면primary-shard의 수량은 고정되지만,replica-shard의 수량은 수시로 조정할 수 있습니다
index가 생성될 때primary-shard의 수량은 고정되지만,replica-shard의 수량은 수시로 조정할 수 있습니다.
그룹 중 유일한 빈 노드에blogs라는 인덱스를 만듭니다.기본적으로 하나의 인덱스는 5개의 메인 필름을 분배하지만, 시범적인 목적을 위해 우리는 3개의 primary-shard와 1개의 replica-shard만 분배합니다. (각각의 primary-shard는 replica-shard가 있습니다.)
PUT /blogs
{
   "settings" : {
      "number_of_shards" : 3,
      "number_of_replicas" : 1
   }
}
{
   "cluster_name":          "elasticsearch",
   "status":                "yellow", <1>
   "timed_out":             false,
   "number_of_nodes":       1,
   "number_of_data_nodes":  1,
   "active_primary_shards": 3,
   "active_shards":         3,
   "relocating_shards":     0,
   "initializing_shards":   0,
   "unassigned_shards":     3 <2>
}

사실상 모든 3개의 Replica-shard는 현재 unassigned 상태입니다. 노드에 분배되지 않았습니다.

2.4 Failover, 가로로 확장


장애 조치
수평 확장
shard 자체는 하나의 노드의 모든 자원을 사용할 수 있는 완전한 검색 엔진이다.우리는 6개의 섹션 (3개primary-shard and replica-shard) 을 가지고 있으며, 최대 6개의 node로 확장할 수 있으며, 각각의 node에는shard가 있고, 각각의 shard는 100% 이 노드의 자원을 사용할 수 있다.

2.5 추가 확장


우리는 6개 이상의 노드 begin으로 확장해야 한다.
primary-shard의 수량은create index에서 확정되었습니다.실제로 이 수량은 색인에 저장될 수 있는 데이터의 최대 수량을 정의했다(실제 수량은 당신의 데이터, 하드웨어와 응용 장면에 달려 있다).그러나primary-shard or replica-shard는 읽기 요청인 검색이나 문서 검색을 처리할 수 있기 때문에 데이터의 군더더기가 많을수록 우리가 처리할 수 있는 검색 토출량이 크다.이
복제 분할의 수량은 운행 중인 집단에서 동태적으로 변경할 수 있으며, 이것은 우리가 수요에 따라 규모를 확대하거나 축소할 수 있도록 한다.Replica-shard의 수를 원래의 1에서 2로 증가시킵니다.
PUT /blogs/_settings
{
   "number_of_replicas" : 2
}

blogs 인덱스는 현재 9개의 섹션이 있습니다. 3primary-shard와 6replica-shard입니다.이것은 우리가 9개의node로 확장하여 다시 각각node마다shard가 될 수 있다는 것을 의미한다.이렇게 이론적으로 검색 성능은 원시적인 3node 집단보다 3배 증가한다.

2.6 장애 대응


첫 번째 노드를 죽인 후 군집
primary-shard 1과 2는 Node 1을 죽였을 때 잃어버렸고, index는 primary-shard를 잃어버렸을 때 정상적으로 작동하지 않습니다.만약 이때 우리가 집단 건강을 검사한다면, 우리는 상태를 볼 수 있을 것이다. 레드: 모든primary-shard가 사용할 수 있는 것은 아니다!
다행히도 잃어버린 두 개의primary-shard의 전체 복사본이 다른 노드에 존재하기 때문에 newprimary-shard가 하는 첫 번째 일은 Node2와 Node3에 있는replica-shard를primary-shard로 업그레이드하는 것입니다. 이때 집단이 건강하게 옐로우 상태로 돌아가는 것입니다.

Reference articles


Elasticsearch 권위 있는 가이드

좋은 웹페이지 즐겨찾기