elasticsearch 설정 - 기본 설정

12239 단어 Elasticsearch

configuration 구성


환경 변수


스크립트를 통해 Elasticsearch는 스크립트의 JAVA_를 시작합니다.OPTS 옵션이 JVM에 전달되어 elasticsearch를 시작합니다.그 중에서 가장 중요한 매개 변수는 - Xmx입니다. 이 매개 변수는 시스템이elasticsearch 프로세스에 분배되는 최대 메모리를 제어하는 데 사용됩니다.또한 -Xms는 시스템이elasticsearch 프로세스에 분배되는 최소 메모리를 제어하는 데 사용됩니다. (일반적으로 분배된 메모리가 많을수록 좋습니다.)
대부분의 경우 JAVA_OPTS 기본 구성, ES_ 사용JAVA_OPTS 환경 변수는 기존 JVM 설정을 설정하거나 변경합니다.ES_HEAP_SIZE 환경 변수는 elasticsearch 자바 프로세스에 할당된 메모리 양을 설정하는 데 사용됩니다.일반적으로 이 두 값은 각각 설정할 수 있지만 최대 최소값은 동일하게 설정됩니다(ES_MIN_MEM을 통해 기본 256m, ES_MAX_MEM은 기본 1gb).
메모리의 크기 제한을 같은 값으로 설정하는 것이 좋습니다.
elasticsearch 시작 스크립트:
#!/bin/sh

# OPTIONS:
#   -d: daemonize, start in the background
#   -p : log the pid to a file (useful to kill it later)

# CONTROLLING STARTUP:
#
# This script relies on few environment variables to determine startup
# behavior, those variables are:
#
#   ES_CLASSPATH -- A Java classpath containing everything necessary to run.
#   JAVA_OPTS    -- Additional arguments to the JVM for heap size, etc
#   ES_JAVA_OPTS -- External Java Opts on top of the defaults set
#
#
# Optionally, exact memory values can be set using the following values, note,
# they can still be set using the `ES_JAVA_OPTS`. Sample format include "512m", and "10g".
#
#   ES_HEAP_SIZE -- Sets both the minimum and maximum memory to allocate (recommended)
#
# As a convenience, a fragment of shell is sourced in order to set one or
# more of these variables. This so-called `include' can be placed in a
# number of locations and will be searched for in order. The lowest
# priority search path is the same directory as the startup script, and
# since this is the location of the sample in the project tree, it should
# almost work Out Of The Box.
#
# Any serious use-case though will likely require customization of the
# include. For production installations, it is recommended that you copy
# the sample to one of /usr/share/elasticsearch/elasticsearch.in.sh,
# /usr/local/share/elasticsearch/elasticsearch.in.sh, or
# /opt/elasticsearch/elasticsearch.in.sh and make your modifications there.
#
# Another option is to specify the full path to the include file in the
# environment. For example:
#
#   $ ES_INCLUDE=/path/to/in.sh elasticsearch -p /var/run/es.pid
#
# Note: This is particularly handy for running multiple instances on a
# single installation, or for quick tests.
#
# If you would rather configure startup entirely from the environment, you
# can disable the include by exporting an empty ES_INCLUDE, or by
# ensuring that no include files exist in the aforementioned search list.
# Be aware that you will be entirely responsible for populating the needed
# environment variables.


# Maven will replace the project.name with elasticsearch below. If that
# hasn't been done, we assume that this is not a packaged version and the
# user has forgotten to run Maven to create a package.
IS_PACKAGED_VERSION='elasticsearch'
if [ "$IS_PACKAGED_VERSION" != "elasticsearch" ]; then
    cat >&2 << EOF
Error: You must build the project with Maven or download a pre-built package
before you can run Elasticsearch. See 'Building from Source' in README.textile
or visit http://www.elasticsearch.org/download to get a pre-built package.
EOF
    exit 1
fi

CDPATH=""
SCRIPT="$0"

# SCRIPT may be an arbitrarily deep series of symlinks. Loop until we have the concrete path.
while [ -h "$SCRIPT" ] ; do
  ls=`ls -ld "$SCRIPT"`
  # Drop everything prior to ->
  link=`expr "$ls" : '.*-> \(.*\)$'`
  if expr "$link" : '/.*' > /dev/null; then
    SCRIPT="$link"
  else
    SCRIPT=`dirname "$SCRIPT"`/"$link"
  fi
done

# determine elasticsearch home
ES_HOME=`dirname "$SCRIPT"`/..

# make ELASTICSEARCH_HOME absolute
ES_HOME=`cd "$ES_HOME"; pwd`


# If an include wasn't specified in the environment, then search for one...
if [ "x$ES_INCLUDE" = "x" ]; then
    # Locations (in order) to use when searching for an include file.
    for include in /usr/share/elasticsearch/elasticsearch.in.sh \
                   /usr/local/share/elasticsearch/elasticsearch.in.sh \
                   /opt/elasticsearch/elasticsearch.in.sh \
                   ~/.elasticsearch.in.sh \
                   "`dirname "$0"`"/elasticsearch.in.sh; do
        if [ -r "$include" ]; then
            . "$include"
            break
        fi
    done
# ...otherwise, source the specified include.
elif [ -r "$ES_INCLUDE" ]; then
    . "$ES_INCLUDE"
fi

if [ -x "$JAVA_HOME/bin/java" ]; then
    JAVA="$JAVA_HOME/bin/java"
else
    JAVA=`which java`
fi

if [ ! -x "$JAVA" ]; then
    echo "Could not find any executable java binary. Please install java in your PATH or set JAVA_HOME"
    exit 1
fi

if [ -z "$ES_CLASSPATH" ]; then
    echo "You must set the ES_CLASSPATH var" >&2
    exit 1
fi

# Special-case path variables.
case `uname` in
    CYGWIN*)
        ES_CLASSPATH=`cygpath -p -w "$ES_CLASSPATH"`
        ES_HOME=`cygpath -p -w "$ES_HOME"`
    ;;
esac

launch_service()
{
    pidpath=$1
    daemonized=$2
    props=$3
    es_parms="-Delasticsearch"

    if [ "x$pidpath" != "x" ]; then
        es_parms="$es_parms -Des.pidfile=$pidpath"
    fi

    # The es-foreground option will tell Elasticsearch not to close stdout/stderr, but it's up to us not to daemonize.
    if [ "x$daemonized" = "x" ]; then
        es_parms="$es_parms -Des.foreground=yes"
        exec "$JAVA" $JAVA_OPTS $ES_JAVA_OPTS $es_parms -Des.path.home="$ES_HOME" -cp "$ES_CLASSPATH" $props \
                org.elasticsearch.bootstrap.Elasticsearch
        # exec without running it in the background, makes it replace this shell, we'll never get here...
        # no need to return something
    else
        # Startup Elasticsearch, background it, and write the pid.
        exec "$JAVA" $JAVA_OPTS $ES_JAVA_OPTS $es_parms -Des.path.home="$ES_HOME" -cp "$ES_CLASSPATH" $props \
                    org.elasticsearch.bootstrap.Elasticsearch &2
            exit 1
        ;;
    esac
done

# Start up the service
launch_service "$pidfile" "$daemonized" "$properties"

exit $?



시스템 구성 시스템 설정


file descriptors 파일 설명자


기계에서 열 수 있는 파일 설명자 수를 32k~64k로 늘리는 것을 권장합니다.프로세스가 열 수 있는 파일 설명자의 개수를 검사하기 위해es가 시작될 때 매개 변수-Des를 추가합니다.max-open-files를 true로 설정하면 프로세스가 열 수 있는 파일 설명자의 개수를 표시할 수 있습니다.


아니면 노드의 max_를 검색할 수도 있습니다file_descriptors 정보, Node Info API 사용:

curl localhost:9200/_nodes/process?pretty

memory settings 메모리 설정


Linux 커널은 파일 시스템 캐시에 가능한 한 많은 메모리를 할당합니다. 사용하지 않은 프로그램의 메모리를 급히 바꿉니다.이렇게 하면elasticsearch 프로세스 메모리가 바뀔 수 있습니다.메모리 교환은elasticsearch에 있어 성능과 안정성에 매우 해롭기 때문에 우리는 가능한 한 피해야 한다.다음과 같은 세 가지 옵션이 있습니다.
  • 교환 금지

  • 가장 간단한 방법은 메모리 교환을 완전히 비활성화하는 것이다. 일반적으로 Elasticsearch는 한 기계에서 실행되는 유일한 서비스로 메모리 사용량은 ES_HEAP_SIZE 환경 변수 제어.교환을 사용할 필요가 없을 것 같습니다.Linux 시스템에서 스왑을 잠시 비활성화할 수 있습니다.
     sudo swapoff -a

    교환을 영구적으로 사용하지 않고/etc/fstab 파일을 편집하며 swap 단어를 포함하는 모든 줄을 주석할 수 있습니다.
  • swappiness 설정

  • 장vim을 통해.swapniess를 0으로 설정하면 시스템 코어가 일반적인 상황에서es프로세스가 차지하는 메모리 교환을 하지 않지만, 긴급한 상황에서는 교환을 허용합니다.
    3.5-rc1 및 이상의 커널에서 swapniess를 1로 설정하면 OOM이 프로세스를 직접 죽이고 교환하지 않습니다.이 경우 긴급한 상황에서도 교환할 수 있도록 swapniess를 1로 설정해야 한다.
  • mlockall  

  • 이 구성 방법은 Linux/Unix 시스템에만 적용됩니다.mlockall을 사용하여elasticsearch 프로세스에서 사용하는 메모리 공간을 잠그십시오.이렇게 하면 이 메모리 공간이 바뀌는 것을 금지할 수도 있다.이런 방식을 사용한다면config/elasticsearch에 있어야 합니다.yml 파일에 추가:
    bootstrap.mlockall: true

    elasticsearch를 시작하면 mlockall 필드를 보면서 메모리가 잠겼는지 확인할 수 있습니다.
    curl localhost:9200/_nodes/process?pretty

    mlockall 옵션이false인 것을 보면 이 설정이 적용되지 않았음을 나타냅니다. 일반적으로elasticsearch를 시작하는 사용자가 메모리를 잠글 수 있는 권한이 없기 때문에 루트로 전환해서 다시 시작할 수 있습니다.또 다른 이유는 시스템의 임시 디렉터리/tmp를 마운트할 때 noexec 옵션을 사용했기 때문입니다. 이 때 elasticsearch에 임시 디렉터리를 다시 지정하면 됩니다.
    ./bin/elasticsearch -Djna.tmpdir=/path/to/new/dir

    mlockall은 JVM이나 셸 세션을 종료할 수 있습니다. 더 많은 메모리를 할당하려고 시도할 때 (사용 가능한 메모리를 초과했습니다.)

    elasticsearch 설정


    elasticsearch 구성 파일은 ES_홈/config 디렉터리에 이 디렉터리에 두 개의 프로필이 있습니다.yml은elasticsearch의 각 모듈,logging을 설정하는 데 사용됩니다.yml은elasticsearch 로그를 설정하는 데 사용됩니다.
    구성 파일 형식은 YMAL입니다.

    paths 경로 설정


    실제 응용 프로그램에서, 너는 거의 틀림없이 데이터 파일 저장을 바꾸고 싶어 할 것이다
    경로 및 로그 파일 저장 경로:
    path:
      logs: /var/log/elasticsearch
      data: /var/data/elasticsearch

    clustername 클러스터 이름


    그룹에 이름을 지정하는 것을 잊지 마십시오. 이 이름은 유일한 식별 그룹에 사용되며 노드를 자동으로 발견하고 추가하는 데 사용됩니다.
    cluster:
      name: 

    nodename 노드 이름


    호스트 이름으로 설정하는 등 각 노드의 이름을 설정해야 할 수도 있습니다.기본적으로elasticsearch는 노드 이름을 무작위로 선택합니다.
    node:
      name: 

    내부에서 상술한 설정은 모두 명칭 공간 표시 형식으로 조합될 것이다. 예를 들어 node.name, path.logs,cluster.name이것은 JSON 형식의 다른 형식의 프로필을 사용할 수 있다는 것을 의미합니다.프로필이 JSON 형식이라면 elasticsearch만 사용하면 됩니다.yml가elasticsearch로 변경되었습니다.json
    다음과 같이 구성합니다.

    configuration styles 구성 스타일

    {
        "network" : {
            "host" : "10.0.0.4"
        }
    }

    즉, 다음과 같은 매개변수를 외부에서 쉽게 구성할 수 있습니다.
    $ elasticsearch -Des.network.host=10.0.0.4

    또 다른 방식은 장에스다.default 접두사가 es를 대체합니다.접두사, 이것은 기본 설정이 사용될 것을 의미하며, 설정 파일에 현식 설정이 없다면.그리고 또 하나의 선택은요.
    구성 파일에서
    $를 사용합니다.기호는 다음과 같은 환경 변수 값으로 해석됩니다.
    {
        "network" : {
            "host" : "${ES_NET_HOST}"
        }
    }

    구성 파일의 위치는 시스템 속성을 통해 외부에 지정할 수 있습니다.
    $ elasticsearch -Des.config=/path/to/config/file

    index settings 인덱스 설정


    집단에서 색인을 만들 때 자신의 설정을 제공할 수 있습니다.예를 들어 다음 코드는 메모리 기반 저장소를 만듭니다.
    기본적으로 파일 시스템에 저장된 인덱스가 아닌 인덱스 하나(제출 데이터 형식은 YMAL 또는 JSON일 수 있음):
    $ curl -XPUT http://localhost:9200/kimchy/ -d \
    '
    index :
        store:
            type: memory
    '

    인덱스 설정은 노드 레벨에서도 수행할 수 있습니다. 그러면 인덱스가 명시적으로 구성되지 않고 구성 파일에 저장됩니다.
    index :
        store:
            type: memory

    다시 말하면 색인 단계의 설정은 노드 단계의 설정을 덮어쓸 수 있다.다음과 같이 설정할 수도 있습니다.
    $ elasticsearch -Des.index.store.type=memory

    로그 로그


    elasticsearch 내부에서log4j를 사용하여 로그를 생성하면 YMAL 형식에 따라log4j의 설정을 간소화할 수 있습니다.

    좋은 웹페이지 즐겨찾기