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 단어를 포함하는 모든 줄을 주석할 수 있습니다.
장vim을 통해.swapniess를 0으로 설정하면 시스템 코어가 일반적인 상황에서es프로세스가 차지하는 메모리 교환을 하지 않지만, 긴급한 상황에서는 교환을 허용합니다.
3.5-rc1 및 이상의 커널에서 swapniess를 1로 설정하면 OOM이 프로세스를 직접 죽이고 교환하지 않습니다.이 경우 긴급한 상황에서도 교환할 수 있도록 swapniess를 1로 설정해야 한다.
이 구성 방법은 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의 설정을 간소화할 수 있습니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Embulk를 사용하여 ElasticCloud로 보내기Embulk에서 ElasticCloud에 보낼 수 있을까라고 생각비망록도 겸해 기술을 남깁니다 Embulk 설치 ElasticCloud (14 일 체험판) brew라면 아래 명령 입력 파일 만들기 파일 내용 seed...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.