Elasticsearch 는 각 노드들 별로 실행될 설정들을 적용함으로써 노드들의 역할을 나누거나 클러스터의 속성을 결정하게 됩니다.
Elasticsearch의 실행 환경을 설정하는 방법은 크게 2가지가 있다.
- Home Directory > Config 경로 아래 있는 파일 변경 (e.g. for Mac - /usr/local/etc/elasticsearch/elasticsearch.yml)
- 시작 명령어로 설정
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_ 로 해 놓으면 서버의 네트워크 주소가 바뀌어도 설정파일은 변경하지 않아도 되기 때문에 편리하다.
- 만약 실제 IP로 설정하면 운영모드로 실행되어 노드를 시작할 때 부트스트랩 체크를 하게됨
- 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]
'Elasticsearch (ELK) > Elasticsearch' 카테고리의 다른 글
4. 마스터 노드와 데이터 노드 (0) | 2020.05.26 |
---|---|
3-2. Elasticsearch 시스템 구조 - 인덱스와 샤드 (0) | 2020.05.26 |
3-1. Elasticsearch 시스템 구조 - 클러스터 구성 (0) | 2020.05.26 |
1. Installing & Starting Elastic Search (0) | 2020.05.25 |
Elasticsearch 참고문헌 (0) | 2020.05.16 |