본문으로 건너뛰기

Elasticsearch 8.x 설치 및 Cluster구성하기

· 약 7분

Elasticsearch는 실시간 분산 검색 및 분석 엔진으로, 대용량 데이터를 효율적으로 저장, 검색, 분석할 수 있는 오픈소스 도구입니다.

Apache Lucene 라이브러리를 기반으로 구축되었으며, 주로 풀텍스트 검색, 로그 분석, 애플리케이션 모니터링 등의 용도로 사용됩니다.

본 글에서는 Elasticsearch 아카이브 (.tar.gz) 설치 및 클러스터 구성방법에 대해서 소개합니다.

Elasticsearch 설치

설치환경 및 Elasticsearch 버전

  • OS: Ubuntu 24.04 LTS
  • Elasticsearch: 8.17.2

클러스터 구성을 위해 다음과 같이 3대의 VM을 준비합니다.

No.host nameIP
#1es-node1192.168.234.128
#2es-node2192.168.234.129
#3es-node3192.168.234.130

아카이브 다운로드 및 설치

먼저 Elasticsearch 아카이브를 다운로드한 후, 압축을 해제하여 설치 디렉토리로 이동합니다.

wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-8.17.2-linux-x86_64.tar.gz

tar -xzf elasticsearch-8.17.2-linux-x86_64.tar.gz
sudo mv elasticsearch-8.17.2 /opt/elasticsearch

cd /opt/elasticsearch

사용자 생성 및 권한 설정

ES 서비스 계정을 생성하고 Elasticsearch 디렉토리의 소유권을 해당 사용자로 변경합니다.

sudo adduser elastic
sudo passwd elastic
sudo chown -R elastic:elastic /opt/elasticsearch

Systemd 서비스 설정

/etc/systemd/system/elasticsearch.service 파일을 생성하여 Elasticsearch를 서비스로 등록합니다.

sudo vim /etc/systemd/system/elasticsearch.service
elasticsearch.service
[Unit]
Description=Elasticsearch
After=network.target

[Service]
User=elastic
Group=elastic
ExecStart=/opt/elasticsearch/bin/elasticsearch
Restart=always
LimitMEMLOCK=infinity
LimitNOFILE=65536

[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload

방화벽 설정

Elasticsearch 및 Kibana에서 사용하는 포트를 방화벽에서 허용합니다.

sudo firewall-cmd --permanent --add-port=9200/tcp
sudo firewall-cmd --permanent --add-port=9300/tcp
sudo firewall-cmd --permanent --add-port=5601/tcp # Kibana 연동 시
sudo firewall-cmd --reload

Elasticsearch 클러스터 구성

인증서 생성 및 배포

클러스터 간 보안 통신을 위해 SSL/TLS 인증서를 생성하고 각 노드에 배포합니다.

임의의 노드에서 CA 인증서를 생성:

sudo -u elastic ./bin/elasticsearch-certutil ca
sudo -u elastic ./bin/elasticsearch-certutil cert --ca elastic-stack-ca.p12

생성된 elastic-certificates.p12 파일을 각 노드의 /opt/elasticsearch/config 디렉토리에 복사합니다.

sudo -u elastic scp elastic-certificates.p12 elastic@192.168.234.129:/opt/elasticsearch/config
sudo -u elastic scp elastic-certificates.p12 elastic@192.168.234.130:/opt/elasticsearch/config
sudo mv elastic-certificates.p12 config/elastic-certificates.p12

elasticsearch.yml 편집

각 노드별로 고유의 node.name을 지정하고, 클러스터 관련 설정을 추가합니다.

sudo vim /opt/elasticsearch/config/elasticsearch.yml
elasticsearch.yml
cluster.name: es-cluster
node.name: node-1
network.host: 0.0.0.0

path.data: /opt/elasticsearch/data
path.logs: /opt/elasticsearch/logs

# 클러스터 노드 IP 목록
discovery.seed_hosts: ["192.168.234.128", "192.168.234.129","192.168.234.130"]

# 클러스터 내구성을 위한 마스터 자격 노드 지정 (최초 구성 후 주석 처리 필수)
cluster.initial_master_nodes: ["node-1", "node-2","node-3"]

# SSL/TLS 설정
xpack.security.transport.ssl.enabled: true
xpack.security.transport.ssl.verification_mode: certificate
xpack.security.transport.ssl.client_authentication: required
xpack.security.transport.ssl.keystore.path: elastic-certificates.p12
xpack.security.transport.ssl.truststore.path: elastic-certificates.p12

주의: cluster.initial_master_nodes 설정은 최초 클러스터 구성 시에만 필요하며, 이후에는 주석 처리해야 합니다. (Bootstrapping a cluster 참고)

클러스터 구동 및 상태 확인

각 노드에서 Elasticsearch 서비스를 시작한 후, 클러스터 상태를 확인합니다.

서비스 시작:

sudo systemctl start elasticsearch

elastic 계정의 비밀번호를 재설정합니다.

sudo bin/elasticsearch-reset-password -u elastic -i

노드 상태 확인:

curl -u elastic:your_pass http://192.168.234.128:9200/_cat/nodes?v
ip              heap.percent ram.percent cpu load_1m load_5m load_15m node.role   master name
192.168.234.130 19 89 88 1.30 0.80 0.37 cdfhilmrstw - node-3
192.168.234.129 24 89 9 0.29 0.17 0.13 cdfhilmrstw - node-2
192.168.234.128 10 90 17 0.00 0.00 0.00 cdfhilmrstw * node-1

클러스터 상태 확인:

curl -u elastic:your_pass http://192.168.234.128:9200/_cluster/health?pretty
{
"cluster_name" : "es-cluster",
"status" : "green",
"timed_out" : false,
"number_of_nodes" : 3,
"number_of_data_nodes" : 3,
"active_primary_shards" : 3,
"active_shards" : 6,
"relocating_shards" : 0,
"initializing_shards" : 0,
"unassigned_shards" : 0,
"unassigned_primary_shards" : 0,
"delayed_unassigned_shards" : 0,
"number_of_pending_tasks" : 0,
"number_of_in_flight_fetch" : 0,
"task_max_waiting_in_queue_millis" : 0,
"active_shards_percent_as_number" : 100.0
}

Kibana 연동

디폴트로 elastic 슈퍼유저 계정은 Kibana에서 사용할수 없으며, kibana전용 built-in 계정 kibana_system을 사용합니다.

비밀번호 설정:

cd /opt/elasticsearch
sudo bin/elasticsearch-reset-password -u kibana_system -i

Kibana 설치

wget https://artifacts.elastic.co/downloads/kibana/kibana-8.17.2-linux-x86_64.tar.gz
tar -xzf kibana-8.17.2-linux-x86_64.tar.gz
sudo mv kibana-8.17.2 /opt/kibana

kibana.yml 편접

sudo vim /opt/kibana/config/kibana.yml 
kibana.yml
server.port: 5601
server.host: "0.0.0.0"
elasticsearch.hosts: ["http://192.168.234.128:9200","http://192.168.234.129:9200","http://192.168.234.130:9200"]
elasticsearch.username: "kibana_system"
elasticsearch.password: "your_pass"

Kibana 구동

cd /opt/kibana
nohup bin/kibana &

이제 웹 브라우저에서 http://192.168.234.128:5601 (또는 Kibana를 설치한 노드의 IP 주소)에 접속하여 elastic 계정으로 로그인합니다.

Kibana 로그인

오늘은 Elasticsearch와 Kibana를 간단히 설치하고 클러스터를 구성하는 방법을 살펴보았습니다.

아카이브 설치 방식은 설치와 관리가 쉬워 다양한 환경에서 유용하게 사용할 수 있습니다. 도움이 되길 바랍니다.