본문 바로가기
WIKI 기술 지식 베이스

Discovery and cluster formation settings

원문 보기 위키 갱신

출처: 문서

본문

디스커버리와 클러스터 형성 설정

이 페이지는 OpenSearch에서 디스커버리와 클러스터 형성 동작을 제어하는 모든 설정에 대한 포괄적인 레퍼런스를 제공해요. 이 설정들은 노드들이 서로를 찾는 방법, 클러스터 매니저를 선출하는 방법, 그리고 클러스터 조정을 유지하는 방법을 결정해요.

핵심 디스커버리 설정

다음 설정들은 기본적인 디스커버리 프로세스를 제어해요:

  • discovery.seed_hosts (Static, list): 클러스터 내 클러스터 매니저 자격 노드들의 주소 목록을 제공해요. 이 설정은 클러스터 형성 중에 노드들이 서로를 찾을 수 있게 하는 데 필수적이에요. 각 주소는 host:port 또는 host만으로 지정할 수 있어요. host는 호스트명(DNS를 통해 확인되며---여러 IP가 확인되면 OpenSearch가 모두에 연결을 시도해요), IPv4 주소, 또는 IPv6 주소(대괄호로 묶어야 해요)일 수 있어요. 포트가 지정되지 않으면, OpenSearch는 transport.profiles.default.port를 확인한 다음 transport.port를 확인해서 포트를 결정해요. 둘 다 설정되어 있지 않으면 기본 포트 9300이 사용돼요. 기본값은 ["127.0.0.1", "[::1]"]이에요.

  • discovery.seed_providers (Static, list): 디스커버리 중에 시드 노드 주소를 얻기 위해 어떤 시드 호스트 프로바이더를 사용할지 지정해요. 사용 가능한 프로바이더는 settings(discovery.seed_hosts 설정의 주소를 사용해요)와 file(unicast_hosts.txt 파일에서 주소를 읽어요)이에요. 여러 프로바이더를 지정해서 디스커버리 방법을 조합할 수 있어요. 기본값은 ["settings"]이에요.

  • discovery.type (Static, string): OpenSearch가 멀티 노드 클러스터를 형성할지 아니면 단일 노드로 동작할지 지정해요. single-node로 설정하면, OpenSearch는 단일 노드 클러스터를 형성하고 특정 타임아웃을 억제해요. 이 설정은 개발 및 테스트 환경에서 유용해요. 유효한 값은 multi-node(기본값)와 single-node예요.

  • cluster.initial_cluster_manager_nodes (Static, list): 완전히 새로운 클러스터를 부트스트래핑하기 위한 초기 클러스터 매니저 자격 노드들을 설정해요. 이 설정은 클러스터를 처음 부트스트래핑할 때 필요하며, 초기 클러스터 매니저 자격 노드들의 노드 이름(node.name으로 정의된)을 포함해야 해요. 기존 클러스터에 참여하는 노드에게는 이 목록이 비어 있어야 해요. 기본값은 [](비어 있음)이에요.

디스커버리 프로세스 설정

이 설정들은 디스커버리 프로세스 중의 타이밍과 동작을 제어해요:

  • discovery.find_peers_interval (Static, time unit): 초기 시도가 실패했을 때 노드가 다음 디스커버리 라운드를 시도하기 전에 기다리는 시간을 설정해요. 기본값은 1s예요.

  • discovery.cluster_formation_warning_timeout (Static, time unit): 노드가 경고 메시지를 로깅하기 전에 클러스터 형성을 시도하는 시간을 설정해요. 경고는 "cluster manager not discovered"로 시작하며 현재 디스커버리 상태를 설명해요. 기본값은 10s예요.

DNS 확인 설정

다음 설정들은 시드 호스트에 대한 DNS 조회 동작을 제어해요:

  • discovery.seed_resolver.max_concurrent_resolvers (Static, integer): 시드 노드 주소를 확인할 때 수행할 동시 DNS 조회 수를 지정해요. 기본값은 10이에요.

  • discovery.seed_resolver.timeout (Static, time unit): 시드 노드 주소를 확인할 때 각 DNS 조회의 타임아웃을 지정해요. 기본값은 5s예요.

연결 설정

다음 설정들은 디스커버리 중의 연결 시도를 제어해요:

  • discovery.probe.connect_timeout (Static, time unit): 디스커버리 중에 각 주소에 연결을 시도할 때의 타임아웃을 설정해요. 기본값은 3s예요.

  • discovery.probe.handshake_timeout (Static, time unit): 디스커버리 중에 핸드셰이크를 통해 원격 노드를 식별하려고 시도할 때의 타임아웃을 설정해요. 기본값은 1s예요.

  • discovery.request_peers_timeout (Static, time unit): 디스커버리 중에 노드가 피어 정보 요청을 기다리는 시간을 설정하며, 이 시간이 지나면 요청이 실패한 것으로 간주해요. 기본값은 3s예요.

클러스터 매니저 선출 설정

이 설정들은 클러스터 매니저 선출 프로세스를 제어해요:

  • cluster.election.back_off_time (Static, time unit): 각 선출 실패 후 추가되는 증분 지연(선형 백오프)을 설정해요. 실패한 선출마다 다음 시도 전에 대기 시간이 이만큼 증가해요. 기본값은 100ms예요. 경고: 기본값에서 변경하면 클러스터 매니저 선출이 이루어지지 않을 수 있어요.

  • cluster.election.duration (Static, time unit): 각 선출 시도에 허용되는 최대 시간을 설정하며, 이 시간이 지나면 실패로 간주하고 재시도를 예약해요. 기본값은 500ms예요. 경고: 기본값에서 변경하면 클러스터 매니저 선출이 이루어지지 않을 수 있어요.

  • cluster.election.initial_timeout (Static, time unit): 시작 시 또는 현재 클러스터 매니저가 실패한 후에 노드가 첫 선출을 시도하기 전에 기다리는 초기 상한을 설정해요. 기본값은 100ms예요. 경고: 기본값에서 변경하면 클러스터 매니저 선출이 이루어지지 않을 수 있어요.

  • cluster.election.max_timeout (Static, time unit): 긴 네트워크 파티션 동안 지나치게 드문 선출을 방지하기 위해 선출 지연의 최대 상한을 설정해요. 기본값은 10s예요. 경고: 기본값에서 변경하면 클러스터 매니저 선출이 이루어지지 않을 수 있어요.

투표 구성 설정

다음 설정들은 클러스터 매니저 선출을 위한 투표 메커니즘을 제어해요:

  • cluster.auto_shrink_voting_configuration (Dynamic, Boolean): 최소 세 개의 노드가 남아 있는 경우 투표 구성이 떠난 노드를 자동으로 제거할지 여부를 제어해요. false로 설정하면, Voting Configuration Exclusions API를 사용해서 떠난 노드를 수동으로 제거해야 해요. 기본값은 true예요.

  • cluster.max_voting_config_exclusions (Dynamic, integer): 동시에 허용되는 투표 구성 제외의 최대 수를 설정해요. 이는 클러스터 매니저 노드 유지 보수 작업 중에 사용돼요. 기본값은 10이에요.

장애 감지 설정

OpenSearch는 두 가지 유형의 헬스 체크를 통해 클러스터 상태를 지속적으로 모니터링해요:

  • 팔로워 체크 (클러스터 매니저가 클러스터 매니저가 아닌 노드에게 보내요)
  • 리더 체크 (클러스터 매니저가 아닌 노드가 클러스터 매니저에게 보내요)

OpenSearch는 가끔 있는 체크 실패를 허용하며, 조치를 취하기 위해 다음 지침을 사용해요:

  • 일시적인 문제(단일 체크 실패)는 무시돼요; 조치를 취하려면 여러 번의 연속 실패가 필요해요.
  • 네트워크 연결 끊김은 즉각적인 대응을 트리거해요.
  • 모든 타임아웃과 재시도 횟수는 설정 가능해요.

팔로워 체크

선출된 클러스터 매니저는 클러스터의 각 노드를 주기적으로 체크해요:

  1. 모든 노드에게 주기적인 헬스 체크 요청을 보내요.
  2. 설정된 타임아웃 내에 응답을 기다려요.
  3. 각 노드의 연속 체크 실패를 추적해요.
  4. 연속 체크에 실패한 노드를 제거해요 (재시도 횟수 기준).

클러스터 매니저가 노드의 연결 끊김(네트워크 수준 연결 끊김)을 감지하면, 타임아웃과 재시도 설정을 우회하고 즉시 해당 노드를 클러스터에서 제거하려고 시도해요.

리더 체크

클러스터 매니저가 아닌 각 노드는 선출된 클러스터 매니저의 상태를 주기적으로 체크해요:

  1. 클러스터 매니저에게 주기적인 헬스 체크 요청을 보내요.
  2. 설정된 타임아웃 내에 응답을 기다려요.
  3. 클러스터 매니저의 연속 체크 실패를 추적해요.
  4. 연속 체크가 실패하면 새 클러스터 매니저 선출을 시작해요.

노드가 클러스터 매니저의 연결 끊김을 감지하면, 타임아웃과 재시도 설정을 우회하고 즉시 디스커버리 단계를 다시 시작해서 새 클러스터 매니저를 찾거나 선출해요.

다음 설정들은 헬스 모니터링과 장애 감지를 제어해요.

팔로워 체크 설정

이 설정들은 클러스터 매니저가 다른 노드를 모니터링하는 방식을 제어해요:

  • cluster.fault_detection.follower_check.interval (Static, time unit): 클러스터 매니저에서 다른 노드로 가는 팔로워 체크 사이의 간격을 설정해요. 기본값은 1s예요. 경고: 이 값을 변경하면 클러스터 불안정을 초래할 수 있어요.

  • cluster.fault_detection.follower_check.timeout (Static, time unit): 클러스터 매니저가 팔로워 체크에 대한 응답을 기다리는 시간을 설정하며, 이 시간이 지나면 체크가 실패한 것으로 간주해요. 기본값은 10s예요. 경고: 이 값을 변경하면 클러스터 불안정을 초래할 수 있어요.

  • cluster.fault_detection.follower_check.retry_count (Static, integer): 클러스터 매니저가 노드를 결함이 있는 것으로 간주하고 클러스터에서 제거하기 전에 연속으로 발생해야 하는 팔로워 체크 실패 횟수를 설정해요. 기본값은 3이에요. 경고: 이 값을 변경하면 클러스터 불안정을 초래할 수 있어요.

리더 체크 설정

이 설정들은 클러스터 매니저가 아닌 노드가 클러스터 매니저를 모니터링하는 방식을 제어해요:

  • cluster.fault_detection.leader_check.interval (Static, time unit): 노드에서 클러스터 매니저로 가는 리더 체크 사이의 간격을 설정해요. 기본값은 1s예요. 경고: 이 값을 변경하면 클러스터 불안정을 초래할 수 있어요.

  • cluster.fault_detection.leader_check.timeout (Static, time unit): 노드가 리더 체크에 대한 응답을 기다리는 시간을 설정하며, 이 시간이 지나면 클러스터 매니저가 실패한 것으로 간주해요. 기본값은 10s예요. 경고: 이 값을 변경하면 클러스터 불안정을 초래할 수 있어요.

  • cluster.fault_detection.leader_check.retry_count (Static, integer): 노드가 클러스터 매니저를 결함이 있는 것으로 간주하고 새 클러스터 매니저를 찾거나 선출하려고 시도하기 전에 연속으로 발생해야 하는 리더 체크 실패 횟수를 설정해요. 기본값은 3이에요. 경고: 이 값을 변경하면 클러스터 불안정을 초래할 수 있어요.

클러스터 상태 퍼블리싱 설정

다음 설정들은 클러스터 상태 업데이트가 배포되는 방식을 제어해요:

  • cluster.publish.timeout (Static, time unit): 클러스터 매니저가 타임아웃되기 전에 클러스터 상태 업데이트가 모든 노드에 퍼블리시되기를 기다리는 시간을 설정해요. discovery.type이 single-node로 설정되면 이 설정은 무시돼요. 기본값은 30s예요.

  • cluster.publish.info_timeout (Static, time unit): 클러스터 상태 퍼블리싱 중에 응답이 느린 노드에 대한 메시지를 로깅하기 전에 클러스터 매니저가 기다리는 시간을 설정해요. 기본값은 10s예요.

  • cluster.follower_lag.timeout (Static, time unit): 클러스터 매니저가 뒤처진 노드로부터 클러스터 상태 업데이트에 대한 확인 응답을 기다리는 시간을 설정해요. 이 시간 내에 응답하지 않는 노드는 실패한 것으로 간주되어 클러스터에서 제거돼요. 기본값은 90s예요.

클러스터 조정 설정

다음 설정들은 클러스터 참여와 조정을 제어해요:

  • cluster.join.timeout (Static, time unit): 노드가 조인 요청을 보낸 후 실패로 간주하고 재시도하기 전에 기다리는 시간을 설정해요. discovery.type이 single-node로 설정되면 이 설정은 무시돼요. 기본값은 60s예요.

  • cluster.no_cluster_manager_block (Dynamic, string): 활성 클러스터 매니저가 없을 때 어떤 작업이 거부되는지 지정해요. 유효한 값은 all(읽기/쓰기 및 클러스터 상태 API를 포함한 모든 작업이 거부돼요)과 write(쓰기 작업만 거부돼요; 읽기 작업은 마지막으로 알려진 클러스터 상태를 기반으로 성공하지만 오래된 데이터를 반환할 수 있어요)예요. 이 설정은 노드 기반 API(Cluster Stats, Node Info, Node Stats)에는 영향을 주지 않아요. 전체 클러스터 기능을 위해서는 활성 클러스터 매니저가 필요해요. 기본값은 write예요.

설정 예제

다음은 디스커버리에 대한 설정 예제예요.

기본 프로덕션 클러스터

# Cluster identification
cluster.name: production-cluster

# Discovery configuration
discovery.seed_hosts:
  - 10.0.1.10:9300
  - 10.0.1.11:9300
  - 10.0.1.12:9300

# Initial cluster manager nodes (only for bootstrapping)
cluster.initial_cluster_manager_nodes:
  - cluster-manager-1
  - cluster-manager-2
  - cluster-manager-3

# Voting configuration
cluster.auto_shrink_voting_configuration: true
cluster.max_voting_config_exclusions: 10

{% include copy.html %}

개발용 단일 노드 구성

# Single-node development cluster
cluster.name: dev-cluster
discovery.type: single-node

# Optional: Disable cluster formation timeouts for faster startup
cluster.publish.timeout: 5s
cluster.join.timeout: 10s

{% include copy.html %}

고가용성 프로덕션 클러스터

# Production cluster with dedicated cluster manager nodes
cluster.name: production-cluster

# Discovery configuration
discovery.seed_hosts:
  - cluster-manager-1.example.com:9300
  - cluster-manager-2.example.com:9300
  - cluster-manager-3.example.com:9300

# Bootstrap configuration (only for initial setup)
cluster.initial_cluster_manager_nodes:
  - cluster-manager-1
  - cluster-manager-2
  - cluster-manager-3

# Production-optimized settings
cluster.auto_shrink_voting_configuration: true
cluster.max_voting_config_exclusions: 3
cluster.publish.timeout: 60s
cluster.join.timeout: 120s

{% include copy.html %}

관련 문서

더 알아보기 (Learn more)