수색…


비고

Elasticsearch에는 개발을위한 최상의 경험을 제공하는 일련의 기본값이 있습니다. 암시 적 진술은 생산에 꼭 필요한 것은 아니며, 이는 사용자의 필요에 맞게 작성되어야하며 따라서 예측할 수 없습니다.

기본 설정을 사용하면 구성을 변경하지 않고 동일한 시스템에서 여러 노드 쉽게 다운로드하고 실행할 수 있습니다.

설정은 어디에 있습니까?

Elasticsearch의 각 설치에는 config/elasticsearch.yml 있습니다. 여기에서 다음 설정 이 적용됩니다.

  • cluster.name
    • 노드가 결합중인 클러스터의 이름. 동일한 클러스터의 모든 노드는 동일한 이름을 공유 해야합니다 .
    • 현재는 기본적으로 elasticsearch 입니다.
  • node.*
    • node.name
      • 지정하지 않으면 노드가 시작될 때마다 임의의 이름이 생성 됩니다 . 이것은 재미있을 수 있지만 프로덕션 환경에는 적합하지 않습니다.
      • 이름은 고유 할 필요는 없지만 고유해야합니다.
    • node.master
      • 부울 설정입니다. 때 true , 그것은 노드가 자격이 마스터 노드이며이 선출 마스터 노드가 될 수 있다는 것을 의미한다.
      • 기본값은 true , 모든 노드가 적합한 마스터 노드임을 의미합니다.
    • node.data
      • 부울 설정입니다. true 노드가 데이터를 저장하고 검색 활동을 처리 함을 의미합니다.
      • 기본값은 true 입니다.
  • path.*
    • path.data
      • 노드에 대해 파일이 기록되는 위치입니다. 모든 노드는이 디렉토리사용 하여 메타 데이터를 저장하지만 데이터 노드는 이 디렉토리 를 사용하여 문서를 저장 / 색인화합니다.
      • 기본값은 ./data 입니다.
        • 즉, Elasticsearch 디렉토리 내부config 할 피어 디렉토리로 data 가 생성됩니다.
    • path.logs
      • 로그 파일이 기록되는 위치입니다.
      • ./logs 기본값입니다.
  • network.*
    • network.host

      • 사실 localhost _local_ 기본값입니다.
        • 즉, 기본적으로 노드는 현재 시스템 외부와 통신 할 수 없습니다.
    • network.bind_host

      • 잠재적 인 배열, Elasticsearch에게 소켓을 묶는 현재 컴퓨터의 주소를 알려줍니다.
        • 이 목록은 머신 외부의 머신 (예 : 클러스터의 다른 노드)이이 노드와 통신 할 수있게 해줍니다.
      • 기본값은 network.host 입니다.
    • network.publish_host

      • 이 노드와 가장 잘 통신하는 방법을 다른 노드에 알리는 데 사용되는 단일 호스트입니다.
        • network.bind_host 배열을 제공 할 때이 노드는 노드 간 통신에 사용되는 하나의 호스트 여야합니다.
      • 기본값은 network.host`입니다.
  • discovery.zen.*
    • discovery.zen.minimum_master_nodes
      • 마스터 선거를위한 정족수를 정의합니다. 이 방정식을 사용하여 설정 해야합니다 . (M / 2) + 1 여기서 M적법한 마스터 노드 ( node.master: true 사용하는 노드 node.master: true 암시 적 또는 명시 적 node.master: true )의 수입니다.
      • 기본값은 1 이며 단일 노드 클러스터에만 유효합니다!
    • discovery.zen.ping.unicast.hosts
      • 이 노드를 클러스터의 나머지 부분에 연결하는 메커니즘입니다.
      • 노드가 나머지 클러스터를 찾을 수 있도록 적합한 마스터 노드를 나열 해야 합니다.
      • 여기서 사용해야하는 값은 다른 노드의 network.publish_host 입니다.
      • localhost 기본 설정됩니다. 즉, 로컬 시스템에서만 클러스터가 결합 될 것입니다.

어떤 유형의 설정이 있습니까?

탄성 검색은 세 가지 유형의 설정을 제공합니다.

  • 클러스터 전체 설정
    • 이러한 설정은 모든 노드 또는 모든 색인과 같이 클러스터의 모든 항목에 적용되는 설정입니다.
  • 노드 설정
    • 이는 현재 노드에만 적용되는 설정입니다.
  • 색인 설정
    • 이러한 설정은 색인에만 적용됩니다.

설정에 따라 다음과 같이 할 수 있습니다.

  • 런타임시 동적으로 변경됨
  • 인덱스 재시작 (닫기 / 열기)에 따라 변경됨
    • 일부 색인 레벨 설정에서는 색인을 닫았다가 다시 열지 않아도되지만 적용 할 설정을 위해 색인을 강제로 다시 병합해야 할 수도 있습니다.
      • 인덱스의 압축 수준은이 설정 유형의 예입니다. 동적으로 변경할 수 있지만 새 세그먼트 만 변경 사항을 활용합니다. 따라서 인덱스가 변경되지 않으면 인덱스에서 해당 세그먼트를 다시 만들지 않는 한 변경의 이점을 얻지 못합니다.
  • 노드를 다시 시작한 후에 변경됨
  • 클러스터를 다시 시작한 후에 변경됨
  • 변경되지 않음

설정으로 할 수 있거나 할 수없는 일에 대해서는 항상 Elasticsearch의 버전에 대한 설명서를 확인하십시오.

설정을 적용하려면 어떻게해야합니까?

설정을 몇 가지 방법으로 설정할 수 있으며 그 중 일부는 제안되지 않습니다.

  • 명령 행 인수

Elasticsearch 1.x 및 2.x에서는 대부분의 설정을 es. 시작하는 Java 시스템 등록 정보로 제출할 수 있습니다 es. :

$ bin/elasticsearch -Des.cluster.name=my_cluster -Des.node.name=`hostname`

Elasticsearch 5.x에서는 -Des. 대신 -E 를 사용하여 사용자 정의 인수 유형을 사용하는 대신 Java 시스템 등록 정보 사용을 피하기 위해 변경됩니다 -Des. :

$ bin/elasticsearch -Ecluster.name=my_cluster -Enode.name=`hostname`

Puppet, Chef 또는 Anabilities와 같은 도구를 사용하여 클러스터를 시작하고 중지 할 때 설정을 적용하는이 방법이 유용합니다. 그러나 수동으로 수행 할 때 매우 잘 작동하지 않습니다.

  • YAML 설정
    • 예제에 표시됨
  • 동적 설정
    • 예제에 표시됨

설정이 적용되는 순서는 가장 동적 인 순서입니다.

  1. 일시적인 설정
  2. 지속적인 설정
  3. 명령 줄 설정
  4. YAML (정적) 설정

설정이 두 번 설정되면 해당 레벨 중 한 번에 한 번 설정하면 최고 레벨이 적용됩니다.

정적 탄성 검색 설정

Elasticsearch는 기본 Elasticsearch 디렉토리 ( RPM 및 DEB 설치가이 위치를 다른 것으로 변경 함)에서 찾을 수있는 YAML (Yet Another Markup Language) 구성 파일을 사용 합니다 .

config/elasticsearch.yml 에서 기본 설정을 지정할 수 있습니다.

# Change the cluster name. All nodes in the same cluster must use the same name!
cluster.name: my_cluster_name

# Set the node's name using the hostname, which is an environment variable!
# This is a convenient way to uniquely set it per machine without having to make
#  a unique configuration file per node.
node.name: ${HOSTNAME}

# ALL nodes should set this setting, regardless of node type
path.data: /path/to/store/data

# This is a both a master and data node (defaults)
node.master: true
node.data: true

# This tells Elasticsearch to bind all sockets to only be available
#  at localhost (default)
network.host: _local_

영구 동적 클러스터 설정

클러스터가 이미 시작된 후에 동적으로 설정을 적용해야하며 실제로 동적으로 설정할 수있는 경우 _cluster/settings API를 사용하여 설정할 수 있습니다.

영구 설정은 적용 할 수있는 두 가지 유형의 클러스터 전체 설정 중 하나입니다. 영구적 인 설정 전체 클러스터를 재시작 해도 지속 됩니다 .

참고 : 모든 설정을 동적으로 적용 할 수있는 것은 아닙니다. 예를 들어 클러스터의 이름을 동적으로 바꿀 수는 없습니다. 대부분의 노드 레벨 설정은 동적으로 설정 될 수 없습니다 (개별적으로 대상을 지정할 수 없기 때문에).

이것은 인덱스 레벨 설정을 설정하는 데 사용하는 API가 아닙니다 . 설정은 인덱스로 시작해야하기 때문에 인덱스 레벨 설정임을 알 수 있습니다 index. . 이름이 indices. 형식의 설정입니다 indices. 그들은 모두 인덱스에 적용되기 때문에 클러스터 전체의 설정입니다.

POST /_cluster/settings
{
  "persistent": {
    "cluster.routing.allocation.enable": "none"
  }
}

경고 : Elasticsearch 1.x 및 2.x에서는 영구 설정을 해제 할 수 없습니다.

다행스럽게도 Elasticsearch 5.x에서이 기능이 향상되었으며 null 로 설정하여 설정을 제거 할 수 있습니다.

POST /_cluster/settings
{
  "persistent": {
    "cluster.routing.allocation.enable": null
  }
}

설정을 해제하면 기본값이나 낮은 우선 순위 수준 (예 : 명령 줄 설정)에 정의 된 모든 값으로 돌아갑니다.

임시 동적 클러스터 설정

클러스터가 이미 시작된 후에 동적으로 설정을 적용해야하며 실제로 동적으로 설정할 수있는 경우 _cluster/settings API를 사용하여 설정할 수 있습니다.

일시적 설정은 적용 할 수있는 두 가지 유형의 클러스터 전체 설정 중 하나입니다. 일시적인 설정은 전체 클러스터를 재시작 해도 지속 되지 않습니다 .

참고 : 모든 설정을 동적으로 적용 할 수있는 것은 아닙니다. 예를 들어 클러스터의 이름을 동적으로 바꿀 수는 없습니다. 대부분의 노드 레벨 설정은 동적으로 설정 될 수 없습니다 (개별적으로 대상을 지정할 수 없기 때문에).

이것은 인덱스 레벨 설정을 설정하는 데 사용하는 API가 아닙니다 . 설정은 인덱스로 시작해야하기 때문에 인덱스 레벨 설정임을 알 수 있습니다 index. . 이름이 indices. 형식의 설정입니다 indices. 그들은 모두 인덱스에 적용되기 때문에 클러스터 전체의 설정입니다.

POST /_cluster/settings
{
  "transient": {
    "cluster.routing.allocation.enable": "none"
  }
}

경고 : Elasticsearch 1.x 및 2.x에서는 전체 클러스터를 다시 시작하지 않고 일시적인 설정을 해제 할 수 없습니다.

다행스럽게도 Elasticsearch 5.x에서이 기능이 향상되었으며 null로 설정하여 설정을 제거 할 수 있습니다.

POST /_cluster/settings
{
  "transient": {
    "cluster.routing.allocation.enable": null
  }
}

설정을 해제하면 기본값이나 낮은 우선 순위 수준 (예 : persistent 설정)으로 정의 된 값으로 돌아갑니다.

색인 설정

인덱스 설정은 단일 인덱스에 적용되는 설정입니다. 이러한 설정은 index. 시작됩니다 index. . 이 규칙의 예외는 number_of_shardsnumber_of_replicas 이며 index.number_of_shardsindex.number_of_replicas 형식으로 존재합니다.

이름에서 알 수 있듯이 인덱스 수준 설정은 단일 인덱스에 적용됩니다. 일부 설정은 동적으로 변경할 수 없으므로 작성시 적용해야합니다 (예 : 색인의 기본 index.number_of_shards 수를 제어하는 index.number_of_shards 설정).

PUT /my_index
{
  "settings": {
    "index.number_of_shards": 1,
    "index.number_of_replicas": 1
  }
}

또는보다 간결한 형식으로 각 키 접두사를 결합 할 수 있습니다 . :

PUT /my_index
{
  "settings": {
    "index": {
      "number_of_shards": 1,
      "number_of_replicas": 1
    }
  }
}

위의 예는 제공된 설정으로 색인을 작성합니다. 인덱스 _settings 엔드 포인트를 사용하여 인덱스 별 설정을 동적으로 변경할 수 있습니다. 예를 들어, 여기서 경고 레벨에 대해서만 slowlog 설정 을 동적으로 변경합니다 :

PUT /my_index/_settings
{
  "index": {
    "indexing.slowlog.threshold.index.warn": "1s",
    "search.slowlog.threshold": {
      "fetch.warn": "500ms",
      "query.warn": "2s"
    }
  }
}

경고 : Elasticsearch 1.x 및 2.x는 인덱스 수준 설정 이름을 엄격하게 검증하지 않았습니다. 오타가 있거나 간단하게 설정을했다면 맹목적으로 받아 들일 것이지만 그렇지 않으면 그것을 무시합니다. Elasticsearch 5.x는 설정 이름의 유효성을 엄격히 검사하며 알 수없는 설정 (오타 또는 누락 된 플러그인으로 인해)으로 색인 설정을 적용하려는 모든 시도를 거부합니다. 두 명령문은 동적으로 변경되는 색인 설정 및 작성시 적용됩니다.

동시에 여러 인덱스에 대한 동적 인덱스 설정

Index Settings 예제에 표시된 것과 동일한 변경 사항을 하나의 요청 또는 이들의 서브 세트로 기존의 모든 Index Settings 에 적용 할 수 있습니다.

PUT /*/_settings
{
  "index": {
    "indexing.slowlog.threshold.index.warn": "1s",
    "search.slowlog.threshold": {
      "fetch.warn": "500ms",
      "query.warn": "2s"
    }
  }
}

또는

PUT /_all/_settings
{
  "index": {
    "indexing.slowlog.threshold.index.warn": "1s",
    "search.slowlog.threshold": {
      "fetch.warn": "500ms",
      "query.warn": "2s"
    }
  }
}

또는

PUT /_settings
{
  "index": {
    "indexing.slowlog.threshold.index.warn": "1s",
    "search.slowlog.threshold": {
      "fetch.warn": "500ms",
      "query.warn": "2s"
    }
  }
}

보다 선택적으로 선택하는 것을 선호하는 경우 공급하지 않고 모두를 선택할 수 있습니다.

PUT /logstash-*,my_other_index,some-other-*/_settings
{
  "index": {
    "indexing.slowlog.threshold.index.warn": "1s",
    "search.slowlog.threshold": {
      "fetch.warn": "500ms",
      "query.warn": "2s"
    }
  }
}


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow