elasticsearch 설치 및 클러스터링(clustering) 구성 하기
5월 12, 2017
In 개발 |
elasticsearch 설치 및 클러스터링(clustering) 구성 하기
프로젝트에 검색 시스템이 필요하여 자료를 조사해보니 다음과 같은 조합으로 많이 사용하는 것 같다.
- Elasticsearch
- Elasticsearch-head
- 은전한닢 (한글형태소 분석기)
검색엔진으로 Elasticsearch를 사용하고, 상태확인을 위한 플러그인으로 head, 은전한닢을 통해 한글형태소 분석을 하여 한글검색을 지원하게 되는 구조인데...
먼저, 엘라스틱서치를 설치하고, 클러스터를 묶는 방법을 정리한다.
전체 설치내용 리스트
- elasticsearch 설치 및 클러스터링(clustering) 구성 하기
- Elasticsearch head 설치 하기
- Elasticsearch에 은전한닢(mecab) 설치 하기
설치
공식사이트 설치 가이드 :
https://www.elastic.co/guide/en/elasticsearch/reference/5.1/_installation.html
Elasticsaerch는 JAVA 8 이상에서 동작하므로 미리 JAVA가 설치되어 있어야 한다.
기본적으로 클러스터 묶기 위해서는 서버 3대가 필요하다.
서버가 준비되었다면 각 서버마다 접속하여 다음과 같이 진행한다.
다운로드
$ curl -L -O https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.1.2.tar.gz
$ tar -xvf elasticsearch-5.1.2.tar.gz
설정파일 수정
$ vi elasticsearch-5.1.2/config/elasticsearch.yml
cluster.name: my-service
node.name: node-1
network.host: 0.0.0.0
http.cors.enabled: true
http.cors.allow-origin: "*"
transport.tcp.port: 9300
discovery.zen.ping.unicast.hosts: ["xxx.xxx.xxx.2:9300", "xxx.xxx.xxx.3:9300"]
설명
- cluster.name : 클러스터 이름을 넣어주면 된다. 모든 노드의 클러스터 이름은 같아야 한다.
- node.name : node의 이름이다. 각 노드는 이름이 달라야 한다.
- network.host는 서버 환경에 따라 binding 할 ip넣어 준다.
- http.cors.enabled: true, http.cors.allow-origin: "*" : head를 사용할 때 크로스도메인 이슈를 회피하기 위해 cors를 설정한다.
- transport.tcp.port : 클러스터를 연결할 때 사용할 포트를 지정한다. 기본값은 9300이다.
- discovery.zen.ping.unicast.hosts : 같은 네트워크 상에 있다면 클러스터가 자동으로 연결되는 것으로 알고 있지만, 운영환경을 가정하고 직접 Ip를 넣어서 묶어 준다.
실행
Elasticsearch의 보안정책으로 root로는 실행할 수 없다.
따라서, root 가 아닌 다른 계정을 사용하여 실행해야 한다.
$ su - estester
$ cd elasticsearch-5.1.2/bin/
$ ./elasticsearch -d
-d 옵션을 넣으면 데몬으로 실행된다.
클러스터의 정상동작 여부 확인
$ curl http://localhost:9200/cluster/health
클러스터 구성에 문제가 있는 경우 다음 사항을 확인해 본다.
- IP, 클러스터 통신 포트 확인. 기본 통신 포트는 9300번
- 방화벽에 의해 클러스터 통신 포트가 막혔는지 확인
- elasticsearch가 설치된 docker 이미지를 사용하는 경우 data 충돌에 의해 클러스터 구성이 안되는 경우가 있음. 이때는 새로 추가하는 노드의 데이터를 삭제 후 elasticsearch 재시작
정상동작을 확인했다면 한글 검색을 지원하기 위해 은전한닢을 설치해야 한다.