shard와 replica는 elasticsearch에서만 존재하는 개념은 아니다. DB쪽에서는 널리 쓰는 개념이니 알아두면 도움이 되겠지. 컴퓨터를 좀 안다 하면 RAID를 들어본 적이 있을거다. shard와 replica를 이해하는데 RAID 개념이 도움이 될 듯 하다.
RAID 0 / RAID 1
RAID는 여러개의 하드디스크를 용도에 맞게 구성해 사용하는 기술이다. 저장 속도를 높이기 위해 분할 저장을 하거나 안정성을 위해 복제본을 만들거나 패리티 비트를 쓰거나 하는 등의 기술이다.
RAID0은 stripe라고도 한다. 2개의 disk가 있을 경우 데이터를 나눠서 기록하는 방식이다. 이 방식은 데이터를 저장하는 속도를 높여주는 역할을 한다. disk가 한개라면 동시에 1개 데이터만 기록할 수 있지만 disk가 2개일 경우 동시에 2개 데이터를 분산해서 기록할 수 있다 보면된다.
RAID1은 mirror라고 한다. 2개의 disk가 있을 경우 같은 데이터를 각 디스크에 똑같이 기록하는 방식이다. 일종의 백업이라 볼 수 있겠다. disk 한개가 고장나도 다른 disk에 데이터가 있기 때문에 안정성이 있다.
자, 이제 본론으로 돌아와서 shard와 replica에 대해 알아보자.
Shard
shard는 쉽게 말하면 RAID0과 같다. elasticsearch는 indexing을 할 때 node 내부에 논리적으로 데이터 저장 공간을 만든다. 그리고 그 논리적 공간들에 데이터를 쭉 쓴다. 저장 공간이 1개라면 한번에 1개 데이터만 쓸 수 있겠지만 저장 공간을 논리적으로 나누게 되면 동시에 여러개 데이터를 분산해서 저장할 수 있게 된다.
elasticsearch에서는 shard 기본 세팅값이 5이다. 즉, 하나의 index(RDB에서 table과 유사한 개념)를 생성하고 데이터를 indexing하게 되면 node 내부에 논리적으로 5개의 shard가 생성되게 된다. 물론 또 다른 index를 생성하게 되면 그에 대한 shard는 새로 생성된다.
만약 data node가 2개일 경우 아래와 같이 2개의 node에 3개, 2개의 shard가 생성되게 된다.
Replica
replica는 RAID1과 유사하다. 데이터가 shard에 저장되게 되면 이 shard에 대한 복제본을 만드는 것이다. 원본 shard가 장애가 나더라도 복제본 shard를 통해 데이터를 제공할 수 있게 되어 가용성을 증가시킬 수 있게 된다. 또한 하나의 데이터를 2개의 shard가 갖고 있기 때문에 검색 성능 향상에도 도움이 된다.
elasticsearch의 replica 기본 세팅값은 1이다. 즉, 하나의 index를 생성하고 데이터를 indexing을 하게 되면 1개의 replica가 추가로 생성된다는 의미이다. 2개의 data node를 사용하고 shard, replica를 기본 설정으로 사용하게 되면 아래와 같이 shard와 replica가 구성된다. 붉은색 박스가 primary shard(원본 데이터)이고 녹색 박스가 replica shard(복제본)이다. replic의 기본 기능이 복제본을 통해 원본 shard의 장애를 대응하는 것이라 했다. 한 node 안에 동일 shard에 대한 primary와 replica가 함께 존재하는 경우에 해당 node가 장애가 나게 되면 primary, replica shard 모두 죽으므로 정상적으로 데이터를 제공할 수 없게 된다. 따라서 동일 shard에 대한 primary, replica는 동일 node안에 존재할 수 없다. 그래서 아래처럼 node1이 갖고 있는 shard에 대한 replica는 node2에 생성되고 node2가 갖고 있는 shard에 대한 replica는 node1에 생성되는 것이다.
shard와 replica는 생성하는 index(database)별로 생성이 된다. 위와 같이 shard 5개, replica 1개로 설정할 경우 index당 10개의 shard가 생성된다.
shard와 replica에 대해 간략히 알아봤다.
아직 index의 구조를 살펴보지 않아 좀 헷갈릴 수 있다. 추후에 실습을 진행하면서 index의 구조에 대해 알게 된 다음 이 포스팅을 다시 보면 아마 이해가 잘 갈 것 같다.
끝.
'elastic-stack' 카테고리의 다른 글
VM을 활용한 Elastic Stack 실습 환경 구축 2 - elasticsearch 기본 설정 (0) | 2020.01.16 |
---|---|
VM을 활용한 Elastic Stack 실습 환경 구축 1 - VM 생성하기 (2) | 2020.01.11 |
Elasticsearch의 Cluster와 Node 개념 (0) | 2020.01.10 |
Elasticsearch 실습 환경에 관해서.. (0) | 2020.01.05 |
Elasticsearch가 빠르다는데..? inverted index? (1) | 2020.01.05 |
댓글