구축하기 전에
관련글은 아래 링크를 참조 하도록 한다.
- elasticsearch 단일 node에 8.14.x 설치하기(SSL 포함)
- elasticsearch cluster 구축하기
- elasticsearch cluster에 kibana 붙이기(SSL 포함)
- elasticsearch cluster에 logstash 붙이기(SSL 포함)
- elasticsearch ILM 적용을 통한 Hot-Warm-Cold 아키텍쳐 구현해 보기[1]
- elasticsearch ILM 적용을 통한 Hot-Warm-Cold 아키텍쳐 구현해 보기[2]
- elasticsearch Data Stream에 ILM 적용시켜보기
설치 환경은 아래와 같다.
- OS : CentOS Stream release 8
- Kernel : 4.18.0-553.6.1.el8.x86_64
- elasticsearch : 8.14.3
최종 3개의 elasticsearch(이하 ES) node로 cluster를 구성하고 1개의 node로 logstash, kibana를 구성할 예정이다.
- ES node :
- test-ES01 : 172.16.10.111
- node name : es-node01
- test-ES02 : 172.16.10.112
- node name : es-node02
- test-ES03 : 172.16.10.113
- node name : es-node03
- test-ES01 : 172.16.10.111
- kibana, logstash :
- test-ES04 : 172.16.10.114
- node name : es-kibana01, es-logstash01
- test-ES04 : 172.16.10.114
test-ES01은 host의 hostname이며 es-node01은 ES 의 node name 이다
단일 node(test-ES02) 구축에 이어 test-ES01, test-ES03를 추가하는 방식으로 cluster를 구축하고자 한다.
단일 node 구축 관련 참조 : https://ploz.tistory.com/entry/elasticsearch-814x-%EC%84%A4%EC%B9%98CentOS
본격적인 구축
hosts 파일 등록
이 작업은 test-ES01, test-ES03 모두에 동일하게 적용한다.
경로 : /etc/hosts
172.16.10.111 test-ES01
172.16.10.112 test-ES02
172.16.10.113 test-ES03
172.16.10.114 test-ES04
yum repository 추가
elasticsearch GPG KEY import
이 작업은 test-ES01, test-ES03 모두에 동일하게 적용한다.
rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
repogitory 추가
아래 경로에 설정을 추가한다.
이 작업은 test-ES01, test-ES03 모두에 동일하게 적용한다.
경로 : /etc/yum.repos.d/elasticsearch.repo
[elasticsearch]
name=Elasticsearch repository for 8.x packages
baseurl=https://artifacts.elastic.co/packages/8.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md
ES 설치
yum(dnf)를 이용하여 패키지 설치로 진행한다.
이 작업은 test-ES01, test-ES03 모두에 동일하게 설치한다.
yum install elasticsearch-8.14.3
인증서 가져오기
test-ES02에서 생성했던 ca, node, http 인증서를 가져와 적용 할 수 있다.
이때 인증서 생성시 입력했던 패스워드를 잘 기억해두었다가 test-ES01, test-ES03의 키 저장소에 추가해주어야 한다.
이 작업은 test-ES01, test-ES03 모두에 동일하게 적용한다.
기존인증서 삭제
rm -rf /etc/elasticsearch/certs/*
test-ES02 인증서 가져오기
# ca 인증서
scp -r test-ES02:/etc/elasticsearch/certs/elastic-stack-ca.p12 /etc/elasticsearch/certs/
# node 인증서
scp -r test-ES02:/etc/elasticsearch/certs/elastic-stack-ca.p12 /etc/elasticsearch/certs/
# http 인증서
scp -r test-ES02:/etc/elasticsearch/certs/http.p12 /etc/elasticsearch/certs/
키 저장소에 인증서 암호 추가하기
test-ES02에서 인증서 생성시 입력했던 암호를 동일하게 적용한다. 암호가 분실하였을 경우 test-ES02에서 새로운 인증서를 생성하고 다시 test-ES01, test-ES03에 배포하여야 한다.
이 작업은 test-ES01, test-ES03 모두에 동일하게 적용한다.
node 인증서 키 저장소에 암호 추가
bin/elasticsearch-keystore add xpack.security.transport.ssl.keystore.secure_password
Setting xpack.security.transport.ssl.keystore.secure_password already exists. Overwrite? [y/N] [y 입력]
Enter value for xpack.security.transport.ssl.keystore.secure_password: [패스워드 입력]
bin/elasticsearch-keystore add xpack.security.transport.ssl.truststore.secure_password
Setting xpack.security.transport.ssl.truststore.secure_password already exists. Overwrite? [y/N] [y 입력]
Enter value for xpack.security.transport.ssl.truststore.secure_password: [패스워드 입력]
http 인증서 키 저장소에 암호 추가
bin/elasticsearch-keystore add xpack.security.http.ssl.keystore.secure_password
Setting xpack.security.http.ssl.keystore.secure_password already exists. Overwrite? [y/N] [y 입력]
Enter value for xpack.security.http.ssl.keystore.secure_password: [패스워드 입력]
bin/elasticsearch-keystore add xpack.security.http.ssl.truststore.secure_password
Enter value for xpack.security.http.ssl.truststore.secure_password: [패스워드 입력]
ES configuration
node.name 을 제외하고 test-ES01, test-ES02, test-ES03 에서 동일하게 설정한다.
경로 : /etc/elasticsearch/elasticsearch.yml
cluster.name: test-es-cluster
# 각 node이름에 맞게 설정
node.name: [es-node01 or es-node02 or es-node03]
path.data: /var/lib/elasticsearch
path.logs: /var/log/elasticsearch
bootstrap.memory_lock: true
network.host: ["_local_","_site_"]
http.port: 9200
discovery.seed_hosts: ["test-ES01","test-ES02","test-ES03"]
cluster.initial_master_nodes: ["es-node01","es-node02","es-node03"]
xpack.security.enabled: true
xpack.security.enrollment.enabled: true
xpack.security.http.ssl:
enabled: true
verification_mode: certificate
keystore.path: certs/http.p12
truststore.path: certs/http.p12
xpack.security.transport.ssl:
enabled: true
verification_mode: certificate
keystore.path: certs/es-node02.p12
truststore.path: certs/es-node02.p12
xpack.monitoring.collection.enabled: true
bootstrap.memory_lock: true 옵션을 위해 설정을 추가한다.
이 작업은 test-ES01, test-ES03 모두에 동일하게 적용한다.
경로 : /usr/lib/systemd/system/elasticsearch.service
[Service]
LimitMEMLOCK=infinity
systemctl daemon-reload
경로 : /etc/security/limits.conf
elasticsearch soft memlock unlimited
elasticsearch hard memlock unlimited
host를 재부팅한다.
jvm 옵션 설정
이 작업은 test-ES01, test-ES03 모두에 동일하게 적용한다.
경로 : /etc/elasticsearch/jvm.options
-Xms8g
-Xmx8g
host의 물리메모리 절반의 값을 jvm 옵션으로 사용한다.
ES 서비스를 시작한다.
모든 node에서 서비스를 시작하거나 재시작한다.
systemctl start elasticsearch
ES 사용자 계정 설정
ES의 계정은 elastic 으로 패스워드는 ES 설치시에 발급하여 준다.
yum을 이용한 설치 시 아래와 같이 "+6i-Z*HtbDPpxP4MSSE_" 의 패스워드를 발급해 준다.
...
Installing : elasticsearch-8.14.3-1.x86_64 1/1
Running scriptlet: elasticsearch-8.14.3-1.x86_64 1/1
--------------------------- Security autoconfiguration information ------------------------------
Authentication and authorization are enabled.
TLS for the transport and HTTP layers is enabled and configured.
The generated password for the elastic built-in superuser is : +6i-Z*HtbDPpxP4MSSE_
...
하지만 cluster의 경우 test-ES02에서 elasticsearch-setup-passwords를 통해 재설정한 패스워드가 모든 node에 사용되게 된다.
패스워드를 분실한 경우 아무 node에서 elasticsearch-setup-passwords를 통해 다시 패스워드를 발급받으면 된다.
Cluster 상태 확인
node 확인
curl -k -u elastic:[패스워드] -XGET 'https://127.0.0.1:9200/_cat/nodes?v'
생성한 ca 인증서가 public 하지 않으므로 curl에 -k 옵션을 사용한다.
ip heap.percent ram.percent cpu load_1m load_5m load_15m node.role master name
172.16.10.111 4 60 2 0.85 0.70 0.31 cdfhilmrstw - es-node01
172.16.10.112 8 63 0 0.04 0.01 0.00 cdfhilmrstw * es-node02
172.16.10.113 12 69 0 0.04 0.01 0.00 cdfhilmrstw - es-node03
es-node02가 현재 master로 선정 되었다.
상태 정보 확인
curl -k -u elastic:[패스워드] -XGET 'https://127.0.0.1:9200/_cluster/health?pretty'
{
"cluster_name" : "test-es-cluster",
"status" : "green",
"timed_out" : false,
"number_of_nodes" : 3,
"number_of_data_nodes" : 3,
"active_primary_shards" : 1,
"active_shards" : 2,
"relocating_shards" : 0,
"initializing_shards" : 0,
"unassigned_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
}
shard disk 할당 정보
curl -k -u elastic:[패스워드] -XGET 'https://127.0.0.1:9200/_cat/allocation?v'
shards shards.undesired write_load.forecast disk.indices.forecast disk.indices disk.used disk.avail disk.total disk.percent host ip node node.role
1 0 0.0 4.6kb 4.6kb 4.7gb 73.2gb 77.9gb 6 172.16.10.111 172.16.10.111 es-node01 cdfhilmrstw
1 0 0.0 4.6kb 4.6kb 4.7gb 73.1gb 77.9gb 6 172.16.10.113 172.16.10.113 es-node03 cdfhilmrstw
0 0 0.0 0b 0b 4.7gb 73.2gb 77.9gb 6 172.16.10.112 172.16.10.112 es-node02 cdfhilmrstw
warning log
data가 쌓여 있는 (새로 설치하지 않은) host의 ES node를 cluster에 합류 시킬때 아래와 같은 로그로 cluster 조인이 되지 않는 경우가 있다.
[WARN ][o.e.c.c.Coordinator ] [es-node03] This node is a fully-formed single-node cluster with cluster UUID [fuzWMNMGSni2ZpTYtNUzww], but it is configured as if to discover other nodes and form a multi-node cluster via the [discovery.seed_hosts=[test-ES02, test-ES03]] setting. Fully-formed clusters do not attempt to discover other nodes, and nodes with different cluster UUIDs cannot belong to the same cluster. The cluster UUID persists across restarts and can only be changed by deleting the contents of the node's data path(s). Remove the discovery configuration to suppress this message.
이때 path.data에 있는 경로의 data를 삭제후 ES를 재시작하면 정상적인 cluster 조인이 가능할 수 있다.
'Monitoring Tools > ELK Stack' 카테고리의 다른 글
[logstash] elasticsearch cluster에 logstash 붙여보기(SSL 포함) (0) | 2024.07.26 |
---|---|
[kibana] elasticsearch cluster에 kibana 붙이기 (0) | 2024.07.24 |
[elasticsearch] 단일 node에 8.14.x 설치(CentOS, xpack security) (1) | 2024.07.22 |
[elasticsearch] Query DSL(Domain Specific Language) (0) | 2024.07.04 |
[elasticsearch] document 관련 API(조회,추가,수정,삭제 등) (1) | 2024.07.01 |