Elasticsearch

Elasticsearch shard

Mussyan 2020. 12. 11. 13:43

Es shard

Elasicsearch를 시작하게 되면 하나의 Elasticsearch 노드가 생성되며 이 노드는 동일한 네트워크 상에서 같은 클러스터명을 같는 클러스터가 존재하는 지를 찾게 된다. - Elasticsearch cluseter? 

만약, Discovery 결과 찾은 클러스터가 없다면 이 노드는 스스로 클러스터를 생성하게 되고 만약 클러스터가  이미 존재한다면 해당 클러스터에 연결된다.

새로운 클러스터가 생성되었다면 노드에는 아직 어떠한 인덱스도 존재하지 않는 상태이며, 새로운 인덱스를 생성할 때 인덱스를 몇 개의 shard로 나누어 저장할 것인지를 정의할 수 있다.

Shard의 개수를 따로 지정하지 않는다면 Elasticsearch의 기본 shard 개수인 5개로 데이터가 나누어져 저장된다.

만약 노드가 기존에 존재하던 클러스터에 연결되고 해당 클러스터에 이미 인덱스가 존재한다면 해당 인덱스 shard들은 추가된 노드에 균일하게 재분산된다.

 

 

그래서 shard는 뭘까?

Elasticsearch를 비롯한 분산 데이터베이스에서 shard란 일종의 파티션과 같은 의미이며 데이터를 저장할 때 나누어진 하나의 조각에 대한 단위라고 볼 수 있다.

주의할 점은 각각의 shard는 데이터에 대한 복사본이 아니라, 데이터 그 자체라는 점. shard가 노드에 저장되어 있는 상태에서 하나의 노드가 추가 된다면 기존에 존재하던 shards는 각 노드에 균일하게 재분산된다.

이렇게 가장 먼저 생성되는 데이터 shard를 primary shard라고 한다.

 

 

왜 shard를 사용할까?

 

Elasticsearch는 분산 검색엔진이기 때문에 이렇게 데이터를 나누어 저장하는 방식으로 대용량 데이터에 대한 분산처리를 가능하게 한다.

Primary shard는 각 인덱스 별로 최소 1개 이상 존재해야 하며 Shard가 많아지면 그만큼 데이터양의 증가에 대한 Elasticsearch 노드의 확장으로 대응이 가능하다는 장점이 있지만 shard 그 자체도 일종의 비용이라고 할 수 있기에 데이터양의 예측치를 이용하여 적절한 수의 shard를 결정하는 것이 중요하다.