본문 바로가기

Elk Stack/Elasticsearch

[Elasticsearch] elasticsearch.yml 파일 세팅 및 필수 세팅 추천

안녕하세요. 오늘은 elasticsearch configure 세팅에 대해서 알아보도록 하겠습니다.

제가 말하는 configure은 기본적으로 elasticsearch.yml 파일이라고 아시면 될 것 같습니다.

elasticsearch.yml 파일은 다양한 세팅을 담고 있다라고 생각하시면 됩니다.

 

기준 : ubuntu 20.04, elasticsearch 7.11.2 version

파일 위치: /etc/elasticsearch/elasticsearch.yml

1. 클러스터(cluster) 이름

cluster.name: my_cluster_name

 

2. 노드(node) 이름

node.name: node_001

 

3. 노드(node) 역할

#본인이 원하는 node를 선택 후 나머지는 지워주면 된다.
node.roles: [data, master, ingest]

#client node
node.roles: [ ]

부가 설명 : 노드의 역할은 중요합니다. 본인이 클러스터링 구조에 있어서 해당 노드가 어떤 역할을 할 것인지 파악하고 지정해주는 것이 좋습니다.

저의 개인적인 의견은 elasticsearch cluster의 이상적인 형태는 클라이언트 노드 2대, 마스터노드 3대 입니다. 또한, 데이터 노드는 본인이 속한 조직의 로그 수집데이터의 양에 따라서 다를 것입니다. 먼저 데이터노드는 3대로 시작해서 스케일 아웃 방식으로 진행해도 괜찮은 방식이라 생각합니다.

 

4. 네트워크 관련 설정

#본인의 서버, 즉 node ip를 적어주셔야합니다.
network.host: my_server_ip

#클라이언트와 통신할 포트입니다.
http.port: 9200

#클러스터링 할 노드들간의 통신할 포트입니다.
transport.tcp.port: 9300

 

5. 클러스터 관련 설정

#전체 클러스터링 대상들의 노드들의 ip 입니다. 자신의 ip도 포함되어 있어야합니다.
discovery.zen.ping.unicast.hosts: ["node-01_ip:9300","node-02_ip:9300","node-03_ip:9300","node-04_ip:9300"]

#node의 역할이 master인 노드들 -> 마스터 노드가 될 후보들을 적어준다.
cluster.initial_master_nodes:
        - node_name-1
        - node_name-2
        - node_name-3

부가 설명 : cluster.initial_master_nodes: 에는 노드들의 이름이 들어가두되며, 넣는 방식은 다양한 방식들이 존재합니다.

참고만 부탁드리겠습니다.

 

 

6. 그 외 부가적인 세팅

#Out Of Memory를 방지하기 위해서 나온 방법이며, OOM이 발생하면 node가 죽어버리는 일이 발생합니다.
#필드데이터의 캐시에는 특정 필드 유형에 대한 집계 및 중요 변수들이 존재합니다. 그래서 이 모니터링이 중요하며
#아래와 같은 사이즈가 세팅되면 해당사이즈 부터 캐시가 자동 정리를 시작해서 circuit braker exception을 방지해줍니다.
indices.fielddata.cache.size: 70%

#elasticsearch 자체적으로 swapping  금지
#하나의 메모리가 스왑아웃되면, 나중에 해당메모리가 다시 스왑인 해야해서 성능적 이슈생깁니다.
bootstrap.memory_lock: true

#elasticsearch의 자원을 외부에서도 요청할 수 있게 할 수 있는 세팅입니다.
http.cors.enabled: true
http.cors.allow-origin: "*"

 

7. 제가 현재 자주 애용하고 있는 elasticsearch.yml 파일의 초기 버전

cluster.name: my_cluster_name
node.name: node_001
node.roles: [data, master, ingest]
#node.roles: []

network.host: my_server_ip
http.port: 9200
transport.tcp.port: 9300

discovery.zen.ping.unicast.hosts: ["node-01_ip:9300","node-02_ip:9300","node-03_ip:9300","node-04_ip:9300"]
cluster.initial_master_nodes:
        - node_name-1
        - node_name-2
        - node_name-3

http.cors.enabled: true
http.cors.allow-origin: "*"

bootstrap.memory_lock: true
indices.fielddata.cache.size: 65%

xpack.monitoring.enabled: true
xpack.monitoring.collection.enabled: true

지금까지 간단하게 elasticsearch.yml 파일에 대해서 정리해봤습니다.

해당 부분에 대해서 질문 있으신 분들은 댓글 남겨주시면 제가 아는 부분에 있어서 답글 남겨드리겠습니다.