본문 바로가기

Elasticsearch (ELK)/Elasticsearch

2. Elasticsearch 환경 설정

Elasticsearch 는 각 노드들 별로 실행될 설정들을 적용함으로써 노드들의 역할을 나누거나 클러스터의 속성을 결정하게 됩니다.

 

Elasticsearch의 실행 환경을 설정하는 방법은 크게 2가지가 있다.

  1. Home Directory > Config 경로 아래 있는 파일 변경 (e.g. for Mac - /usr/local/etc/elasticsearch/elasticsearch.yml)
  2. 시작 명령어로 설정

 

I. 설정 파일을 통해 설정하기

각 설정파일이 하는일

 

  • jvm.options - Java 힙메모리 및 환경변수

  • elasticsearch.yml - Elasticsearch 옵션

  • log4j2.properties - 로그 관련 옵션

A. jvm.options

Elasticsearch는 Java의 가상머신 위에서 실행이 되는데 7.0 기준으로 1gb의 힙메모리가 기본으로 설정되어 있습니다. 이 설정들은 jvm.options 파일에서 아래 내용들을 수정하여 변경할 수 있습니다.

-Xms1g
-Xmx1g

이 밖에도 Elasticsearch를 실행할 때 java와 관련된 환경변수들은 대부분 jvm.options 파일에서 설정이 가능합니다.

B. elasticsearch.yml

  • cluster.name : "<클러스터명>" - 클러스터명이 똑같다면 바인딩이 되므로 반드시 고유한 이름으로 정하자
  • node.name: "<노드명>" - 비 설정시 Default로 호스트명으로 자동 설정됨
  • node.attr.<key>: "<value>" - 노드별 속성 부여(네임 스페이스)
  • path.data: ["<경로>"] - Default로 홈 경로아래의 data로 설정됨
  • path.logs:["<경로>"] - Default로 홈 경로아래의 logs로 설정됨
  • network.host:<ip 주소> - 주석처리되거나 루프백인경우에는 Elasticsearch는 개발모드로 실행됨 
    • 만약 실제 IP로 설정하면 운영모드로 실행되어 노드를 시작할 때 부트스트랩 체크를 하게됨
      • network.host: 서버의 내/외부 주소 모두 지정
      • network.bind_host: 내부망 지정
      • network.publish_host: 외부망 지정
    • 변수 값 
      • _local_ (루프백 주소 127.0.0.1)
      • _site_ (로컬 네트워크 주소)
      • _global_ (네트워크 외부에서 바라보는 주소)
      • 꿀팁 : 클러스터를 구성할 시 설정을 network.host: _site_ 로 해 놓으면 서버의 네트워크 주소가 바뀌어도 설정파일은 변경하지 않아도 되기 때문에 편리하다.
  • http.port: <포트번호> - http 포트설정
    • Default는 9200이며 만약 port가 사용중이라면 9200~9299 사이값을 차례대로 사용합니다.
  • transport.port: <포트번호> - tcp 포트설정
    • Default는 9300이며 만약 port가 사용중이라면 9300~9399 사이값을 차례대로 사용합니다.
  • discovery.seed_hosts: ["<호스트-1>", "<호스트-2>", ...] -
    클러스터 구성을 위해 바인딩 할 원격 노드의 IP 또는 도메인 주소를 배열 형태로 입력합니다.
    • 주소만 입력했다면 Default로 9300~9305 사이의 포트값을 검색한다.
    • 만약 9300~9305 사이의 포트로 설정이 불가하면 반드시 포트정보를 넣어줘야함
    • 이와 같이 원격에 있는 노드들을 찾아 바인딩 하는 과정을 디스커버리라고 부름
  • cluster.initial_master_nodes: ["<노드-1>", "<노드-2>", ...] -
    클러스터가 최초 실행 될 때 명시된 노드들을 대상으로 마스터 노드를 선출합니다.
  • elasticsearch.yml 환경변수 
node.name: ${HOSTNAME}
network.host: ${ES_NETWORK_HOST}

 

C. 노드의 역할 : master, data, ingest, ml

각자의 노드들이 서로 다른 역할들을 수행하도록 클러스터를 구성할 수 있습니다. (모든 Default 값은 True)

  • node.master: true - 마스터 후보(master eligible) 노드 여부를 설정합니다.
  • node.data : true - 노드가 데이터를 저장하도록 합니다.
  • node.ingest: true - 데이터 색인시 전처리 작업인 ingest pipeline 작업의 수행을 할 수 있는지 여부를 지정
  • node.ml : true - 해당 노드가 머신러닝 작업 수행을 할 수 있는지 여부를 지정

 

 

 

II. 시작 커맨드 라인을 통해 설정하기

-E 커맨드 옵션을 통해 설정가능하다 (-E <옵션>=<값>)

클러스터명: my-cluster / 노드명:  node-1 로 노드 실행
$ bin/elasticsearch -E cluster.name=my-cluster -E node.name="node-1"
[2019-08-26T14:23:51,399][INFO ][o.e.e.NodeEnvironment    ] [node-1] using [1] data paths, mounts [[/ (/dev/disk1s1)]], net usable_space [88.9gb], net total_space [465.6gb], types [apfs]
[2019-08-26T14:23:51,401][INFO ][o.e.e.NodeEnvironment    ] [node-1] heap size [989.8mb], compressed ordinary object pointers [true]
[2019-08-26T14:23:51,455][INFO ][o.e.n.Node               ] [node-1] node name [node-1], node ID [RDBLYDInSxmMV1PEVit_pQ], cluster name [my-cluster]
[2019-08-26T14:23:51,455][INFO ][o.e.n.Node               ] [node-1] version[7.3.0], pid[50389], build[default/tar/de777fa/2019-07-24T18:30:11.767338Z], OS[Mac OS X/10.14.6/x86_64], JVM[Oracle Corporation/Java HotSpot(TM) 64-Bit Server VM/1.8.0_151/25.151-b12]
[2019-08-26T14:23:51,456][INFO ][o.e.n.Node               ] [node-1] JVM home [/Library/Java/JavaVirtualMachines/jdk1.8.0_151.jdk/Contents/Home/jre]
[2019-08-26T14:23:51,456][INFO ][o.e.n.Node               ] [node-1] JVM arguments [-Xms1g, -Xmx1g, -XX:+UseConcMarkSweepGC, -XX:CMSInitiatingOccupancyFraction=75, -XX:+UseCMSInitiatingOccupancyOnly, -Des.networkaddress.cache.ttl=60, -Des.networkaddress.cache.negative.ttl=10, -XX:+AlwaysPreTouch, -Xss1m, -Djava.awt.headless=true, -Dfile.encoding=UTF-8, -Djna.nosys=true, -XX:-OmitStackTraceInFastThrow, -Dio.netty.noUnsafe=true, -Dio.netty.noKeySetOptimization=true, -Dio.netty.recycler.maxCapacityPerThread=0, -Dlog4j.shutdownHookEnabled=false, -Dlog4j2.disable.jmx=true, -Djava.io.tmpdir=/var/folders/0d/m7m670h13pz3lvr9xjz07zk80000gn/T/elasticsearch-5549928559955731670, -XX:+HeapDumpOnOutOfMemoryError, -XX:HeapDumpPath=data, -XX:ErrorFile=logs/hs_err_pid%p.log, -XX:+PrintGCDetails, -XX:+PrintGCDateStamps, -XX:+PrintTenuringDistribution, -XX:+PrintGCApplicationStoppedTime, -Xloggc:logs/gc.log, -XX:+UseGCLogFileRotation, -XX:NumberOfGCLogFiles=32, -XX:GCLogFileSize=64m, -Dio.netty.allocator.type=unpooled, -XX:MaxDirectMemorySize=536870912, -Des.path.home=/Users/kimjmin/elastic/getStart/elasticsearch-7.3.0, -Des.path.conf=/Users/kimjmin/elastic/getStart/elasticsearch-7.3.0/config, -Des.distribution.flavor=default, -Des.distribution.type=tar, -Des.bundled_jdk=true]