node.data=true/false
: 실제 색인을 가지고 있는 데이터 노드가 될 수 있는지 여부node.master=true/false
: 마스터 노드가 될 수 있는지 여부node.data=false, node.master=false
인 검색 클라이언트 전용노드를 만들어서, 검색 요청을 여기서 받은 뒤에 데이터 노드에 검색을 요청하는 것이 가능하다. 이렇게 하면 실제 색인을 가진 데이터 노드는 클라이언트로부터의 socket 연결을 위한 오버헤드와 메모리 사용량을 줄일 수 있게 된다.라우팅을 강제할 수 있다. 라우팅 옵션 없이는 인덱싱 불가.
"mappings": { "[indexname]": { "_routing": { "required": true } } }
host:9200/_cluster/settings?pretty
: Cluster 상태 조회host:9200/_cluster/health?pretty
: Cluster health check Cluster Healthnetwork
설정이 복잡해진다.network.host=0.0.0.0
으로 하고 docker 실행시 --net=host
옵션을 준다. 하지만 이 경우 보안상 등의 문제가 있을 수 있다고 함.network.publish_host
에 직접 바인딩해준다.# network.host는 삭제하고, bind_host는 아래와 같이. eth0 는 다른 interface 일 수 있음 network.bind_host: _eth0:ipv4_ # 혹은 0.0.0.0 도 가능한지 확인할 것. # elasticsearch 실행시 network.publish_host를 인자로 넘기고, --network.publish_host $ES_PUBLISH_HOST # docker 실행시에 다음 명령으로 해당 Host 서버의 IP값을 넣어준다. docker run ... -e ES_PUBLISH_HOST=`hostname -I | awk '{print $1}'` # AWS EC2 인스턴스에서는 docker run ... -e ES_PUBLISH_HOST=`curl -s http://169.254.169.254/latest/meta-data/local-ipv4`
Docker run 시에 다음 옵션을 추가해야 한다.
# JVM Heap Swap 방지 설정이 돼 있을 때 아래 옵션을 줘서 실행해야 한다. (bootstrap.mlockall: true) # --cap-add=IPC_LOCK --ulimit memlock=-1:-1 docker run --cap-add=IPC_LOCK --ulimit memlock=-1:-1 ... # 그렇지 않으면 다음과 같은 오류 발생하고 메모리 설정이 올바로 작동 안함 Unable to lock JVM Memory: error=12,reason=Cannot allocate memory This can result in part of the JVM being swapped out. Increase RLIMIT_MEMLOCK, soft limit: 65536, hard limit: 65536 These can be adjusted by modifying /etc/security/limits.conf, for example: # allow user 'someuser' mlockall coupang soft memlock unlimited coupang hard memlock unlimited If you are logged in interactively, you will have to re-login for the new limits to take effect.
JVM Heap Dump를 떠야 할 때 대비해서 다음 옵션도 추가
--cap-add=SYS_PTRACE
JAVA_OPTS
: Java 기본 옵션들ES_HEAP_SIZE
: -Xmx, -Xms
에 같은 값으로 들어감ES_HEAP_NEWSIZE
: -Xmn
ES_DIRECT_SIZE
: -XX:MaxDirectMemorySize
ES_GC_OPTS
: Java Garbage Collection 관련옵션ES_GC_LOG_FILE
: GC log 파일관련 옵션index.refresh_interval: 시간s
: 인덱스를 push 하는 시간이라고 보면 되는데 5s
형태로 준다. 길수록 CPU 점유율은 떨어지지만 검색에 안나오는 시간도 길어진다.bootstrap.mlockall: true
: Linux 등에서 ES의 메모리를 swapping 하지 않게 설정 등.cat threadpool
GET /_cat/thread_pool
file: type: rollingFile file: ${path.logs}/${cluster.name}.log maxFileSize: 104857600 maxBackupIndex: 10 layout: type: pattern conversionPattern: "[%d{ISO8601}][%-5p][%-25c] %.10000m%n"
XxxTokenizerFactory
생성자가 한 번 더 호출되는 문제가 있다. 이에 따라 type 이름과 토크나이저 이름을 동일하게 맞춰줘야 했다. 이 경우 생성자가 인덱스당 한 번씩만 호출되었다.