'Elastic Search/02. Setup'에 해당되는 글 14건

  1. 2015/05/11 용비 04. Running as a service on Windows
  2. 2015/05/11 용비 03. Running as a service on linux
  3. 2015/04/23 용비 02. Configuration
  4. 2015/04/23 용비 01. Installation

윈도우 환경에서는 별다른 사용자 작업 없이 elasticsearch background 실행하거나 자동으로 시작하도록 설정할 있다. Bin/ 폴더 아래에 있는 service.bat 스크립트를 통해 설치, 삭제, 관리, 서비스에 대한 설정, 서비스 시작과 종료를 모두 실행할 있다.


c:\elasticsearch-1.5.2\bin>service

Usage: service.bat install|remove|start|stop|manager [SERVICE_ID]


스크립트는 service id 나타내는 개의 파라미터만 필요하다.

사용할 있는 command 다음과 같다.


Install : 서비스로서 elasticsearch 설치한다.

Remove : 설치되어 있는 elasticsearch service 삭제한다. (실행되어 있다면 종료한다.)

Start : elasticsearch service 실행한다. (설치되어 있을 경우)

Stop : elasticsearch service 종료한다. (실행되어 있을 경우)

Manager : 설치되어 있는 service 관리하는 GUI 실행한다.


설치 도중에 사용할 있는 환경 변수는 복사해서 service lifecycle 사용할 있다. 설치 이후에 변경된 부분은 service 재설치하지 않으면 회복되지 않는다.


이용할 있는 JDK/JRE (JAVA_HOME 설정에 따른) 아키텍처에 기반하여 64-bit, 32-bit 적합한 서비스가 설치될 것이다. 정보는 설치 시점에 보여진다.


c:\elasticsearch-{version}bin>service install
Installing service      :  "elasticsearch-service-x64"
Using JAVA_HOME (64-bit):  "c:\jvm\jdk1.7"
The service 'elasticsearch-service-x64' has been installed.

  

[NOTE]

Elasticsearch service JRE 사용할 수는 있지만, client VM 사용하는 JRE 사용한다면 시스템 불안정성과 경고가 발생할 수도 있다. (반대로 서버에서 사용하는 JVM 오랫동안 실행되는 application 성능측면에서 좋다.)

  • 서버에는 JRE 설치해서 사용하지 말고, JDK 설치하여 사용하라는 의미.

Customizing service settings

서비스 설정을 customize하는 데는 2가지 방법이 있다.

Manager GUI

Manager command 통해서 GUI 접속할 있다. GUI 설치된 서비스에 대한 상태, startup type, JVM, start, stop등의 설정을 보여준다. Command-line에서 service.bat으로 간단하게 실행하여 앞서 언급한 option 윈도우에서 있다.


Customizing service.bat

Service.bat 파일은 서비스를 설치하기 위해서 Apache Common Daemon (http://commons.apache.org/proper/commons-daemon/) 프로젝트에 의존한다. 서비스 실행환경 하에서 사용자가 customizing하는 경우에 flexibility 보장하기 위해서 installation 파라미터를 수정하여 그에 따른 모든 파라미터들을 변경할 있다. 새로운 설정을 적용하려면 서비스를 재설치해야 한다.


[NOTE]

Customizable MSI installer 이용할 있도록 지원하는 커뮤니티도 있다.

https://github.com/salyh/elasticsearch-msi-installer (by Hendrik Saly)

받은 트랙백이 없고, 댓글이 없습니다.

댓글+트랙백 RSS :: http://www.yongbi.net/rss/response/710

Elasticservice OS에서 서비스로 실행하기 위해서, reboot / upgrade하는 동안 제공되는 패키지를 통해서 elasticsearch 쉽게 시작하고 종료할 있다.


Linux

현재 우리 빌드 시스템은 자동으로 데비안 패키지와 RPM 생성한다. 다운로드 페이지를 통해서 이용할 있다. 패키지는 특별히 의존관계를 갖지는 않는다. 하지만, JDK 설치되었는지 확인이 필요하다.


각각의 패키지는 다음 파라미터들로 설정 파일을 설정할 있다.


ES_USER : 실행 사용자. 기본 : elasticsearch

ES_GROUP : 실행 그룹. 기본 : elasticsearch

ES_HEAP_SIZE : 시작할 때의 Heap 메모리 크기

ES_HEAP_NEWSIZE : 새로 생성하는 Heap 메모리 크기

ES_DIRECT_SIZE : Maximum Direct Memory

MAX_OPEN_FILES : Open file 최대값. 기본 : 65535

MAX_LOCKED_MEMORY : 최대 lock 메모리 크기. bootstrap.mlockall 옵션을 elasticsearch.yml 사용하려면 "unlimited" 설정하라. 또한 ES_HEAP_SIZE 설정해야 한다.

MAX_MAP_COUNT : 하나의 Process 가질 있는 최대 memory map area 수. Mmapfs index store type으로 사용한다면 값을 높은 값으로 설정하라. 자세한 정보를 위해서는 max_map_count 대한 linux kernel documentation (https://github.com/torvalds/linux/blob/master/Documentation/sysctl/vm.txt) 확인하라. Elasticsearch 시작하기 전에 sysctl 통해서 설정할 있다. Default값은 65535이다.
LOG_DIR :
로그 디렉토리. Default /var/log/elasticsearch이다.

DATA_DIR : 데이터 디렉토리. Default /var/lib/elasticsearch이다.

WORK_DIR : Work 디렉토리. Default /tmp/elasticsearch이다.

CONF_DIR : 설정 파일 위치 디렉토리. (elasticsearch.yml logging.yml 파일이 있는 위치). Default /etc/elasticsearch이다.

CONF_FILE : 설정 파일 경로. Default /etc/elasticsearch/elasticsearch.yml이다.

ES_JAVA_OPTS : 추가적인 java options. Node.name property 추가하려고 한다면 아주 유용하게 사용할 있다. 하지만, puppet이나 chef 같은 provisioning system 통해서 배포되기 때문에 외에는 elasticsearch.yml 파일의 내용을 변경하지 말라. 예를 들어 다음과 같이 사용할 있다. ES_JAVA_OPTS="-Des.node.name=search-01"

RESTART_ON_UPGRADE : restart package upgrade 대한 설정. Default는 false이다. Package 설치한 이후, elasticsearch instance 수동으로 restart해야 한다. Cluster에서 upgrade 기능은 네트워크 트래픽을 증가시키고, cluster 전체적으로 response time 좋게 하기 때문이다.


Debian/Ubuntu

데비안 패키지에는 표준 데비안 업데이트 툴인 update-rc.d 실행하면 필요한 모든 것이 포함되어 있다. 실행 스크립트는 /etc/init.d/elasticsearch이다. 설정 파일은 /etc/default/elasticsearch 있다.

데비안 패키지는 기본적으로 service 시작하지는 않는다. 적합하게 설정되어 있지 않으면 갑작스럽게 cluster 참여하지 않도록 하기 위해서이다. dpkg -i 설치한 이후, 다음 command 사용하여 system 부팅할 , elasticsearch 시작할 있다.


sudo update-rc.d elasticsearch defaults 95 10
sudo
/etc/init.d/elasticsearch start


Installing the oracle JDK

일반적으로 추천하는 것은 Oracle JDK 환경에서 elasticsearch 구동하는 것이다. 그러나 Ubuntu Debian에는 라이선스 이슈로 OpenJDK 탑재되어 있다. 하지만 쉽게 oracle installer 이용해 설치할 있다. 데비안이나 리눅스 환경에서 add-apt-repositry command 사용하여 Debian Wheezy python-software-properties 설치되어 있는지 확인하라.


sudo add-apt-repository ppa:webupd8team/java
sudo apt
-get update
sudo apt
-get install oracle-java7-installer
java
-version


마지막 command 사용하여 Oracle JDK 성공적으로 설치되었는지 확인할 있다. Java 8 설치하려면 apt-get install oracle-java8-installer 통해서 설치할 있다.


RPM based distributions

Using chkconfig

Chkconfig 사용하여 RPM기반 배포파일을 얻을 있다. Init script /etc/init.d/elasticsearch 있다. 설정 파일은 /etc/sysconfig/elasticsearch 있다. 데비안처럼 RPM 패키지는 기본적으로 install이후 실행되지 않는다. 다음 command 통해서 수동으로 실행해야 한다.


sudo /sbin/chkconfig --add elasticsearch
sudo service elasticsearch start


Using systemd

SUSE 배포판에서는 서비스 등록을 위해서 chkconfig 사용할 없다. 서비스 실행과 종료를 위해서 systemd /bin/systemctl 사용한다.  (가장 최신 버전에서는 chkconfig command 사용할 있다.) 설정 파일은 /etc/sysconfig/elasticsearch 있다. RPM 설치 , systemd 설정을 변경하고 elasticsearch 실행해야 한다.


sudo /bin/systemctl daemon-reload
sudo
/bin/systemctl enable elasticsearch.service
sudo
/bin/systemctl start elasticsearch.service


/etc/sysconfig/elasticsearch 있는 MAX_MAP_COUNT 변경하는 것은 아무 효과가 없다. 시작시점에 변경된 값을 반영하려면 /usr/lib/sysctl.d/elasticsearch.conf 변경해야 한다는 것에 유의하라.

받은 트랙백이 없고, 댓글이 없습니다.

댓글+트랙백 RSS :: http://www.yongbi.net/rss/response/709

[Environment Variables]

Script , Elasticsearch JVM 시작될 넘겨지는 JAVA_OPTS 포함하고 있다. 그중 가장 중요한 설정은 프로세스의 maximum memory 다루는 -Xmx minimum memory 다루는 -Xms이다. (일반적으로 많은 메모리가 할당될 수록 좋다.)


대부분의 경우, JAVA_OPTS 기본값으로 남겨두는 것이 좋다. 그리고 JVM 설정이나 파라미터를 설정/변경하고자 하는 경우에는 ES_JAVA_OPTS 사용하라.


ES_HEAP_SIZE 환경 변수는 elasticsearch java process heap memory 설정에 사용한다. 별로 추천하고 싶지 않지만, ES_MIN_MEM (default : 256 MB), ES_MAX_MEM (default : 1 GB) 값을 명시적으로 설정할 있다. 하지만, ES_HEAP_SIZE 이용하면 min, max 모두 동일한 값을 가지게 된다.


Min, Max 값을 동일하게 설정하고, mlockall (http://www.elastic.co/guide/en/elasticsearch/reference/current/setup-configuration.html#setup-configuration-memory) 가능하도록 설정하는 것을 추천한다.


[System Configuration]

  • File Descriptors (FD)

Elasticsearch 실행하는 machine open files descriptors 숫자를 증가시켜라. 32k 64k 설정하는 것을 추천한다.

Process 얼마나 많은 file 오픈했는지 테스트하려면 -Des.max-open-files 값을 true 설정하고 시작하라. Process 시작 , 사용할 있는 open files 숫자를 표시할 것이다.

아니면, 각각의 node에서 다음과 같은 nodes Info API 사용하여 max_file_descriptors 값을 얻을 있다.


curl localhost:9200/_nodes/process?pretty


  • Virtual Memory

Elasticsearch index 저장하는데 hybrid mmapfs / niofs directory (http://www.elastic.co/guide/en/elasticsearch/reference/current/index-modules-store.html#default_fs) 기본적으로 사용한다. OS mmap count 대한 제한값은 너무 작기 때문에 out of memory exception 발생한다. Linux에서는 root 계정으로 다음 command 실행하여 limit값을 증가시킬 있다.


sysctl -w vm.max_map_count=262144


값을 영구적으로 반영하기 위해서는 /etc/sysctl.conf vm.max_map_count 항목을 업데이트하라.


[NOTE]

패키지(.deb, rpm) 이용하여 Elasticsearch 설치했다면 자동으로 값이 변경되어 있을 것이다. 확인해 보려면 sysctl vm.max_map_count 실행해 보라.


  • Memory Settings

Linux Kernel file system cache 있으면 많은 메모리를 사용하고 사용하지 않은 application memory, Elasticsearch process 인해 swap memory 열심히 swap하려고 한다. Swapping 성능상, node 안정성 측면에서 아주 좋지 않으므로 피해야 한다.


3가지 옵션이 있다.

  • Disable swap

가장 간단한 옵션은 swap 사용할 없도록 하는 것이다. 일반적으로 Elasticsearch box (서버)안에서 실행되는 유일한 서비스다. 그리고 메모리 사용량은 ES_HEAP_SIZE 환경 변수로 제어할 있다. Swap 사용할 필요가 없다. Linux System에서 sudo swapoff -a 실행하여 일시적으로 swap 사용하지 않도록 있다. 영구적으로 적용하려면 /etc/fstab file 편집하여 swap 포함하고 있는 line들을 주석처리 하면 된다.


  • Configure swappiness

두번째 옵션은 sysctl vm.swappiness 값을 0으로 설정하는 것이다. 이것은 kernel swap하려고 하는 추세를 감소시키고, 일반적인 환경에서는 swap 하려고 하지 않는다. 하지만, 긴급상황에서는 여전히 전체 시스템을 swap하려고 것이다.


[NOTE]

Kernel version 3.5-rc1 윗버전부터 swappiness 0으로 하면 swapping 허용하는 대신에 OOM killer process 죽이려고 것이다. 긴급 상황에서 swapping 허용하려면 swappiness 1 설정할 필요가 있다.


  • mlockall

세번째 옵션은 Linux/Unix 시스템에서만 사용할 있는데, RAM process address space mlockall 사용해 Lock하는 것이다. 이것을 사용하면 Elasticsearch 어떤 메모리도 swap하는 것을 막을 있다. config/elasticsearch.yml 파일에 다음 라인을 추가하면 된다.


bootstrap.mlockall: true


Elasticsearch 시작할 이후, 다음 request 통해서 mlockall 값을 확인함으로써 성공적으로 적용되었는지를 확인할 있다.


curl http://localhost:9200/_nodes/process?pretty


만약 mlockall 값이 false라면 mlockall request 실패했음을 의미한다. 대부분의 경우에 memory lock 권한이 없는 user Elasticsearch 실행했을 경우에 발생한다. Elasticsearch 실행하기 전에 root 계정으로 ulimit -1 unlimited 실행하여 권한을 있다.


다른 가능성 있는 이유로는 temporary directory (일반적으로 /tmp) noexec 옵션으로 mount되었을 경우에 발생한다. 다음과 같이 Elasticsearch 실행하여 새로운 temp directory 지정함으로 해결할 있다.


./bin/elasticsearch -Djna.tmpdir=/path/to/new/dir


[WARNING]

mlockall 이용할 있는 이상의 메모리를 할당하려고 한다면 JVM이나 shell session에서 빠져나갈 것이다.


  • Elasticsearch Settings

Elasticsearch configuration file ES_HOME/config 폴더에 있다. 폴더에는 2개의 파일이 있는데, elasticsearch.yml Elasticsearch 다른 모듈에 대한 설정이, logging.yml에는 Elasticsearch logging 대한 설정이 있다.


Configuration format YAML (http://www.yaml.org/) 이다. 모든 네트워크 기반 모듈들이 바인딩하여 사용하는 주소를 변경하는 예제는 다음과 같다.


network :
   host
: 10.0.0.4


  • Paths

Production 경우, Data Log file Path 변경하고 싶을 것이다.


path:
  logs
: /var/log/elasticsearch
  data
: /var/data/elasticsearch


  • Cluster name

또한, 다른 node 자동으로 cluster 참여할 있도록 production cluster name 주는 것을 잊지 말라.


cluster:
  name
: <NAME OF YOUR CLUSTER>


  • Node name

각각의 node hostname 표시하는데 사용하는 Default node name 변경하고자 경우가 있다. 기본적으로 Elasticsearch node 시작될 , 3000개의 Marvel Character name 리스트 중에서 Random하게 사용한다.


node:
  name
: <NAME OF YOUR NODE>


Configuration styles

내부적으로 모든 설정들은 "namespaced" 설정으로 접근할 있다. 예를 들어, 위의 설정은 node.name으로 접근할 있다. 이것은 다른 형태의 configuration format-JSON 같은- 쉽게 지원할 있음을 의미한다. Configuration format으로 JSON 선호하면, 간단하게 elasticsearch.yml elasticsearch.json으로 변경하고 다음 내용을 추가하면 된다.


{
  
"network" : {
      
"host" : "10.0.0.4"
  
}
}


또한 다음과 같이 ES_JAVA_OPTS elasticsearch command parameter 이용하여 외부에서 설정을 쉽게 제공할 있다.


$ elasticsearch -Des.network.host=10.0.0.4


또다른 옵션은 es. Prefix 대신에 es.default. Prefix 사용하는 것이다. 이것은 configuration file내에 명시적인 설정이 없을 경우에만 default 설정을 사용함을 의미한다.


또다른 옵션은 ${..} notation configuration file안에 사용하는 것이다. 다음과 같이 환경 설정 변수를 사용할 있다.


{
  
"network" : {
      
"host" : "${ES_NET_HOST}"
  
}
}


Configuration file 위치는 system property 사용하여 외부에서 설정할 있다.


$ elasticsearch -Des.config=/path/to/config/file


  • Index Settings

Cluster 생성된 index들은 각자 설정을 가질 있다. 예를 들어, 다음은 기본적인 파일 시스템 기반 대신에 메모리 기반 index 생성한다. (포맷은 YAML / JSON 모두 가능하다.)


$ curl -XPUT http://localhost:9200/kimchy/ -d \
'
index :
   store:
       type: memory
'


Index level 설정은 elasticsearch.yml 파일내 다음과 같이 node level 설정될 있다.

index :
   store
:
       type
: memory


이것은 위에 언급된 configuration으로 시작된 특정 node에서 생성된 모든 index 분명하게 설정되지 않으면 메모리에 index 저장한다는 것을 의미한다. 다시 말하면, node configuration 설정된 것이 무엇이건 간에 index level 재정의가 가능하다는 것이다. 물론, 위의 경우에는 다음과 같은 "collapsed" 설정이 가능하다.


$ elasticsearch -Des.index.store.type=memory


Index level configuration 모든 것은 index module (http://www.elastic.co/guide/en/elasticsearch/reference/current/index-modules.html) 있다.


  • Logging

Elasticsearch 내부의 logging abstraction 이용하여 log4j 설정을 적용한다. YAML 사용하여 log4j 설정을 간단하게 적용할 있다. (로그 설정 파일은 config/logging.yml 이다.) JSON properties 포맷 또한 지원된다. 자세한 내용은 log4j document (http://logging.apache.org/log4j/1.2/manual.html) 참조하라. 추가로 log4j-extras에서 제공하는 다른 Appender logging class 사용할 있다.

받은 트랙백이 없고, 댓글이 없습니다.

댓글+트랙백 RSS :: http://www.yongbi.net/rss/response/707

01. Installation

Elastic Search/02. Setup 2015/04/23 15:04 용비

섹션에는 elasticsearch 어떻게 설치하고 실행하는지에 대한 정보가 담겨 있다. 아직 다운로드 하지 않았으면, 다운로드 (http://www.elasticsearch.org/download) 하고 설치 문서 (http://www.elastic.co/guide/en/elasticsearch/reference/current/setup.html#setup-installation) 확인하라.


[NOTE]

Elasticsearch apt yum 이용해서 우리의 Repository로부터 설치를 수도 있다. Repository (http://www.elastic.co/guide/en/elasticsearch/reference/current/setup-repositories.html) 섹션을 참고하라.


[Installation]

최종 버전을 다운로드하고 압축 해제 , Elasticsearch 다음 command 실행할 있다.


$ bin/elasticsearch


*nix 시스템 (Unix, Linux) 상에서는 foreground process로 실행된다. Background process 실행하려면 다음과 같이 -d switch 추가하면 된다.


$ bin/elasticsearch -d



*NIX

Elasticsearch shell script 사용하여 여러 features들을 추가할 있다. 첫번째는, 앞서 설명했듯이, foreground / background process 쉽게 실행할 있다.


또다른 특징으로 -X, -D, getopt long style configuration parameter script 직접 전달할 있다. JAVA_OPTS ES_JAVA_OPTS 사용하여 모든 설정을 재정의할 있다. 예를 들면 다음과 같다.


$ bin/elasticsearch -Xmx2g -Xms2g -Des.index.store.type=memory --node.name=my-node


[Java (JVM) version]

Elasticsearch Java 사용하여 빌드 되었다. 실행하기 위해서는 최소한 Java 7 필요하다. 단지 Oracle Java OpenJDK 지원된다. 모든 Elasticsearch node client에는 동일한 버전의 JVM 설치되어 있어야 한다.


Java 8 update 20 이상이나 Java 7 update 55 이상 버전을 설치하기를 권장한다. 이전 버전의 Java 7에서는 index corruption data loss 대한 bug 있다. Elasticsearch java 1.5.0으로 알려진 잘못된 버전으로 실행하면 실행되지 않을 것이다.


사용하는 Java 버전은 JAVA_HOME 환경 변수로 설정할 있다.

받은 트랙백이 없고, 댓글이 없습니다.

댓글+트랙백 RSS :: http://www.yongbi.net/rss/response/706