인프라,데이터/Elasticsearch, Logstash, Kibana

하나의 로컬환경(도커)에 2개의 엘라스틱서치 노드 띄우기

AimB 2021. 11. 3. 22:21

엘라스틱서치 설치 후,

useradd user 로 새 유저를 추가해준다.

다음의 명렁어를 실행하여 각각의 폴더에 유저와 그룹 소유권을 변경한다. (마지막 명령어는 user로도 로그를 남길 수 있게 한다.)

chown -R user:user /etc/elasticsearch
chown -R user:user /usr/share/elasticsearch
chown -R user:user /var/lib/elasticsearch
chown -R user:user /var/log/elasticsearch
chown -R user:user /etc/sysconfig/elasticsearch
chmod 777 -R /var/log/elasticsearch

su user 로 유저를 바꿔준다. (엘라스틱서치는 root 로 실행할 수 없다.

elasticsearch.yml 파일의 다음의 사항을 넣어준다. (클러스터 이름, 노드 이름, 마스터 노드인지 데이터 노드인지는 넣을 필요가 없다.)

path.data: /var/lib/elasticsearch

path.logs: /var/log/elasticsearch

network.host: 0.0.0.0

#http.port: 9200 # 포트를 지정해주지 않아야 한다.

discovery.zen.minimum_master_nodes: 1

node.max_local_storage_nodes : 2

yml 파일을 설정했으면 다음의 명령어로 elasticsearch를 실행한다.

/usr/share/elasticsearch/bin/elasticsearch -E cluster.name=es-cluster-1 -E node.name=master-1 -E http.port=[원하는포트]
/usr/share/elasticsearch/bin/elasticsearch -E cluster.name=es-cluster-1 -E node.name=data-1 -E http.port=[원하는포트2]

-E 명령어로 환경 설정을 할 수 있는데, 클러스터 이름과 노드 이름을 정해준다.

그러면 마스터 노드는 9200 포트, 데이터 노드는 9201 포트에 연결된다.
포트를 커스텀하고 싶다면, -E http.port=[port number] 옵션을 더하면 된다.

로그에 high disk watermark exceeded on shards will be relocated away from this node 에러가 뜬다면 elasticsearch.yml 파일에 다음을 추가해준다. 

cluster.routing.allocation.disk.watermark.low: 2gb
cluster.routing.allocation.disk.watermark.high: 1gb
cluster.routing.allocation.disk.watermark.flood_stage: 500mb
cluster.info.update.interval: 1m

Setting: cluster.routing.allocation.disk.watermark.low

Controls the low watermark for disk usage. It defaults to 85%, meaning ES will not allocate new shards to nodes once they have more than 85% disk used. It can also be set to an absolute byte value (like 500mb) to prevent ES from allocating shards if less than the configured amount of space is available.

Setting: cluster.routing.allocation.disk.watermark.high

Controls the high watermark. It defaults to 90%, meaning ES will attempt to relocate shards to another node if the node disk usage rises above 90%. It can also be set to an absolute byte value (similar to the low watermark) to relocate shards once less than the configured amount of space is available on the node.

Setting:: cluster.routing.allocation.disk.watermark.flood_stage

Controls the flood stage watermark. It defaults to 95%, meaning that Elasticsearch enforces a read-only index block (index.blocks.read_only_allow_delete) on every index that has one or more shards allocated on the node that has at least one disk exceeding the flood stage. This is a last resort to prevent nodes from running out of disk space. The index block must be released manually once there is enough disk space available to allow indexing operations to continue.

https://www.elastic.co/guide/en/elasticsearch/reference/current/disk-allocator.html

Please note:

Percentage values refer to used disk space, while byte values refer to free disk space. This can be confusing, since it flips the meaning of high and low. For example, it makes sense to set the low watermark to 10gb and the high watermark to 5gb, but not the other way around.

curl 로 데이터를 넣고 elasticsearch head 플러그인으로 잘 들어가는지 확인한다. 
elasticsearch head 플러그인에서 http://0.0.0.0:9200 으로 연결한다.

curl -XPOST http://localhost:9200/cat/id/1/?pretty \
  -H 'Content-Type: application/json' \
  -d '{"name" : "mimo", "age" : "1.5"}'

curl -XPOST http://localhost:9200/cat/id/2/?pretty \
  -H 'Content-Type: application/json' \
  -d '{"name" : "dire", "age" : "4"}'

위 명령어를 입력 후 elasticsearch head 를 새로고침하면 cat 인덱스가 추가되어 있을 것이다.