Elasticsearch5.4 클러스터(一) 설치 배포
15066 단어 ElasticSearch
생산 환경은 1.7, Elasticsearch5를 사용한다.x는 성능이 크게 향상되었고 5.4로 업그레이드할 계획입니다. 먼저 오프라인에서 배치 검증을 했습니다. 그 과정에서 많은 설정 항목이 바뀌었고 각종 오류가 발생했습니다.공식 문서를 참조하십시오.https://www.elastic.co/guide/en/elasticsearch/reference/current/_installation.html인터넷에서 오래된 저버전 설정을 많이 찾았습니다. 그렇지 않거나 완전하지 않거나breakingchanges (변경 항목과 호환되지 않음) 를 주의해야 합니다.
노드 기능 분리
master, data, client 분리 배치, 저장 용량, 메모리, CPU 계획 (권위 있는 지침:https://www.elastic.co/guide/en/elasticsearch/guide/current/hardware.html).마스터 노드는 데이터를 저장하지 않고 메모리와 cpu가 비교적 낮으며 일반적으로 3개의 마스터를 배치하여 신뢰성을 확보한다.하나의 큰 디스크를 사용하는 것은 권장되지 않으며, 여러 개의 SSD를 사용하면 IO를 동시에 보낼 수 있습니다.클라이언트가 아닌 노드는 http 서비스의 노드(http.enabled:false)를 열지 않을 수 있으며, 헤드,bigdesk,marvel 등 모니터링 플러그인을 설치하지 마십시오. 이렇게 하면 데이터 노드 서버는 창설/업데이트/삭제/색인 데이터 조회 등 조작만 처리할 수 있습니다.
메모리 할당
메모리는 32G를 초과하지 마십시오. 자바 버전은 jdk1.8(We recommend installing Java version 1.8.0_131 or later), es 최대 분배 - Xms32766m - Xmx32766m(메모리 대상 바늘 압축 기술), GC 사용 G1은 설정하지 마십시오 - Xmn(스팸 회수 설정 참조:http://www.oracle.com/technetwork/articles/java/g1gc-1984535.html).물리적 메모리의 절반은 ES에, 나머지 절반은 Lucene에 주어집니다. 그렇지 않으면 성능에 영향을 받습니다.128G 메모리의 기계는 최대 2개의 es 인스턴스를 배치합니다.
시스템 구성 수정
swap 사용 안 함 (일부 코어 버전에서 swappness=0은 OOM을 유발합니다.)vim/etc/sysctl.conf 수정 vm.swappiness=1, 설정 vm.max_map_count=262144 (그렇지 않으면 시작이 잘못됨: max virtual memory areas vm.max_map_count [65530] likely too low, increase to at least [262144])
vm.swappiness=1
vm.max_map_count=262144
즉시 효력이 발생하면sysctl-pes 사용자 제한을 수정합니다. 루트로 Elasticsearch를 시작할 수 없습니다. 예를 들어tomcat 사용자를 사용할 수 있습니다. (사용자가 다시 로그인하면 적용)
vim/etc/security/limits.conf
tomcat soft memlock unlimited
tomcat hard memlock unlimited
Elasticsearch 5.4.1 설치
단계 참조 설치(https://www.elastic.co/downloads/elasticsearch), 우리는 es를/usr/local/디렉터리에 설치합니다
cd /usr/local/
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.4.1.tar.gz
sha1sum elasticsearch-5.4.1.tar.gz
tar -xzf elasticsearch-5.4.1.tar.gz
cd elasticsearch-5.4.1/
소프트 링크 만들기:ln -s /usr/local/elasticsearch-5.4.1 elasticsearch
설치 디렉터리/usr/local/elasticsearch/bin/elasticsearch 시작 스크립트를 업데이트하고 jvm 프로필 찾기 순서를 수정하며 "$LEIDA_ES_HOME"/config/jvm를 추가합니다.옵션, 가상 기기의 매개 변수로 하여금 실례 자신의 설정을 우선적으로 사용하게 합니다. 왜냐하면 우리는 하나의 물리 기기에서 여러 개의es실례를 사용할 수 있기 때문입니다.if [ -z "$ES_JVM_OPTIONS" ]; then
for jvm_options in "$LEIDA_ES_HOME"/config/jvm.options \
"$ES_HOME"/config/jvm.options \
/etc/elasticsearch/jvm.options; do
if [ -r "$jvm_options" ]; then
ES_JVM_OPTIONS=$jvm_options
break
fi
done
fi
JVM 매개변수의 무더기 크기 및 G1GC 방식 수정(vim/usr/local/elasticsearch/config/jvm.options):-Xms32766m
-Xmx32766m
## GC configuration
#-XX:+UseConcMarkSweepGC
#-XX:CMSInitiatingOccupancyFraction=75
#-XX:+UseCMSInitiatingOccupancyOnly
## G1GC
-XX:+UseG1GC
-XX:MaxGCPauseMillis=800
-XX:ParallelGCThreads=15
-XX:ConcGCThreads=4
mmseg 분사기
elasticsearch-analysis-mmseg-5.4.1 다운로드.zip 다운로드 주소:https://github.com/medcl/elasticsearch-analysis-mmseg/releases(elasticsearch.yml는 매개 변수 path.plugins 매개 변수를 지원하지 않습니다. 만약에 한 기계에 여러 개의 실례를 시작하면 모든 실례 자신의 플러그인을 설정하려고 합니다. 예를 들어master 노드에head 플러그인을 불러오지 않으면 원본 읽기 경로와 check 검증을 바꾸어야 합니다. 기본적으로는 설치 경로 아래의/usr/local/elasticsearch/plugins/)
cd /usr/local/elasticsearch/plugins/
unzip elasticsearch-analysis-mmseg-5.4.1.zip -d elasticsearch-analysis-mmseg-5.4.1
마스터 만들기
인스턴스 구성은/data/es/es_에 저장됨[tcpport] 아래
cd /data/es
mkdir -p es_9300/bin
mkdir -p es_9300/config
mkdir -p es_9300/data
mkdir -p es_9300/logs
cp /usr/local/elasticsearch/config/log4j2.properties /data/es/es_9300/config/log4j2.properties
cp /usr/local/elasticsearch/config/jvm.options /data/es/es_9300/config/jvm.options
JVM 더미 크기 수정, vim/data/es/es_9300/config/jvm.옵션, 설치 디렉터리의 기본 - Xms32766m는datanode에 사용되며,master의 더미는 줄여야 합니다.cp/usr/local/elasticsearch/config/elasticsearch.yml/data/es/es_9300/config/elasticsearch.yml
elasticsearch를 수정합니다.yml는 다음과 같다. IP, 포트와 저장 경로는 스스로 교체해야 하고 다른 2개의 마스터의 설정은 유사하다.뇌분열을 피하기 위해, 디스커버리.zen.minimum_master_nodes를 2로 설정 (비생산 환경 검증 우선 보증은 여기를 1로 설정할 수 있습니다)
bootstrap.memory_lock: true
bootstrap.system_call_filter: false
cluster.name: loganalysis
node.attr.box_type: master
node.name: master_1
node.master: true
node.data: false
discovery.zen.minimum_master_nodes: 1
discovery.zen.ping.unicast.hosts: ["master1ip:9300","master2ip:9300","master3ip:9300"]
discovery.zen.fd.ping_timeout: 50s
discovery.zen.fd.ping_retries: 6
cluster.routing.allocation.node_initial_primaries_recoveries: 6
cluster.routing.allocation.node_concurrent_recoveries: 6
cluster.routing.allocation.cluster_concurrent_rebalance: 4
network.host: master1ip
http.port: 9200
transport.tcp.port: 9300
path.conf: /data/es/es_9300/config
path.data: /data/es/es_9300/data
path.logs: /data/es/es_9300/logs
http.cors.enabled: true
http.cors.allow-origin: /.*/
http.cors.allow-credentials: true
시작 스크립트
하나의 물리기에 하나의 es만 설치되어 있기 때문에, 여러 개의 es 실례를 사용하려면, config 파일의 경로를 구분하고, 다른 스크립트를 복사해서 우리의 leida ES로 바꾸어야 합니다.sh, 마스터 시작
cd /data/es/es_9300/bin
./leidaES.sh start
elasticsearch's real path : /usr/local/elasticsearch-5.4.1
Starting elasticsearch es_9300: [ OK ]
스크립트 내용은 사실 검증과 start, stop 파라미터를 추가하여 명령을 정지합니다./leidaES.sh stop
#!/bin/sh
#
# init.d / servicectl compatibility (openSUSE)
#
if [ -f /etc/rc.status ]; then
. /etc/rc.status
rc_reset
fi
#
# Source function library.
#
if [ -f /etc/rc.d/init.d/functions ]; then
. /etc/rc.d/init.d/functions
fi
MAX_OPEN_FILES=600000
# max locked memory (kbytes, -l) 32G=1024*1024*32
MAX_LOCKED_MEMORY=33554432
# vim /etc/sysctl.conf add vm.max_map_count=262144
#MAX_MAP_COUNT=262144
ES_USER="tomcat"
ES_GROUP="tomcat"
JAVA_HOME=/usr/local/java/jdk1.8
ES_HOME="/usr/local/elasticsearch"
SCRIPT="$0"
# determine leida elasticsearch home
LEIDA_ES_HOME=`dirname "$SCRIPT"`/..
# make LEIDA ELASTICSEARCH_HOME absolute
LEIDA_ES_HOME=`cd "$LEIDA_ES_HOME"; pwd`
ES_NODE=`echo $LEIDA_ES_HOME|awk -F'/' '{print $NF}'`
CONF_DIR="${LEIDA_ES_HOME}/config"
WORK_DIR="/tmp/elasticsearch"
CONF_FILE="${CONF_DIR}/elasticsearch.yml"
#export ES_HOME
#export JAVA_HOME
export LEIDA_ES_HOME
exec="$ES_HOME/bin/elasticsearch"
if [ -f "$exec" ]; then
chmod 755 "$exec"
fi
prog="elasticsearch"
pidfile="$LEIDA_ES_HOME/${prog}.pid"
lockfile=/var/lock/subsys/$prog
# backwards compatibility for old config sysconfig files, pre 0.90.1
if [ -n $USER ] && [ -z $ES_USER ] ; then
ES_USER=$USER
fi
checkJava() {
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
}
start() {
checkJava
[ -x $exec ] || echo "$exec script file is not executable." ||exit 5
[ -f $CONF_FILE ] || echo "$CONF_FILE is not exists." || exit 6
# if [ -n "$MAX_LOCKED_MEMORY" -a -z "$ES_HEAP_SIZE" ]; then
# echo "MAX_LOCKED_MEMORY is set - ES_HEAP_SIZE must also be set"
# return 7
# fi
if [ -n "$MAX_OPEN_FILES" ]; then
ulimit -n $MAX_OPEN_FILES
fi
if [ -n "$MAX_LOCKED_MEMORY" ]; then
ulimit -l $MAX_LOCKED_MEMORY
fi
if [ -n "$MAX_MAP_COUNT" -a -f /proc/sys/vm/max_map_count ]; then
sysctl -q -w vm.max_map_count=$MAX_MAP_COUNT
fi
if [ -n "$WORK_DIR" ]; then
mkdir -p "$WORK_DIR"
chown "$ES_USER":"$ES_GROUP" "$WORK_DIR"
fi
# Ensure that the LEIDA_ES_HOME exists (it is cleaned at OS startup time)
if [ -n "$LEIDA_ES_HOME" ] && [ ! -e "$LEIDA_ES_HOME" ]; then
mkdir -p "$LEIDA_ES_HOME" && chown "$ES_USER":"$ES_GROUP" "$LEIDA_ES_HOME"
fi
chown -R "$ES_USER":"$ES_GROUP" "$LEIDA_ES_HOME"
chown -R "$ES_USER":"$ES_GROUP" "${ES_HOME}"
if [ -h "$ES_HOME" ]; then
eslink=`ls -ld "$ES_HOME"`
# Drop everything prior to ->
eslink=`expr "$eslink" : '.*-> \(.*\)$'`
echo "elasticsearch's real path : $eslink"
if expr "$eslink" : '/.*' > /dev/null; then
chown -R "$ES_USER":"$ES_GROUP" "${eslink}"
fi
fi
if [ -n "$pidfile" ] && [ ! -e "$pidfile" ]; then
touch "$pidfile" && chown "$ES_USER":"$ES_GROUP" "$pidfile"
fi
echo -n $"Starting $prog ${ES_NODE}: "
# if not running, start it up here, usually something like "daemon $exec" # -Djava.io.tmpdir=${WORK_DIR}
daemon --user $ES_USER --pidfile $pidfile $exec -d -p $pidfile -Epath.conf=${CONF_DIR}
retval=$?
echo
[ $retval -eq 0 ] && touch $lockfile
return $retval
}
stop() {
echo -n $"Stopping $prog ${ES_NODE}: "
# stop it here, often "killproc $prog"
killproc -p $pidfile -d 20 $prog
retval=$?
echo
[ $retval -eq 0 ] && rm -f $lockfile
return $retval
}
restart() {
stop
start
}
reload() {
restart
}
force_reload() {
restart
}
rh_status() {
# run checks to determine if the service is running or use generic status
status -p $pidfile $prog
}
rh_status_q() {
rh_status >/dev/null 2>&1
}
case "$1" in
start)
rh_status_q && exit 0
$1
;;
stop)
rh_status_q || exit 0
$1
;;
restart)
$1
;;
reload)
rh_status_q || exit 7
$1
;;
force-reload)
force_reload
;;
status)
rh_status
;;
condrestart|try-restart)
rh_status_q || exit 0
restart
;;
*)
echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload}"
exit 2
esac
exit $?
datanode 만들기
마스터 노드의 설정과 유사합니다. node를 주의하십시오.master:false와 node.data:true;node.name는 그룹에서 유일합니다.생산 환경에서 우리는 냉열 분리를 해야 한다. es1.7은 그룹을 나누어 실현하고 ES5는 이미 node로 바뀌었다.attr.box_type.또한 가장 좋은 것은datanode와clientnode가 독립하고 비생산 환경이 하나로 합쳐지는 것이다.cp/usr/local/elasticsearch/config/elasticsearch.yml/data/es/es_9301/config/elasticsearch.yml 수정elasticsearch.yml은 다음과 같습니다.
bootstrap.memory_lock: true
bootstrap.system_call_filter: false
cluster.name: loganalysis
node.attr.box_type: hot
node.name: hot_1
node.master: false
node.data: true
discovery.zen.minimum_master_nodes: 1
discovery.zen.ping.unicast.hosts: ["master1ip:9300","master2ip:9300","master3ip:9300"]
discovery.zen.fd.ping_timeout: 50s
discovery.zen.fd.ping_retries: 6
cluster.routing.allocation.node_initial_primaries_recoveries: 6
cluster.routing.allocation.node_concurrent_recoveries: 6
cluster.routing.allocation.cluster_concurrent_rebalance: 4
network.host: IP
http.port: 9201
transport.tcp.port: 9301
path.conf: /data/es/es_9301/config
path.data: /data/es/es_9301/data
path.logs: /data/es/es_9301/logs
http.cors.enabled: true
http.cors.allow-origin: /.*/
http.cors.allow-credentials: true
데이터 노드 시작
먼저 3개의 master 노드를 시작하고 설정된 여러 개의 데이터 노드를 시작하여 Es 집단을 구성합니다
cd /data/es/es_9301/bin
./leidaES.sh start
elasticsearch's real path : /usr/local/elasticsearch-5.4.1
Starting elasticsearch es_9301: [ OK ]
동적 템플릿 만들기
mmseg 단어와 기본 블록을 설정합니다. 복사하지 마십시오.모든doc에time 필드와 로그를 저장하는 msg 필드가 있습니다.
PUT /_template/default_template
{
"template": "*",
"settings": {
"index.refresh_interval": "15s",
"index.translog.flush_threshold_size": "1gb",
"index.translog.sync_interval": "1000000ms",
"index.codec": "best_compression",
"index.number_of_replicas": "0",
"index.number_of_shards": "1"
},
"mappings": {
"_default_": {
"_source": {
},
"dynamic_templates": [
{
"msg": {
"path_match": "msg",
"mapping": {
"analyzer": "mmseg_maxword",
"search_analyzer": "mmseg_maxword",
"omit_norms": true,
"type": "text"
}
}
},
{
"time": {
"path_match": "time",
"mapping": {
"type": "date"
}
}
},
{
"other": {
"mapping": {
"fielddata": {
"format": "doc_values"
},
"index": "not_analyzed",
"ignore_above":1000,
"omit_norms": true,
"doc_values": true
},
"match": "*"
}
}
],
"_all": {
"enabled": false
}
}
},
"aliases": {}
}
중국어 분사`mmseg_ 테스트maxword` ,`mmseg_complex` ,`mmseg_simple` curl -X GET "localhost:9200/_analyze?analyzer=mmseg_maxword&pretty=true" -d ' 12**3 ,www.elastic.co'
클러스터 상태 API 인터페이스 테스트
클러스터 상태 보기curl'localhost: 9200/_cat/health?v'색인 만들기(sense 플러그인 실행) PUT/test doc 데이터 삽입 POST/test/china/1 {"msg": "미국이 이라크에 남긴 것은 난장판인가"} POST/test/china/2 {"msg": "공안부: 각지의 스쿨버스가 최고 도로권을 누릴 것이다"} POST/test/china/3 {"msg": "한중 어경 충돌 조사: 한국 경찰이 매일 평균 중국 어선 1척을 압수했다"} POST/test/china/4 {"msg": "LA 주재 중국 영사관이 아시아계 남자 총격 용의자에게 자수했다"}데이터를 검색하면 두 개의 데이터를 찾을 수 있다.POST/test/china/_search? {"query": {"bool": {"must": [{"match_phrase_prefix": {"msg": {"query": "중국"}], "must_not": []}, "from": 0, "size": 40} 이 집단이 정상적으로 작동하려면 모니터링 플러그인을 설치하고 후속 최적화 설정을 해야 합니다
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
spring-data-elasticsearch 페이지 조회부록: 1. 이름에서 알 수 있듯이QueryBuilder는 검색 조건, 필터 조건을 구축하는 데 사용되고 SortBuilder는 정렬을 구축하는 데 사용된다. 예를 들어 우리는 어느 위치에서 100미터 범위 내의 모...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.