[Splunk] 인덱서 클러스터 Heartbeat, Timeout, Service Interval 완벽 정리
본문 바로가기

카테고리 없음

[Splunk] 인덱서 클러스터 Heartbeat, Timeout, Service Interval 완벽 정리

728x90
반응형

1️⃣ 하트비트(Heartbeat)란?

  • 인덱서 클러스터에는 Cluster Master(현재는 CM → CMM, Cluster Manager) 와 여러 인덱서(peer)가 있습니다.
  • CM은 일정 주기(Heartbeat Interval)마다 인덱서들에게 “너 살아 있니? 상태가 뭐니? 버킷 몇 개 있어?” 하고 묻습니다.
  • 인덱서는 응답에 자신이 가진 버킷 manifest(메타데이터) 를 포함시켜 전달합니다.

2️⃣ 왜 버킷 개수가 많아지면 영향이 있나?

  • 각 버킷마다 manifest 정보를 확인/전송해야 하니까, 버킷 개수가 많으면 Heartbeat 응답이 커지고 늦어집니다.
  • 대규모 환경(수만~수십만 버킷)에서는 CM이 모든 인덱서 peer 상태를 받는 데 시간이 걸려요.
  • 그래서 버킷 5만 개당 1초씩 heartbeat 주기를 늘려라 라는 게 Splunk 권장 튜닝 가이드입니다.

즉,

  • 버킷이 많음 = 응답이 무거움
  • 응답이 무거움 = 주기 너무 짧으면 peer가 제때 보고를 못함 → CM이 “이 노드 죽었네?” 하고 잘못 판단
  • 그 결과 → 클러스터 상태 전환(rebalance, fix-up) 시 혼란이 생겨 검색 불가능 구간이 발생할 수 있음

3️⃣ "상태 전환 중 검색 가능성에 영향" 이라는 말의 뜻

  • 클러스터는 Peer 노드 하나가 죽으면 다른 Peer의 복제본을 Primary로 승격시킵니다.
  • 이걸 상태 전환(State Transition) 이라고 부릅니다.
  • 근데 Heartbeat가 너무 짧으면, 아직 살아 있는 노드를 “죽었다”고 오판 → 잘못된 승격/재배치 발생 → 해당 버킷의 데이터 검색 불가 상태가 일시적으로 생김.

즉, Heartbeat를 너무 촘촘히 두면 “민감하게 오판”하는 리스크가 있고,
반대로 너무 길게 두면 “실제 장애 감지가 늦어짐”.


4️⃣ 그래서 Splunk 권장은?

  • 기본 heartbeat는 보통 30초 수준.
  • 버킷이 많으면 응답이 오래 걸리므로, 버킷 5만 개마다 1초씩 늘려라 → CM이 오판하지 않게.
  • 예: 버킷 20만 개라면 최소 34초 정도로 잡는 게 안정적.

✅ 쉽게 비유하자면

  • CM(관리자)이 인덱서(peer)한테 “현황 보고해!” 하고 매 30초마다 전화한다고 합시다.
  • Peer가 “저 버킷 20만 개 정리 중이라 보고서 작성에 10초 걸려요” 라고 하면…
  • 전화 간격이 30초면 보고가 밀려서 관리자가 “얘 연락 두절, 죽었네!” 하고 판단 → 잘못된 장애 처리 발생.
  • 그래서 전화 주기를 40초로 늘려주는 게 맞습니다.

👉 정리:
“Heartbeat 주기를 너무 짧게 두면, 버킷이 많을 때 인덱서가 응답을 제때 못 해서 CM이 오판

→ 상태 전환 중 검색이 끊길 수 있다.
버킷이 5만 개 늘어날 때마다 1초씩 주기를 늘려라.”
 

 

 

1️⃣ 인덱서 클러스터의 두 가지 하트비트 성격

(A) 저수준 Heartbeat (1초 주기)

  • Peer 인덱서 ↔ CM 간 TCP 연결에서 1초마다 신호를 보냅니다.
  • 만약 60초 동안 응답 없음 → CM은 해당 peer를 “down” 상태로 판단.
  • 이건 말 그대로 “네트워크/프로세스 살아 있나?” 확인하는 수준.
  • 설정은 heartbeatTimeout (server.conf) 관련 값으로 조정 가능. (기본 60초)

(B) 상태 리포트 Heartbeat (Manifest 포함)

  • Peer가 자신이 가진 버킷 메타데이터(manifest) 와 상태를 CM에게 보고하는 주기.
  • 이게 클러스터 매니저의 status heartbeat interval입니다.
  • 여기서 버킷이 많으면 manifest 처리 시간이 늘어나니까, “버킷 5만 개당 1초씩 보고 주기를 늘려라” 라는 권장이 나오는 거예요.
  • 설정은 heartbeatPeriod (server.conf → [clustering] 섹션) 값으로 조정. (기본 30초 수준)

2️⃣ 왜 두 개가 헷갈리냐?

  • 문서에서 말하는 “1초 heartbeat / 60초 timeout”은 네트워크 keepalive 같은 저수준 레벨.
  • 튜닝 가이드에서 말하는 “버킷 많으면 주기를 늘려라”는 건 상태 리포트 주기.
  • 결국 서로 다른 계층의 heartbeat인데 둘 다 “하트비트”라고 부르니까 혼동되는 거예요.

3️⃣ 정리

  • timeout: peer를 죽었다고 판단하기까지 기다리는 시간 (기본 60초)
  • heartbeat 주기(Period): peer가 CM에 상태/manifest 보고를 보내는 주기 (기본 30초, 버킷 많으면 늘려야 함)

👉 따라서 문서에서 본 1초 heartbeat는 그대로 두고,
튜닝 시 건드리는 건 heartbeatPeriod (상태 보고 주기) 입니다.


✅ 비유

  • 1초 heartbeat + 60초 timeout: “숨 쉬고 있나?” 확인 (응답 없으면 1분 뒤 사망 판정)
  • heartbeatPeriod (30초 → 조정): “업무 보고서 제출” 주기 (버킷 많으면 작성 오래 걸리니 제출 간격 늘리라는 권장)
더보기

🌳상태 리포트 주기(heartbeatPeriod)피어 타임아웃(heartbeatTimeout) 설정 방법 (server.conf)

 

1) 현재 값 확인 (권장)

 
$SPLUNK_HOME/bin/splunk btool server list clustering --debug
 
  • 실제로 적용 중인 값을 정확히 보여줍니다(기본값/로컬 덮어쓰기 포함).
  • 운영 전에 꼭 이걸로 점검하세요.

2) 설정 파일 위치

  • 클러스터 매니저(Cluster Manager, CM)와 피어(인덱서) 모두 server.conf 의 [clustering] 섹션에서 관리됩니다.
  • 일반적으로 CM와 피어에 동일한 정책을 일관되게 배포합니다.

3) 핵심 파라미터 요약

  • heartbeatPeriod
    • 의미: 상태/버킷 메타(매니페스트) 리포트 주기 (상태 보고서 제출 간격)
    • 효과: 너무 짧으면 대규모 버킷 환경에서 보고 처리 지연 → CM 오판 가능 ↑
    • 튜닝 가이드: 버킷 5만 개마다 +1초 늘리기
  • heartbeatTimeout
    • 의미: 피어를 “다운”으로 판단하기 전까지 기다리는 최대 시간
    • 효과: 너무 짧으면 네트워크/부하 일시 이슈에도 다운으로 오판, 너무 길면 장애 전파가 느려짐

기억하기:

  • heartbeatPeriod = “업무 보고서 제출 간격”
  • heartbeatTimeout = “응답 없으면 사망 판정까지 기다리는 시간”

4) 설정 예시

(A) 기준값 예시

# server.conf (CM와 Peer 공통 권장)
[clustering]
mode = manager / peer
# 상태 리포트 주기(초) — 기본은 대략 30초권
heartbeatPeriod = 30

# 피어 Down 판정 타임아웃(초) — 문서상 기본 60초권
heartbeatTimeout = 60
 

(B) 대규모 환경 튜닝 예시

  • 가정: 버킷 총 200,000개 수준
  • 권장: 5만 개마다 +1초 → +4초
  • ⇒ heartbeatPeriod = 30 + 4 = 34
 
[clustering]
mode = manager / peer
heartbeatPeriod = 34
heartbeatTimeout = 60   # 상황에 따라 75~90 등으로 완만히 상향 가능

 

(C) 초대규모/멀티사이트에서 여유를 더 주는 예시

  • 버킷/사이트 간 동기화 지연이 보이면 period를 더 늘리거나 timeout을 소폭 상향
[clustering]
mode = manager / peer
heartbeatPeriod = 40
heartbeatTimeout = 90
 

팁: heartbeatTimeout 은 최소 heartbeatPeriod보다 충분히 커야 합니다.
(예: period 40초면 timeout을 40초보다 아래로 두면 안 됨)


5) 변경 적용 절차(안전하게)

1. CM와 Peer 모두에 설정 반영(DS 사용 시 앱으로 배포 권장)

2. 클러스터 롤링 재시작

 
# CM에서
splunk show cluster-status
# 각 피어에서 순차적으로
splunk restart
# 상태가 안정되면 다음 피어…

 

3. 재시작 후 상태 확인

splunk show cluster-status
splunk btool server list clustering --debug

6) 현장 팁

  • 증상 기반 조정
    • CM에서 간헐적 피어 down/up 플랩이 보이거나, 상태 전환(rebalance/fix-up) 중 일시 검색 누락이 관찰되면
      → heartbeatPeriod를 먼저 (+1~+5초 범위) 보수적으로 상향
      → 여전히 오판/지연이 있으면 heartbeatTimeout을 소폭 상향
  • 지표 모니터링
    • CM의 splunkd.log 에서 peer health, fix-up, replication 메시지 추적
    • MC(Monitoring Console)에서 Cluster > Indexing 대시보드로 재복제/수리 큐 지연 관찰
  • 버킷 수 추산
    • 인덱스별 버킷 개수/상태를 주기적으로 점검(roll/hot-warm 정책도 함께 최적화)
    • “5만 개당 +1초”는 총 버킷 수(사이트/피어 전체 관점) 로 보정

📌 service_interval 이란?

  • 인덱서 클러스터(Cluster Manager ↔ Peer)에서 클러스터 매니저가 주기적으로 실행하는 서비스 루프 주기를 말합니다.
  • CM이 정기적으로 하는 일:
    • 피어 상태 확인
    • 버킷 메타데이터(manifest) 수집
    • replication/fix-up 필요 여부 판단
    • 검색 가능 상태(primary/secondary role) 재조정

👉 즉, service_interval은 클러스터 매니저가 내부적으로 상태 점검과 관리 로직을 실행하는 간격입니다.
(Heartbeat는 피어 ↔ CM 신호 주기고, Service interval은 CM이 그 신호를 모아서 “업무 처리”하는 주기라고 보시면 돼요.)

 

✅ 운영 가이드

  • 보통은 service_interval은 건드리지 않습니다.
    (기본 30초가 대부분 환경에서 충분히 안정적)
  • 대규모 환경에서 CM이 지나치게 자주 상태 관리 루프를 돌면서 CPU 부하가 크다면 → 소폭 늘리는 식으로 조정할 수 있습니다.
  • 하지만 튜닝 1순위는 heartbeatPeriod이고, service_interval은 극히 특수한 경우에만 만집니다.

👉 요약

  • heartbeatPeriod: 피어가 CM에 상태 보고하는 주기
  • service_interval: CM이 받은 상태 보고를 토대로 클러스터 관리 작업을 실행하는 주기

 

 

📌 service_interval = 0 의 의미

  • server.conf 의 [clustering] 섹션에서 설정 가능
  • 기본값은 0 = “CM이 서비스 루프를 최대한 빠르게 계속 돌린다” 는 뜻입니다.
    • 즉, 별도 지연(슬립 타임) 없이 상태 관리, 버킷 복제/수리(fix-up), manifest 확인 같은 클러스터 관리 작업을 연속적으로 수행합니다.
  • 값이 양수(초 단위) 로 지정되면, 그만큼 간격을 두고 서비스 루프를 실행합니다.
    • 예: service_interval = 5 → CM이 관리 루프 돌리고 5초 쉰 뒤 다시 실행

📊 왜 기본값이 0일까?

  • 대부분 환경에서는 CM이 즉시/지속적으로 클러스터 상태를 관리하는 게 안정적입니다.
  • 그래서 기본은 0(=실시간 loop)이고,
    특수 대규모 환경(버킷 수 수십만 이상, CM CPU 과부하가 눈에 띌 때)에서만 간격을 주도록 설정합니다.

⚖️ 다른 값들과 비교

 

heartbeatPeriod 30초 Peer → CM 상태/manifest 보고 주기
heartbeatTimeout 60초 Peer 응답 없을 때 CM이 “Down” 판정까지 기다리는 시간
service_interval 0 CM이 클러스터 관리 루프를 도는 간격 (0=연속 실행)

👉 즉,
service_interval = 0 은 실시간 루프, heartbeatPeriod = 30 은 보고 주기, heartbeatTimeout = 60 은 다운 판정 기준


✅ 운영 가이드

  • 기본은 0 유지 → CM이 빠르게 상태를 처리해 줌.
  • 만약 CM CPU 부하가 지나치게 크거나, 대규모 환경에서 “관리 루프 간격을 강제로 띄워야” 하는 경우만 5, 10 같은 값을 부여.
  • Splunk도 공식적으로 웬만하면 건드리지 말고 0 유지 권장.

 

  • 파란 점(30s 간격) → Peer가 CM에 상태/manifest 보고 (heartbeatPeriod)
  • 빨간 점선(60s) → Timeout 기준. 만약 이 시점까지 응답이 없으면 Peer를 “Down” 으로 판단 (heartbeatTimeout)
  • 초록 점(매 5s) → CM이 내부 루프를 돌며 버킷 복제/수리, 상태 관리 (service_interval)
    • 기본값 0 → 사실상 “쉬지 않고 계속” 루프 실행 (여기선 보기 편하게 5초 단위로 표시)

👉 정리:

  • heartbeatPeriod: Peer가 언제 보고서를 내느냐
  • service_interval: CM이 언제 그 보고서를 바탕으로 관리 업무를 보느냐
  • heartbeatTimeout: CM이 “응답이 없으면 죽었다”라고 판정하는 한계치
728x90
반응형