티스토리 뷰
개요
- Elasticsearch는 풀텍스트 검색엔진이다. Elasticsearch 저장소를 적절히 이용하면 애플리케이션에서 굉장히 빠른 속도의 텍스트 검색을 실현할 수 있다. 광범위한 쓰임새 덕에 오픈 소스 로그 관제 솔루션인 Graylog의 경우 전용 로그 저장소로 사용하기도 한다.
Elasticsearch 6 설치
- 아래는 CentOS 7에 Elasticsearch 6를 설치하는 방법이다.
### 운영체제 업데이트
$ sudo yum -y update
### Zulu OpenJDK 8 설치
$ sudo rpm --import http://repos.azulsystems.com/RPM-GPG-KEY-azulsystems
$ sudo curl -o /etc/yum.repos.d/zulu.repo http://repos.azulsystems.com/rhel/zulu.repo
$ sudo yum -y install zulu-8
$ sudo bash -c 'echo "export JAVA_HOME=/usr/lib/jvm/zulu-8" >> /etc/environment'
$ sudo bash -c 'echo "export JRE_HOME=/usr/lib/jvm/zulu-8/jre" >> /etc/environment'
### Elasticsearch 6 설치
$ sudo rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
$ sudo touch /etc/yum.repos.d/elasticsearc-6.repo
$ sudo bash -c 'echo "[elasticsearch-6.x]" >> /etc/yum.repos.d/elasticsearc-6.repo'
$ sudo bash -c 'echo "name=Elasticsearch repository for 6.x packages" >> /etc/yum.repos.d/elasticsearc-6.repo'
$ sudo bash -c 'echo "baseurl=https://artifacts.elastic.co/packages/6.x/yum" >> /etc/yum.repos.d/elasticsearc-6.repo'
$ sudo bash -c 'echo "gpgcheck=1" >> /etc/yum.repos.d/elasticsearc-6.repo'
$ sudo bash -c 'echo "gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch" >> /etc/yum.repos.d/elasticsearc-6.repo'
$ sudo bash -c 'echo "enabled=1" >> /etc/yum.repos.d/elasticsearc-6.repo'
$ sudo bash -c 'echo "autorefresh=1" >> /etc/yum.repos.d/elasticsearc-6.repo'
$ sudo bash -c 'echo "type=rpm-md" >> /etc/yum.repos.d/elasticsearc-6.repo'
$ sudo yum -y install elasticsearch
### 환경 설정
$ sudo vi /etc/elasticsearch/elasticsearch.yml
### 내부망에 연결된 모든 노드로부터의 원격 접속을 허용
### 개발 및 테스트 환경에서만 사용, 운영 환경에서는 보안 문제로 비추천
network.host: 0.0.0.0
### Graylog 로그 저장소로 사용할 경우 설정
cluster.name: graylog
### Elasticsearch 6 방화벽 개방
$ sudo firewall-cmd --permanent --add-port=9200/tcp
$ sudo firewall-cmd --permanent --add-port=9300/tcp
$ sudo firewall-cmd --reload
### Elasticsearch 6 실행
$ sudo systemctl daemon-reload
$ sudo systemctl enable elasticsearch
$ sudo systemctl start elasticsearch
nori: 한글 형태소 분석기 플러그인 설치
- 국내 서비스를 운영하기 위한 목적으로 Elasticsearch을 사용할 경우, 한글 검색을 결코 배제할 수 없다. 이 경우, 한글 형태소 분석기의 선택이 매우 중요하다.
nori
는 Elasticsearch가 직접 개발하여 공개한 한글 형태소 분석기 플러그인이다. 6.4.0 버전부터 설치가 가능하다.
### nori 한글 형태소 분석기 플러그인 설치
$ sudo /usr/share/elasticsearch/bin/elasticsearch-plugin install analysis-nori
### 설치된 플러그인 확인
$ sudo /usr/share/elasticsearch/bin/elasticsearch-plugin list
analysis-nori
### Elasticsearch 서비스 재시작
$ sudo systemctl restart elasticsearch
Elasticsearch 6 실행 확인
### 서비스 포트 상태 확인
$ nmap -p 9200 localhost
PORT STATE SERVICE
9200/tcp open wap-wsp
$ curl -X GET http://localhost:9200
{
"name" : "hknorBD",
"cluster_name" : "graylog",
"cluster_uuid" : "pyGNtEQnTtO33KsOVgYPaQ",
"version" : {
"number" : "6.8.2",
"build_flavor" : "default",
"build_type" : "rpm",
"build_hash" : "b506955",
"build_date" : "2019-07-24T15:24:41.545295Z",
"build_snapshot" : false,
"lucene_version" : "7.7.0",
"minimum_wire_compatibility_version" : "5.6.0",
"minimum_index_compatibility_version" : "5.0.0"
},
"tagline" : "You Know, for Search"
}
인스턴스 최적화
- Elasticsearch는 CPU보다 RAM 할당량이 중요한 저장소이다. 어떤 설정도 하지 않을 경우 최대 1GB 크기의 힙 영역을 사용한다. 공식 문서에서는 전체 시스템 메모리의 50%를 이 크기에 할당하라고 권장하고 있다. 운영 환경에서는 대개 2 Core, 64GB RAM 이상의 노드에 32GB를 힙 영역에 할당하는 것을 권장하는 편이다. [관련 링크]
### Elasticsearch의 JVM 옵션을 설정
$ sudo nano /etc/elasticsearch/jvm.options
-Xms2g
-Xmx2g
### Elasticsearch 6 재시작
$ sudo systemctl restart elasticsearch
데이터 디렉토리 변경
- 각 노드가 가진 인덱스 및 샤드 데이터는 기본 값으로 /var/lib/elasticsearch 디렉토리에 저장되며 변경을 원한 경우
path.data
를 변경하여 수정할 수 있다. [관련 링크]
### 현재 데이터 디렉토리 확인
$ curl -X GET "http://localhost:9200/_nodes/settings?pretty=true"
### 새 데이터 디렉토리 소유자 변경
$ sudo chown -R elasticsearch:elasticsearch /foo/bar
### 새 데이터 디렉토리 변경
$ sudo nano /etc/elasticsearch/elasticsearch.yml
path.data: /foo/bar
### Elasticsearch 6 재시작
$ sudo systemctl restart elasticsearch
트러블슈팅
- 서비스 기동시 /var/log/elasticsearch 디렉토리에 올라오는 로그를 확인하면 아래와 같은 오류와 함께 기동이 되지 않는 현상이 발생할 수 있다.
[2] bootstrap checks failed
[1]: max number of threads [1024] for user [elasticsearch] is too low, increase to at least [4096]
[2]: system call filters failed to install; check the logs and fix your configuration or disable system call filters at your own risk
- 아래와 같이 수정하면 정상 기동된다.
$ sudo vi /etc/security/limits.conf
elasticsearch hard nofile 65536
elasticsearch soft nofile 65536
elasticsearch hard nproc 65536
elasticsearch soft nproc 65536
- 두번째 이슈로는 서비스 기동시 아래와 같은 경고가 발생할 수 있다.
[2019-10-01T17:23:45,615][WARN ][o.e.b.JNANatives ] [unknown] unable to install syscall filter:
java.lang.UnsupportedOperationException: seccomp unavailable: requires kernel 3.5+ with CONFIG_SECCOMP and CONFIG_SECCOMP_FILTER compiled in
at org.elasticsearch.bootstrap.SystemCallFilter.linuxImpl(SystemCallFilter.java:329) ~[elasticsearch-6.8.3.jar:6.8.3]
at org.elasticsearch.bootstrap.SystemCallFilter.init(SystemCallFilter.java:617) ~[elasticsearch-6.8.3.jar:6.8.3]
at org.elasticsearch.bootstrap.JNANatives.tryInstallSystemCallFilter(JNANatives.java:260) [elasticsearch-6.8.3.jar:6.8.3]
at org.elasticsearch.bootstrap.Natives.tryInstallSystemCallFilter(Natives.java:113) [elasticsearch-6.8.3.jar:6.8.3]
at org.elasticsearch.bootstrap.Bootstrap.initializeNatives(Bootstrap.java:108) [elasticsearch-6.8.3.jar:6.8.3]
at org.elasticsearch.bootstrap.Bootstrap.setup(Bootstrap.java:170) [elasticsearch-6.8.3.jar:6.8.3]
at org.elasticsearch.bootstrap.Bootstrap.init(Bootstrap.java:333) [elasticsearch-6.8.3.jar:6.8.3]
at org.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:159) [elasticsearch-6.8.3.jar:6.8.3]
at org.elasticsearch.bootstrap.Elasticsearch.execute(Elasticsearch.java:150) [elasticsearch-6.8.3.jar:6.8.3]
at org.elasticsearch.cli.EnvironmentAwareCommand.execute(EnvironmentAwareCommand.java:86) [elasticsearch-6.8.3.jar:6.8.3]
at org.elasticsearch.cli.Command.mainWithoutErrorHandling(Command.java:124) [elasticsearch-cli-6.8.3.jar:6.8.3]
at org.elasticsearch.cli.Command.main(Command.java:90) [elasticsearch-cli-6.8.3.jar:6.8.3]
at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:116) [elasticsearch-6.8.3.jar:6.8.3]
at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:93) [elasticsearch-6.8.3.jar:6.8.3]
- 아래와 같이 수정하면 경고가 사라진다.
$ sudo vi /etc/elasticsearch/elasticsearch.yml
bootstrap.system_call_filter: false
트러블슈팅: 디스크 용량 부족
- 데이터 저장시 아래와 같은 오류가 발생하는 경우가 있다.
{"type":"cluster_block_exception","reason":"blocked by: [FORBIDDEN/12/index read-only / allow delete (api)];"}
- 원인은 디스크의 용량 부족으로 인해 Elasticsearch에 의해 해당 인덱스가 읽기 전용으로 전환된 것이다. [관련 링크] 먼저 디스크 용량 확인 후 전체 디스크 용량의 5% 이상을 확보하도록 조치한다. 조치 후에는 읽기 전용으로 전환된 인덱스 정책을 아래와 같이 다시 해제한다.
### 읽기 전용으로 설정된 인덱스 정책을 쓰기 가능으로 재전환
$ curl -X PUT -H "Content-Type: application/json" http://localhost:9200/_all/_settings -d '{"index.blocks.read_only_allow_delete": null}'
{"acknowledged":true}
댓글
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 자전거
- JavaScript
- 로드바이크
- Eclipse
- CentOS
- jsp
- Docker
- maven
- Spring Boot
- Kendo UI Web Grid
- Tomcat
- 구동계
- spring
- MySQL
- Spring MVC 3
- node.js
- chrome
- 평속
- Kendo UI
- DynamoDB
- JHipster
- jstl
- graylog
- 알뜰폰
- bootstrap
- java
- kotlin
- jpa
- 로드 바이크
- 태그를 입력해 주세요.
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
글 보관함