2.2.1 다운로드 설치 및 실행

이 문서의 허가되지 않은 무단 복제나 배포 및 출판을 금지합니다. 본 문서의 내용 및 도표 등을 인용하고자 하는 경우 출처를 명시하고 김종민(kimjmin@gmail.com)에게 사용 내용을 알려주시기 바랍니다.

Elasticsearch 실행을 위해서는 자바1.8 이상의 버전이 설치되어 있어야 하며 JAVA_HOME 환경변수가 잡혀있어야 합니다. 각 버전별로 필요한 자바 버전은 https://www.elastic.co/support/matrix#matrix_jvm 페이지에서 확인이 가능합니다.

Elasticsearch 7.0 버전 부터는 기본 배포판에 open-jdk 가 포함되어 있어 따로 Java를 설치 해 주지 않아도 됩니다. 대신 운영체제에 맞게 배포판을 받아야 합니다.

먼저 zip / tar.gz 배포판 설치 방법을 알아보겠습니다. 우선은 Linux / MacOS 기준으로 설명 드리겠습니다. 다운로드 한 파일의 압축을 푼 경로로 이동해서 bin/elasticsearch를 실행 해 보면 콘솔에서 다음과 같이 실행이 됩니다. 윈도우 운영체제의 경우 bin\elasticsearch.bat 를 실행하면 됩니다.

Elasticsearch 실행 화면
$ bin/elasticsearch
[2019-08-26T07:52:09,090][INFO ][o.e.e.NodeEnvironment ] [Jongminui-MacBook-Pro.local] using [1] data paths, mounts [[/ (/dev/disk1s1)]], net usable_space [89.1gb], net total_space [465.6gb], types [apfs]
[2019-08-26T07:52:09,106][INFO ][o.e.e.NodeEnvironment ] [Jongminui-MacBook-Pro.local] heap size [989.8mb], compressed ordinary object pointers [true]
[2019-08-26T07:52:09,169][INFO ][o.e.n.Node ] [Jongminui-MacBook-Pro.local] node name [Jongminui-MacBook-Pro.local], node ID [RDBLYDInSxmMV1PEVit_pQ], cluster name [elasticsearch]
[2019-08-26T07:52:09,169][INFO ][o.e.n.Node ] [Jongminui-MacBook-Pro.local] version[7.3.0], pid[38788], 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-26T07:52:09,170][INFO ][o.e.n.Node ] [Jongminui-MacBook-Pro.local] JVM home [/Library/Java/JavaVirtualMachines/jdk1.8.0_151.jdk/Contents/Home/jre]
[2019-08-26T07:52:09,170][INFO ][o.e.n.Node ] [Jongminui-MacBook-Pro.local] 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-785170093085857996, -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]
[2019-08-26T07:52:11,000][INFO ][o.e.p.PluginsService ] [Jongminui-MacBook-Pro.local] loaded module [aggs-matrix-stats]
[2019-08-26T07:52:11,000][INFO ][o.e.p.PluginsService ] [Jongminui-MacBook-Pro.local] loaded module [analysis-common]
[2019-08-26T07:52:11,000][INFO ][o.e.p.PluginsService ] [Jongminui-MacBook-Pro.local] loaded module [data-frame]
...

이제 Elasticsearch의 설치와 실행이 끝났습니다. (정말입니다!) 위 실행 화면을 보면 [Jongminui-MacBook-Pro.local] 라는 이름으로 Elasticsearch의 노드가 실행 된 것을 볼 수 있습니다. 노드 이름은 직접 지정이 가능하며 지정하지 않았다면 7.0 버전 부터는 호스트명으로 생성되고 5.x, 6.x 버전에서는 노드 프로세스의 UUID의 첫 7자 알파벳으로 지정됩니다. Elasticsearch 2.x 이전 버전에서느 실행을 시키면 노드명이 [Iron Man] 같은 아메리카코믹의 슈퍼영웅 이름으로 랜덤하게 생성 되었는데 저작권 문제 때문에 5.x 이상 부터는 디폴트 네임으로 사용이 불가능하게 되었습니다.

Elasticsearch를 실행할 때 추가적으로 -d, -p 옵션을 사용할 수 있습니다.

  • -d : Elasticsearch를 백그라운 데몬으로 실행합니다.

  • -p <파일명> : Elasticsearch 프로세스 ID를 지정한 파일에 저장합니다. 실행이 종료되면 저장된 파일은 자동으로 삭제됩니다.

-d : 백그라운드 실행

-d 옵션을 추가해서 Elasticsearch를 실행해보면 화면에 아무런 반응 없이 명령 수행이 끝나게 되고, 실행 중인 Elasticsearch의 실행 로그는 logs 디렉토리 아래에 <클러스터명>.log 파일에서 확인이 가능합니다. 아무런 설정을 하지 않았다면 기본적으로 logs/elasticsearch.log 에 저장됩니다.

백그라운드로 실행한 후 ps -ef | grep elasticsearch 명령으로 실행 중인 프로세스를 검색하면 Elasticsearch가 실행되고 있음을 확인할 수 있습니다.

ps 명령으로 백그라운드로 실행중인 Elasticsearch프로세스 검색
$ bin/elasticsearch -d
$ ps -ef | grep elasticsearch
501 38850 1 0 8:00AM ttys000 0:36.58 /Library/Java/JavaVirtualMachines/jdk1.8.0_151.jdk/Contents/Home/bin/java -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-7812365538420855556 -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 -cp /Users/kimjmin/elastic/getStart/elasticsearch-7.3.0/lib/* org.elasticsearch.bootstrap.Elasticsearch -d
501 38857 38850 0 8:00AM ttys000 0:00.03 /Users/kimjmin/elastic/getStart/elasticsearch-7.3.0/modules/x-pack-ml/platform/darwin-x86_64/bin/controller
501 38864 38857 0 8:00AM ttys000 0:00.52 ./autodetect --jobid=multiple --bucketspan=900 --lengthEncodedInput --maxAnomalyRecords=500 --timefield=@timestamp --persistInterval=12869 --maxQuantileInterval=23669 --limitconfig=/var/folders/0d/m7m670h13pz3lvr9xjz07zk80000gn/T/elasticsearch-7812365538420855556/limitconfig2644434340400277937.conf --quantilesState=/var/folders/0d/m7m670h13pz3lvr9xjz07zk80000gn/T/elasticsearch-7812365538420855556/multiple_quantiles_557343876454452728180.json --deleteStateFiles --fieldconfig=/var/folders/0d/m7m670h13pz3lvr9xjz07zk80000gn/T/elasticsearch-7812365538420855556/fieldconfig1365288688663343555.conf --logPipe=/var/folders/0d/m7m670h13pz3lvr9xjz07zk80000gn/T/elasticsearch-7812365538420855556/autodetect_multiple_log_38850 --input=/var/folders/0d/m7m670h13pz3lvr9xjz07zk80000gn/T/elasticsearch-7812365538420855556/autodetect_multiple_input_38850 --inputIsPipe --output=/var/folders/0d/m7m670h13pz3lvr9xjz07zk80000gn/T/elasticsearch-7812365538420855556/autodetect_multiple_output_38850 --outputIsPipe --restore=/var/folders/0d/m7m670h13pz3lvr9xjz07zk80000gn/T/elasticsearch-7812365538420855556/autodetect_multiple_restore_38850 --restoreIsPipe --persist=/var/folders/0d/m7m670h13pz3lvr9xjz07zk80000gn/T/elasticsearch-7812365538420855556/autodetect_multiple_persist_38850 --persistIsPipe
501 38867 38460 0 8:00AM ttys000 0:00.00 grep --color=auto --exclude-dir=.bzr --exclude-dir=CVS --exclude-dir=.git --exclude-dir=.hg --exclude-dir=.svn elasticsearch
$ head logs/elasticsearch.log
[2019-08-26T07:52:09,090][INFO ][o.e.e.NodeEnvironment ] [Jongminui-MacBook-Pro.local] using [1] data paths, mounts [[/ (/dev/disk1s1)]], net usable_space [89.1gb], net total_space [465.6gb], types [apfs]
[2019-08-26T07:52:09,106][INFO ][o.e.e.NodeEnvironment ] [Jongminui-MacBook-Pro.local] heap size [989.8mb], compressed ordinary object pointers [true]
[2019-08-26T07:52:09,169][INFO ][o.e.n.Node ] [Jongminui-MacBook-Pro.local] node name [Jongminui-MacBook-Pro.local], node ID [RDBLYDInSxmMV1PEVit_pQ], cluster name [elasticsearch]
[2019-08-26T07:52:09,169][INFO ][o.e.n.Node ] [Jongminui-MacBook-Pro.local] version[7.3.0], pid[38788], 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-26T07:52:09,170][INFO ][o.e.n.Node ] [Jongminui-MacBook-Pro.local] JVM home [/Library/Java/JavaVirtualMachines/jdk1.8.0_151.jdk/Contents/Home/jre]
[2019-08-26T07:52:09,170][INFO ][o.e.n.Node ] [Jongminui-MacBook-Pro.local] 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-785170093085857996, -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 프로세스를 종료하려면 kill 명령을 사용해야 합니다. 위에서 현재 실행되고 있는 엘라스틱서치의 프로세스 ID는 38850 입니다. kill 38850 명령으로 엘라스틱서치를 종료하고 다시 프로세스를 확인하면 프로세스가 종료된 것을 확인할 수 있습니다.

kill 명령으로 엘라스틱서치 프로세스 종료
$ kill 38850
$ ps -ef | grep elasticsearch
501 38901 38460 0 8:03AM ttys000 0:00.00 grep --color=auto --exclude-dir=.bzr --exclude-dir=CVS --exclude-dir=.git --exclude-dir=.hg --exclude-dir=.svn elasticsearch

-p : 프로세스 ID 파일로 저장

-p <파일명> 옵션을 추가해 실행된 Elasticsearch 프로세스 ID를 특정 파일에 저장할 수 있습니다. es.pid라는 파일에 실행된 Elasticsearch 프로세스 ID를 저장해 보겠습니다. 명령을 실행한 뒤 es.pid 파일의 내용을 확인하고 실행 중인 프로세스와 비교해 보겠습니다.

-p 옵션으로 es.pid 파일에 프로세스 ID 저장
$ bin/elasticsearch -d -p es.pid
$ ls
LICENSE.txt README.textile config es.pid lib modules
NOTICE.txt bin data jdk logs plugins
$ cat es.pid
39060
$ ps -ef | grep elasticsearch
501 39060 1 0 8:07AM ttys000 0:39.02 /Library/Java/JavaVirtualMachines/jdk1.8.0_151.jdk/Contents/Home/bin/java -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-7723664224795657363 -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 -cp /Users/kimjmin/elastic/getStart/elasticsearch-7.3.0/lib/* org.elasticsearch.bootstrap.Elasticsearch -d -p es.pid
...

위에서 es.pid 에 저장된 내용과 실행중인 프로세스 ID 모두 39060인 것을 확인할 수 있습니다. 프로세스 ID가 저장된 es.pid 파일은 실행 중인 Elasticsearch 프로세스를 종료하면 자동으로 삭제됩니다. 이제 이 옵션을 활용해서 Elasticsearch를 데몬으로 실행하는 start.sh 파일과 stop.sh 파일을 만들어 보겠습니다. 각 파일의 내용은 다음과 같이 합니다.

<start.sh> 파일의 내용
<stop.sh> 파일의 내용
<start.sh> 파일의 내용
bin/elasticsearch -d -p es.pid
<stop.sh> 파일의 내용
kill `cat es.pid`

위 파일들을 Elasticsearch 홈 경로에 저장하고 실행할 수 있도록 권한을 755로 변경합니다.

start.sh, stop.sh 파일 생성 및 실행 권한 부여
$ echo 'bin/elasticsearch -d -p es.pid' > start.sh
$ echo 'kill `cat es.pid`' > stop.sh
$ chmod 755 start.sh stop.sh

이제 start.sh를 실행해 Elasticsearch 프로세스가 실행된 것을 확인하고, 다시 stop.sh을 실행해 Elasticsearch 프로세스를 종료 해 보겠습니다.

start.sh, stop.sh로 Elasticsearch 실행 및 종료
$ ./start.sh
$ ps -ef | grep elasticsearch
501 39259 1 0 8:18AM ttys000 0:09.14 /Library/Java/JavaVirtualMachines/jdk1.8.0_151.jdk/Contents/Home/bin/java -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-5569881625664576635 -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 -cp /Users/kimjmin/elastic/getStart/elasticsearch-7.3.0/lib/* org.elasticsearch.bootstrap.Elasticsearch -d -p es.pid
501 39267 39259 0 8:18AM ttys000 0:00.02 /Users/kimjmin/elastic/getStart/elasticsearch-7.3.0/modules/x-pack-ml/platform/darwin-x86_64/bin/controller
501 39269 38460 0 8:18AM ttys000 0:00.00 grep --color=auto --exclude-dir=.bzr --exclude-dir=CVS --exclude-dir=.git --exclude-dir=.hg --exclude-dir=.svn elasticsearch
$ ls
LICENSE.txt README.textile config es.pid lib modules start.sh
NOTICE.txt bin data jdk logs plugins stop.sh
$ ./stop.sh
$ ps -ef | grep elasticsearch
501 39291 38460 0 8:19AM ttys000 0:00.00 grep --color=auto --exclude-dir=.bzr --exclude-dir=CVS --exclude-dir=.git --exclude-dir=.hg --exclude-dir=.svn elasticsearch
$ ls
LICENSE.txt README.textile config jdk logs plugins stop.sh
NOTICE.txt bin data lib modules start.sh

start.sh 명령으로 Elasticsearch 가 백그라운드로 실행되었고, ls 명령으로 es.pid 파일이 생성된 것을 확인할 수 있습니다. 다시 stop.sh 명령으로 Elasticsearch 를 종료 한 뒤에는 es.pid 파일이 삭제된 것을 확인할 수 있습니다.