dev/Cloud & Infra

ElasticSearch 설치시 확인할 사항

lugi 2018. 12. 30. 00:56

ElasticSearch 설치시 확인할 사항



올초부터 회사에서 요즘 Kafka, Elasticsearch, Ansible, k8s 등등
난생 처음 다뤄보는 것들을 하나하나 엮어서 올리다보니 설치부터 삽질한 경험이 많아서 정리 해 보려고 함...
가장 기본적인 Elasticsearch 의 경우에도 무턱대고 설치를 하려고 하면 여러가지 에러 메시지를 마주치게 됨
아래는 설치시 체크해보아야 할 기본적인 사항들



  • Important System Configuration에서 참고하였음
  • RPM이나 DEB로 리눅스에 설치할 경우는 신경 쓰지 않아도 됨
  • Permission
    • ElasticSearch는 root 권한으로 실행을 하지 않을 것을 권장하므로 Elasticsearch용 유저를 따로 만드는 것을 권장함
    • 5.0 이하의 버전에서는 -Des.insecure.allow.root=true 실행 파라미터를 주고 루트에서 실행 가능하지만
    • 5.0 이상의 버전에는 해당 옵션이 제거되고 don't run elasticsearch as root 에러 발생
  • Disable swapping
    • Elasticsearch는 JVM상에서 구동되므로 메모리 점유 또한 JVM 옵션으로 컨트롤되므로 swap을 꺼도 무방하다
    • 임시로 끄기 위해서는 sudo swapoff -a
    • 영구적으로 끄기 위해서는 /etc/fstab의 swap 이라는 문구가 포함된 파일을 모두 주석 처리
  • File Descriptors
    • Elasticsearch는 동시에 매우 많은 파일을 엑세스하기 때문에 이 설정이 권장치보다 낮으면 data loss가 발생함
    • ulimit -Hn 명령어의 값은 65536 이상을 권장
    • ulimit -n 65536으로 임시로 설정 가능
    • 영구적인 설정을 위해서는 /etc/security/limits.conf에 아래와 같은 줄을 추가 (재로그인시 적용)
      • elasticsearch - nofile 65536 (elasticsearch 구동용 계정이 elasticsearch인 경우)
  • Number of Threads
    • Elasticsearch는 작업간 스레드를 많이 사용하는데 이 스레드의 숫자는 4096 이상을 권장함
    • ulmit -Hu 명령어의 값은 4096 이상을 권장
    • ulimit -u 4096으로 임시로 설정 가능
    • 영구적인 설정을 위해서는 /etc/security/limits.conf에 아래와 같은 줄을 추가 (재로그인시 적용)
      • elasticsearch - nproc 4096 (elasticsearch 구동용 계정이 elasticsearch인 경우)
  • Virtual Memory
    • Elasticsearch는 mmapfs를 저장소로 사용하는데, 일반적으로 OS의 기본값이 작게 설정되어 있어 메모리 문제를 일으킬 수 있음
      • sysctl vm.max_map_count 명령어의 값은 262144 이상을 권장
      • sysctl -w vm.max_map_count=262144로 임시로 설정 가능
      • 영구적인 설정을 위해서는 /etc/sysctl.conf에 아래와 같은 줄을 추가 (재부팅시 적용)
      • vm.max_map_count=262144
  • 위의 사항들이 제대로 되어 있지 않으면 Elasticsearch 구동시 bootstrap check가 실패함
    • Elasticsearch가 loopback address에 bind되어 있는 단일노드라면 development mode이므로 관계 없지만
    • Elastiscsearch가 non-loopback address에 bind되어 있으며 클러스터에 참가하는 노드라면 production mode이므로 위의 사항을 통과해야지만 구동함
  • 클러스터링에 관한 설정은 다음 포스트에...