책/기초부터 다지는 ElasticSearch 운영 노하우- 프로그래밍인사이트
[ElasticSearch] 클러스터 구축하기
키크니개발자
2022. 12. 30. 12:43
안녕하세요!
키크니 개발자 입니다. 🦒
elasticsearch.yml 파일을 통해 설정할 수 있는 항목들
- elasticsearch.yml: 엘라스틱서치를 구성하기 위해 기본이 되는 환경 설정 파일이다.
Cluster 영역
cluster.name: my-application
- 클러스터 영역은 클러스터 전체에 적용 되는 설정이다.
- 클러스터의 이름을 설정하는 항목이다. 클러스터를 구성할 때는 클러스터를 구성할 노드들이 모두 동일한 클러스터 이름을 사용해야 한다.
- 이름을 변경하려면 클러스터 내의 모든 노드를 재시작해야 하기 때문에 처음부터 신중하게 설정해야 한다.
Node 영역
node.name: node-1
- 노드 영역은 해당 노드에만 적용 되는 설정이다.
- 노드의 이름은 클러스터 내에서 유일해야 한다.
- 노드 이름 또한 운영 중에는 변경이 불가능하며, 변경하려면 노드를 재시작해야 한다.
node.attr.rack: r1
- 각 노드에 설정할 수 있는 커스텀 항목으로, 사용자 정의된 rack 값을 통해 HA 구성과 같이 샤드를 분배할 수 있는 기능이다.
Path 영역
path.data: /var/lib/elasticsearch
- 패스 영역은 데이터와 로그의 저장 위치와 관련 된 설정이다.
- 노드가 가지고 있을 문서들을 저장할 경로를 설정하는 항목이다.
path.logs: /var/log/elasticsearch
- 엘라스틱서치에서 발생하는 로그를 저장할 경로를 설정하는 항목이다.
Memory 영역
bootstrap.memory_lock: true
- 메모리 영역에는 엘라스틱서치 프로세스에 할당 되는 메모리 영역을 어떻게 관리할 것인지 간략하게 설정할 수 있다.
- 시스템의 스왑 메모리 영역을 사용하지 않도록 설정이다. (엘라스틱서치는 스왑 메모리 영역을 최대한 사용하지 않도록 권장하고 있다.
Network 영역
network.host: 192.168.0.1
http.port: 9200
- 네트워크 영역: 엘라스틱서치 애플리케이션이 외부와 통신할 때 사용하게 될 IP 주소를 설정하는 항목이다. 외부와의 통신뿐 아니라 노드 간의 토신에도 네트워크 영역에서 설정한 값들을 바탕으로 동작하기 때문에 설정에 주의해야 한다.
- API를 여러 개의 IP로 호출하고 싶다면 분리해야 한다. 클라이언트의 요청은 자신의 IP뿐만 아니라 localhost 내부 도메인의 주소인 127.0.0.1로 받아야 하고, 클러스터 내부에서 노드 간 통신은 자신의 IP를 사용해야 한다.
Discovery 영역
- 디스커버리 영역: 노드 가의 클러스터링을 위해 필요한 설정이다.
- discovery.zen.minimum_master_nodes: 이 값은 클러스터를 유지하기 위한 최소한의 마스터 노드 대수를 의미한다.
- 이는 split brain 현상을 방지하는데 반드시 필요한 설정이다.
- 클러스터의 안정성을 위해서 해당 노드를 과반 수 이상 설정할 수 있도록 두 대 이상의 홀수 값으로 구성하는 것이 좋다.
Gateway 영역
- 게이트웨이 영역: 클러스터 복구와 관련 된 내용을 포함한다.
Various 영역
- 노드들의 역할을 정의한다.
- jvm.options 파일을 통해 설정할 수 있는 항목들
- 엘라스틱서치는 자바로 만들어진 애플리케이션이기 때문에 힙 메모리, GC 방식 등과 같은 JVM 관련 설정이 필요하다.
- Xms4g, Xmx4g: JVM에서 사용하게 될 힙 메모리의 크기를 설정하는 항목이다. Xms(최솟값), Xmx(최댓값)을 설정한다. 중간에 메모리의 요청이 추가로 일어나면 성능이 낮아질 수 밖에 없기 때문에 두 값은 같은 값으로 설정하도록 권고한다.
- jvm.options 설정 파일에서는 대부분 힙 메모리와 관련 된 항목만 변경해주면 된다. 엘라스틱서치 공식 문서에서는 가능한 한 32GB를 넘지 않게 설정할 것을 권고한다.
- 향후 확장성을 위해서 마스터 노드와 데이터 노드는 가급적 분리해서 구축하는 것이 좋다.
반응형