오늘은 Splunk Indexer Cluster에 대해 포스팅을 한다.
공식 문서를 참고하였다.
Splunk 시스템이 모든 데이터의 여러 복제본을 보관할 수 있도록 서로의 데이터를 복제하도록 구성된 Splunk Enterprise의 인덱서 그룹이다. 동일한 데이터의 복제본을 가지고 있어, 데이터의 손실을 막고 검색할 수 있는 데이터의 가용성을 높여준다.
인덱서 클러스터라고 하면 인덱서로만 이뤄진 클러스터를 말하는 것이라 생각했으나, Splunk 공식 문서에서는 인덱서가 클러스터링 되어있는 하나의 아키텍처를 통칭하여 말하는 듯 했다.
(실제 업무 할 때에는 보통 인덱서가 클러스터링 되어있는 그룹을 말하는 경우가 많았다.)
인덱서 클러스터는 크게 3가지 구성원으로 이루어져 있다. 위의 그림은 replication factor 가 3이고 3개의 피어노드, 1개의 관리자 노드, 1개의 검색 헤더로 이뤄진 인덱서 클러스터의 모습이다.
각 컴포넌트의 역할을 기재하면 아래와 같다.
여기서 보이는 데이터&요청의 흐름은 아래와같다.
1. 포워더를 통해 외부 데이터를 수신받은 피어노드는 데이터를 저장한다.
2. 이 저장된 데이터를 관리자 노드의 명령에 따라 다른 피어노드에 배포한다.
3. 동일한 데이터의 복사본을 3개를 만들어 각 노드에 저장해둠으로써 검색 가용성을 높인다.
관리자 노드에서 구성하는 값으로, 저장되는 데이터의 복사본을 몇개로 할 것인지를 의미한다. 이것을 Replication Factor 이라고 한다.
복제 요소는 클러스터의 오류 허용 범위를 결정한다. 무슨 말이냐하면, 시스템의 복제 요소가 3으로 지정되어있으면 동일한 복사본을 3개 가지고 있다.(원본 + 2개를 복제) 따라서 이것은 3대의 피어노드에 나누어 저장되고, 2대의 피어노드가 Down 되더라도 데이터 가용성이 보장된다.
따라서 클러스터는 (복제요소 - 1)의 오류를 허용한다고 한다.
관리자 노드에서 구성하는 값으로, 바로 검색이 가능한 복사본은 몇개인지를 의미한다.
검색 가능한 데이터 복사본에는 검색 불가능한 복사본보다 더 많은 저장 공간이 필요하므로 정확한 요구 사항에 맞게 검색 요소의 크기를 제한하는 것이 가장 좋다.
- 검색 불가능한 데이터 복사본: 원시 데이터(journal.gz)
- 검색 가능한 데이터 복사본: 원시 데이터(journal.gz) + 인덱스(.tsidx)
대부분의 경우 기본값인 2를 사용한다. 이렇게 하면 단일 피어 노드가 작동 중지되는 경우 다른 피어 노드에서 즉각 검색이 가능하기 때문에 클러스터가 거의 중단 없이 검색을 계속할 수 있다.
Splunk는 인덱싱된 데이터를 데이터 파일이 포함된 디렉터리인 버킷에 저장한다. 인덱스는 일반적으로 여러 개의 버킷으로 구성된다. 앞에서 데이터의 복사본이라고 표현한 것은 사실 버킷 복사본이라고 봐야한다.
인덱스 = 여러개의 버킷
이며, 버킷은 raw 데이터가 있는 저장소 단위
라고 볼 수 있다.
아래의 그림은 복제 요소가 3인(원본 데이터 + 복사본 2개)인덱서 클러스터를 표현한 것 이다.
또한, 버킷 복사본은 검색 가능하거나 검색 불가능한데 이것은 앞서 확인했던 검색 인자와 관계가 있다.
파란색 버킷은 데이터의 원본이고, 연두색은 복제본이면서 검색 가능한 버킷, 검은색은 복제본이면서 검색이 불가능한 버킷이다.
복제 인자를 3으로 했기 때문에 파란색 외에 연두색 + 검은색의 버킷 복제본이 존재하고, 검색 인자를 2로 했기 때문에 파란색 외에 연두색 버킷 또한 검색이 가능한 것 이다.
검색 가능 여부는 인덱스 파일을 포함하는 버킷이냐에 따라 다르다. 인덱스 파일은 쉽게 말해 데이터가 어디에 저장되어있는지 알려주는 파일이라고 생각하면 된다.
- 검색 불가능한 버킷: 원시 데이터(journal.gz)
- 검색 가능한 버킷: 원시 데이터(journal.gz) + 인덱스(.tsidx)
피어가 새 버킷을 생성할 때마다 관리자 노드와 통신하여 버킷의 데이터를 전달할 피어 목록을 가져온다.
피어 노드 수가 복제 인자를 초과하는 클러스터가 있는 경우 피어는 새 버킷을 생성할 때마다 다른 피어 집합으로 데이터를 전달할 수 있다.
결국 복제 인수가 3인 경우에도 만약, 피어노드가 5대라면 3대 이상의 서버가 복제본을 가지고 있을 수 있다.
그 외에도 오류나, 상세한 과정에 대한 정보는 공식 문서를 참고하면 된다. 일반적인 인덱서 클러스터의 개념은 여기 까지이며, 다음 포스팅에서는 버킷과 인덱서 클러스터에 관한 내용을 다루겠다.