무한 정보 세상 헤쳐나가기

elasticsearch 설치 및 클러스터링(clustering) 구성 하기


## elasticsearch 설치 및 클러스터링(clustering) 구성 하기

프로젝트에 검색 시스템이 필요하여 자료를 조사해보니 다음과 같은 조합으로 많이 사용하는 것 같다.
- Elasticsearch
- Elasticsearch-head
- 은전한닢 (한글형태소 분석기)

검색엔진으로 Elasticsearch를 사용하고, 상태확인을 위한 플러그인으로 head, 은전한닢을 통해 한글형태소 분석을 하여 한글검색을 지원하게 되는 구조인데...

먼저, 엘라스틱서치를 설치하고, 클러스터를 묶는 방법을 정리한다.

**전체 설치내용 리스트**
- [elasticsearch 설치 및 클러스터링(clustering) 구성 하기](https://blog.indexall.net/2017/05/installing-elasticsearch-and-configuring-clustering.html)
- [Elasticsearch head 설치 하기](https://blog.indexall.net/2017/05/install-elasticsearch-head.html)
- [Elasticsearch에 은전한닢(mecab) 설치 하기](https://blog.indexall.net/2017/05/installing-mecab-in-elasticsearch.html)

### 설치
공식사이트 설치 가이드 : 
[https://www.elastic.co/guide/en/elasticsearch/reference/5.1/_installation.html](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
```

클러스터 구성에 문제가 있는 경우 다음 사항을 확인해 본다.
1. IP, 클러스터 통신 포트 확인. 기본 통신 포트는 9300번
2. 방화벽에 의해 클러스터 통신 포트가 막혔는지 확인
3. elasticsearch가 설치된 docker 이미지를 사용하는 경우 data 충돌에 의해 클러스터 구성이 안되는 경우가 있음. 이때는 새로 추가하는 노드의 데이터를 삭제 후 elasticsearch 재시작

정상동작을 확인했다면 한글 검색을 지원하기 위해 은전한닢을 설치해야 한다.

- [Elasticsearch head 설치 하기](https://blog.indexall.net/2017/05/install-elasticsearch-head.html)
- [Elasticsearch에 은전한닢(mecab) 설치 하기](https://blog.indexall.net/2017/05/installing-mecab-in-elasticsearch.html)