본문 바로가기

ELK스택

[Elasticsearch] network.host설정과 bootstrap체크

이번 글에서는 3가지를 정리해 보려고 합니다.

  • elasticsearch 클러스터 구성을 위한 network.host설정
  • 설정값을 변경하는 과정에서 나타나는 bootstrap체크
  • 외부에서 elasticsearch서버에 접근
network.host설정

일단 network.host는 elasticsearch가 실행되는 서버의 ip주소입니다.

network.host는 config/elasticsearch.yml파일에서 설정 할 수 있는데 평소에는 주석처리가 되어있어서 Elasticsearch노드가 개발 모드로 실행이 됩니다. 만약에 이 설정을 Elasticsearch의 실제 IP주소로 변경하게 된다면, 운영 모드로 실행이 되어 부트스트랩 체크를 하게 됩니다.

elasticsearch.yml파일에 network.host값을 설정하였습니다.

설정에 사용되는 특별한 변수값은 다음과 같습니다.

  • _local_ : 루프백 주소 127.0.0.1 과 같습니다. 디폴트로 설정되어 있습니다.
  • _site_ : 로컬 네트워크 주소로 설정됩니다. 실제로 클러스터링 구성 시 주로 설정하는 값입니다.
  • _global_ : 네트워크 외부에서 바라보는 주소로 설정합니다.

이제 network.host설정을 마치고 elasticsearch를 실행해 보겠습니다.

결과는??????????????????? 실행되지 않습니다.ㅠㅠ

위에서 말한것과 같이 network.host를 설정하게되면 운영모드로 동작하게되어 부트스트랩체크가 되기 때문입니다.

3가지 에러가 있는데 이 부분은 bootstrap체크 부분을 알아보면서 설명하겠습니다.

 

bootstrap체크

"[1]: max file descriptors" 에러의 원인은 Elasticsearch는 동시에 많은 파일에 접근을 하는 방식이지만, 대부분의 OS는 하나의 프로세스가 많은 파일을 관리하지 않게합니다. 그래서 그 값을 65535로 수정해야 합니다.

이 문제에대한 해결방안은 문서를 보면 해결할 수 있습니다.

etc/security/limits.conf파일 맨 아래 줄에 "elasticsearch   -   nofile   65535"를 추가해주면 해결이 됩니다.

 

"[2]: max virtual memory"에러의 원인은 문서를 살펴보면

etc/sysctl.conf파일 맨 아래 줄에 "sysctl -w vm.max_map_count=262144"를 추가해주면 해결이 됩니다.

 

"[3]: the default discovery"에러의 원인은 discovery를 설정하지 않았다는 의미입니다.

discovery.seed_hosts: ["elastic-1"], cluster.initial_master_nodes: ["node-1"] 설정을 완료하고 Elasticsearch를 실행하면 정상적으로 실행이 됨을 볼 수 있습니다.

그리고 Elasticsearch를 예전과 같이 "curl localhost:9200"으로 실행하면 접속이 되지 않음을 볼 수 있는데

이건 network.host를 "_site_"값으로 변경해두었기 때문입니다. 앞으로는 "curl 10.178.0.2:9200"으로 접속을 진행 할 수 있습니다.

 

외부에서 Elasticsearch 접근

이번에는 내부에서 elasticsearch를 접근하는게 아니라 외부에서 접근하는 방법에대해 알아보려 합니다.

이 부분은 저는 GCP플랫폼에서 인스턴스를 발급받아 방화벽세팅을 통해 외부에서 Elasticsearch에 접근이 가능하지만,

정리는 하지않으려고 합니다. 필요하신 분들은 개인적으로 알아보면 좋을 것 같습니다.