프라이머리 샤드 개수는 변경이 불가능하다

인덱스를 생성할 때 지정한 프라이머리 샤드의 개수는 변경이 불가능하다. 따라서 인덱스를 생성할 때 데이터의 크기가 얼마나 증가할 것인지 잘 고려를 해서 샤드의 개수를 정해야한다.

엘라스틱서치의 샤드는 두가지 종류가 있다.

프라이머리 샤드 개수를 변경하지 못하는 이유

한 샤드 내부에서 실질적인 검색엔진 기능을 담당하는 루씬은 그 자체만으로 완전히 독립적인 존재다.

그렇기 때문에 다른 샤드의 존재를 알지도 못할 뿐더러 세그먼트는 불변적이기 때문에 변경이 불가능하다. 그래서 프라이머리 샤드의 개수를 조정한다는 건 세그먼트를 재배열 한다는 뜻이고, 이것은 루씬의 특성에 의해 변경이 불가능하다.

레플리카 샤드의 개수 변경

프라이머리 샤드와는 달리 레플리카 샤드의 개수 변경은 자유롭다. 왜냐하면 복제본 이기 때문에 단순히 복사만 하면 되기 때문이다.

복제본의 개수는 장애 상황시 빠른 복구를 위해 1개 이상의 세트를 유지하는 것이 좋으며, 너무 많은 복제본이 존재하여도 색인 성능이 저하될수 있기 때문에 테스트 후 결정하는 것이 좋다. 복제복이 여러개 존재하면 읽기 분산을 부하할 수 있으므로 읽기성능과 색인성능 중 중요한 요소에 따라 결정한다.

클러스터 샤드 개수와 마스터 노드

클러스터의 샤드는 마스터 노드가 관리를 한다. 샤드가 많아질수록 마스터 노드의 부하도 증가하게 된다.

너무 많은 샤드에 의해 자칫 마스터 노드의 메모리가 부족하여 장애가 발생할 경우 클러스터 전체가 마비될수 있기 때문에 마스터 노드에 문제가 생기지 않도록 관리를 해야한다. 또한 마스터 노드는 장애 발생시 레플리카를 이용하여 샤드를 복구하는 역할도 수행한다.

샤드의 장애와 복구

프라이머리 샤드에 문제가 발생할 경우 레플리카 노드가 프라이머리 샤드로 전환되어 서비스를 계속 수행하게 된다.

그와 동시에 다른 노드가 새로운 레플리카 샤드로 새롭게 생성된다. 장애가 발생 했던 노드가 복구되면 복구된 노드로 일부 샤드들이 다시 이동한다. (이 과정에서 네트워크 비용이 많이 발생할수 있음)

이러한 동작을 통해 클러스터의 균형을 이루게 되며, 샤드의 크기가 클수록 복구시간에 영향을 줄 수 있다.