[1] Elasticsearch install (1)
1 2 3 4 5 | sudo apt-get update sudo apt-get install elasticsearch -y sudo sed -i 's/#START_DAEMON/START_DAEMON/' /etc/default/elasticsearch sudo systemctl restart elasticsearch systemctl status elasticsearch | cs |
위와 같이 명령어를 실행 하였을때, elasticsearch를 보다 간편하고 빠르게 설치할 수 있다.
[1] Elasticsearch install (2)
sudo apt-get install elasticsearch
위 명령어를 통해 엘라스틱서치를 설치한다.
[2] Elasticsearch가 잘 설치되었는지 확인
elasticsearch가 잘 설치가 되었다면, /usr/share/elasticsearch 디렉토리가 생성된 것을 확인 할 수 있다.
bin 디렉토리에는 elasticsearch의 실행 관련 파일이 위치하고 있다.
config 링크는 elasticsearch 의 설정 파일이 위치한 /etc/elasticsearch/ 디렉토리를 가리키고 있다.
data 링크는 elasticsearch를 동작시키면서 저장되는 데이터들이 모여는 디렉토리이다.
logs 링크는 elasticsearch를 실행하면서 기록되는 로그들이 저장되어있는 디렉토리를 가리킨다.
[3] Elasticsearch 설정 파일이 존재하는 디렉토리로 이동
Elasticsearch의 설정 파일들은 /etc/elasticsearch 디렉토리안에 있으며 다음과 같은 두개의 파일을 갖고 있다.
elasticsearch.yml 은 elasticsearch server의 설정 정보를 갖고 있으며, elasticsearch 서버에 관한 모든 옵션이 작성 명시되어있다.
logging.yml 은 로깅에 관련한 설정을 제공하며, 해당 파일의 설정을 바꿀 필요는 없다(추후 운영 목적에 따라 수정 요함). 또한 해당 로깅 설정이 적용된 로그 기록은 /var/log/elasticsearch 디렉토리 안에 기록된다.
[4] Elasticsearch 서버의 클러스터 및 노드 설정
/etc/leasticsearch 디렉토리 안에 있는 elasticsearch.yml 파일을 vim 또는 vi 및 편집기로 연다.
이후 /node.name (node.name 이라고 작성된 곳을 찾음) 명령어를 입력하고 실행하여 노드 설정 부분을 찾는다.
cluster.name 과 node.name을 수정하기 위해 #을 제거한다.
cluster.name은 노드들을 묶을 클러스터의 이름을 지정하는 변수이다.(클러스터를 식별하기 위한 이름이기에 유일성과 의미를 가진 이름을 사용해야함)
node.name은 특정한 서버(노드)에 대한 이름을 지정하는 변수이다.(노드 이름은 자동으로 생성되지만 호스트명과 같이 클러스터 내에서 식별 가능한 이름을 활용하는 것이 좋음)
node.master 는 노드 마스터가 될 수 있는지에 대한 설정이다.
node.data 는 데이터를 저장하는 노드인지에 대한 설정이다. 보통 두 값을 모두 true로 설정하면 되며, 클러스터의 규모가 큰 경우에는 3가지 종류의 노드를 구성하기 위해 이 값을 노드별로 조정해 설정한다.
index.number_of_shards, index.number_of_replicas 는 각각 샤드와 리플리카의 수를 설정하는 변수로 샤드의 수는 5, 리플리카의 수는 1로 기본값을 갖고 있다.
[5] Elasticsearch 퍼미션 설정
Elasticsearch 의 설정 작업을 완료한 후에, 실행을 하면 위와 같은 에러가 발생한다
StackTrace 가 콘솔에 길게 출력이 되고, 읽어보면 log4j(자바 기반 로깅 유틸리티)가 elasticsearch과 관련된 폴더에 접근 권한이 없어에러가 발생함을 알 수 있다.
이를 해결하기 위해 Permission 설정이 필요하다.
Elasticsearch에서 로그 기록들은 /var/log/elasticsearch 폴더에서 관리된다.(2번 단계 참고)
/var/log 폴더에 존재하는 폴더와 파일을 리스트업을 해보면, Elasticsearch 폴더의 소유자와 그룹은elasticsearch로 되어있으며, 퍼미션이 755로 이외 사용자들은 쓰기 권한이 없는것을 알 수 있다.
- 이러한 이유로 log4j에서 로깅을 위해 elasticsearch 폴더 하위에 파일을 생성할때 퍼미션 문제로 에러가 발생하였음을 알 수 있다.
/var/log/elasticsearch 폴더에 대한 퍼미션 설정을 수정한 후에 다시, Elasticsearch를 실행하면 위와 같은 에러를 출력하며 실행이 되지 않는다.
에러 로그를 읽어보면 AccessDeniedException으로 접근이 거부로 인한 에러 발생임을 알 수 있다. 또한 접근 권한 문제가 발생한 경로를 보면 /data/johnmark-cluster-1 으로, data 링크를 통해 이동한 후, 클러스터 파일을 만드는데 실패 했음을 알 수 있다.
/usr/share/elasticsearch/ 폴더 내의 data 링크는 /var/lib/elasticsearch 폴더를 가리키고 있으므로, 아래와 같이 해당 폴더의 퍼미션 권한을 변경함으로써, 위 와 같은 에러를 해결할 수 있다.
[6] Elasticsearch 실행
퍼미션 설정 이후, 다시 /usr/share/elasticsearch/bin 폴더에서 elasticsearch를 실행시키면 에러 없이 정상적으로 동작함을 알 수 있다.(위 사진은 elasticsearch를 백그라운드로 실행 시킴)
이후 프로세스 목록을 확인하면, java 명령어를 통해 실행된 프로세스가 있음을 알 수 있다.
Elasticsearch는 REST 형태로 데이터를 다루기 때문에 정상적으로 실행이 될 시 특정 포트 번호를 통해 통신을하게 된다.
netstat 명령어에 -tnlp(t: tcp, n: 포트나 주소를 숫자로 표현, l: 리슨 상태의 포트를 보여줌, p: 운영중인 프로그램 이름을 보여줌) 옵션을 주고 grep 명령어를 통해 9200 포트가 정삭적으로 운영중인지 확인해 본다.(9200번 포트는 elasticsearch의 디폴트 포트)
Elasticsearch가 정상적으로 동작하고 있음을 확인 했다면, curl 명령어를 통해 테스트를 해본다.
curl 은 command line 기반의 data transfer tool 이다.
-X 옵션은 데이터 전송 방법을 선택하여 데이터를 보내는 것으로 기존의 HTTP 메소드와 동일하다.(GET, POST, UPDATE, DELETE)
curl -XGET localhost:9200 의 명령어를 실행 시켰을 시 위와 같이 출력이 된다면 Elasticsearch가 정상적으로 동작하고 있는 것이다.
'Programming > Infra & Architecture' 카테고리의 다른 글
[네트워크 기본] OSI 7계층 & TCP/IP Model (0) | 2022.04.25 |
---|---|
[System Design] 1. 사용자 수에 따른 규모의 확장성 (2) | 2021.10.14 |
[DevOps] 로그 수집 및 모니터링 시스템 - Sentry (1탄) (2) | 2019.06.10 |