설치하기 전에
관련글은 아래 링크를 참조 하도록 한다.
- 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 적용시켜보기
elasticsearch 8.14.x 버전은 redhat 기준으로 CentOS7, RHEL8, RHEL9 가 지원되며 (8.0 부터 CentOS6은 지원하지 않는다.) JAVA는 openjdk 17, 21, 22 버전을 지원한다.
참고 : https://www.elastic.co/kr/support/matrix#matrix_jvm
설치 환경은 아래와 같다.
- 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 이다
이 글에서는 test-ES02 node 1개의 ES 설치 과정을 설명한다.
본격적인 설치
hosts 파일 등록
경로 : /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
rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
repogitory 추가
아래 경로에 설정을 추가한다.
경로 : /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)를 이용하여 패키지 설치로 진행한다.
yum install elasticsearch-8.14.3
인증서 생성
elasticsearch config 설정에 앞서 xpack security에서 transport layer와 restful api에서 사용할 http ssl 인증서를 생성해야 한다.
인증서는 elasticsearch-certutil를 통해 생성하며 PKCS#12 포맷으로 아래 순서로 진행예정이다.
- ca 인증서 생성
- node 인증서 생성
- http 인증서 생성
관련 참고 : https://www.elastic.co/guide/en/elasticsearch/reference/current/certutil.html
ca 인증서
경로: /usr/share/elasticsearch/
bin/elasticsearch-certutil ca
This tool assists you in the generation of X.509 certificates and certificate
signing requests for use with SSL/TLS in the Elastic stack.
...
If you elect to generate PEM format certificates (the -pem option), then the output will
be a zip file containing individual files for the CA certificate and private key
Please enter the desired output file [elastic-stack-ca.p12]: [Enter 입력]
Enter password for elastic-stack-ca.p12 : [패스워드 입력]
ca 인증서의 패스워드는 node 인증서를 만들때 마다 필요하므로 분실되지 않도록 관리에 신경써야 한다.
node 인증서
node 인증서는 silent mode로 미리 instances.yml 파일을 만들어 필요한 node들의 인증서를 한번에 생성할 예정이다.
경로 : /usr/share/elasticsearch/
instances.yml 생성
# vim instances.yml
instances:
- name: 'es-node02'
dns: [ 'test-ES02' ]
- name: 'es-kibana01'
dns: [ 'test-ES04' ]
- name: 'es-logstash01'
dns: [ 'test-ES04' ]
elasticsearch node에 사용할 인증서는 한 곳의 node에서 생성하고 같은 인증서로 공유하여 사용할 수 있다.
node 인증서 생성
bin/elasticsearch-certutil cert --silent --in instances.yml --out certs.zip --ca elastic-stack-ca.p12
Enter password for CA (elastic-stack-ca.p12) : [ca 패스워드 입력]
Enter password for es-node02/es-node02.p12 : [es-node02 패스워드 입력]
Enter password for es-kibana01/es-kibana01.p12 : [es-kibana01 패스워드 입력]
Enter password for es-logstash01/es-logstash01.p12 : [es-logstash01 패스워드 입력]
각 node의 인증서 패스워드는 분실하지 않도록 유의 하여야 한다.
node 인증서 확인
unzip certs.zip
Archive: certs.zip
creating: es-node02/
inflating: es-node02/es-node02.p12
creating: es-kibana01/
inflating: es-kibana01/es-kibana01.p12
creating: es-logstash01/
inflating: es-logstash01/es-logstash01.p12
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: [패스워드 입력]
node 인증서 키 저장소 확인
bin/elasticsearch-keystore list
autoconfiguration.password_hash
keystore.seed
xpack.security.http.ssl.keystore.secure_password
xpack.security.transport.ssl.keystore.secure_password
xpack.security.transport.ssl.truststore.secure_password
node 인증서 패스워드 확인
입력한 패스워드를 확인 할 수 있다.
경로 : /usr/share/elasticsearch
/bin/elasticsearch-keystore show xpack.security.transport.ssl.keystore.secure_password
/bin/elasticsearch-keystore show xpack.security.transport.ssl.truststore.secure_password
http 인증서
ES node의 Restful API 사용 목적을 중점으로 하여 인증서를 생성 하려 한다. (kibana는 현재 고려대상이 아니다.)
경로 : /usr/share/elasticsearch/
bin/elasticsearch-certutil http
## Elasticsearch HTTP Certificate Utility
...
Generate a CSR? [y/N] [N 입력]
## Do you have an existing Certificate Authority (CA) key-pair that you wish to use to sign your certificate?
...
Use an existing CA? [y/N] [Y 입력]
## What is the path to your CA?
...
CA Path: [/usr/share/elasticsearch/elastic-stack-ca.p12 입력]
...
Password for elastic-stack-ca.p12: [ca 인증서 패스워드 입력]
## How long should your certificates be valid?
...
For how long should your certificate be valid? [5y] [유효기간 입력 5Y]
## Do you wish to generate one certificate per node?
...
Generate a certificate per node? [y/N] [각 node의 인증서 개별 생성? N입력]
## Which hostnames will be used to connect to your nodes?
...
Enter all the hostnames that you need, one per line.
When you are done, press <ENTER> once more to move on to the next step.
test-ES01
test-ES02
test-ES03
test-ES04
[관련 hostname이나 도메인 입력]
...
Is this correct [Y/n] [Y 입력]
## Which IP addresses will be used to connect to your nodes?
...
Enter all the IP addresses that you need, one per line.
When you are done, press <ENTER> once more to move on to the next step.
172.16.10.111
172.16.10.112
172.16.10.113
172.16.10.114
[관련 IP 주소 입력]
...
Is this correct [Y/n]Y
## Other certificate options
...
Do you wish to change any of these options? [y/N] [N 입력]
## What password do you want for your private key(s)?
...
If you wish to use a blank password, simply press <enter> at the prompt below.
Provide a password for the "http.p12" file: [<ENTER> for none] [http 인증서 패스워드 입력]
Repeat password to confirm: [패스워드 확인]
## Where should we save the generated files?
...
What filename should be used for the output zip file? [/usr/share/elasticsearch/elasticsearch-ssl-http.zip] [Enter 입력]
Zip file written to /usr/share/elasticsearch/elasticsearch-ssl-http.zip
http 인증서 확인
unzip elasticsearch-ssl-http.zip
Archive: elasticsearch-ssl-http.zip
creating: elasticsearch/
inflating: elasticsearch/README.txt
inflating: elasticsearch/http.p12
inflating: elasticsearch/sample-elasticsearch.yml
creating: kibana/
inflating: kibana/README.txt
inflating: kibana/elasticsearch-ca.pem
inflating: kibana/sample-kibana.yml
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: [패스워드 입력]
http 인증서 키 저장소 확인
bin/elasticsearch-keystore list
autoconfiguration.password_hash
keystore.seed
xpack.security.http.ssl.keystore.secure_password
xpack.security.http.ssl.truststore.secure_password
xpack.security.transport.ssl.keystore.secure_password
xpack.security.transport.ssl.truststore.secure_password
http 인증서 패스워드 확인
입력한 패스워드를 확인 할 수 있다.
경로 : /usr/share/elasticsearch
/bin/elasticsearch-keystore show xpack.security.http.ssl.keystore.secure_password
/bin/elasticsearch-keystore show xpack.security.http.ssl.truststore.secure_password
인증서 이동
생성된 인증서는 설정과 관리에 용이하도록 ES config 디렉토리에 복사한다.
경로 : /etc/elasticsearch/certs
기존인증서 삭제
rm -rf /etc/elasticsearch/certs/*
ca 인증서 이동
cp -arf /usr/share/elasticsearch/elastic-stack-ca.p12 /etc/elasticsearch/certs/
node 인증서 이동
cp -arf /usr/share/elasticsearch/es-node02/es-node02.p12 /etc/elasticsearch/certs/
http 인증서 이동
cp -arf /usr/share/elasticsearch/elasticsearch/http.p12 /etc/elasticsearch/certs/
ES configuration
경로 : /etc/elasticsearch/elasticsearch.yml
cluster.name: test-es-cluster
node.name: es-node02
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-ES02"]
cluster.initial_master_nodes: ["es-node02"]
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
- cluster.name : cluster 이름을 설정하며 node들은 cluster 이름이 같으면 같은 cluster로 묶일수 있다.
- node.name : ES node 이름.
- path.data : 색인 데이터의 저장 경로. ES 7버전 까지는 다중 경로 지정이 가능했지만 ES 8버전부터는 단일 경로만 가능하다. 즉 ES node 당 하나의 물리디스크를 연결하는 것으로 정책이 변경되는것 같다.
- path.logs : log 저장 경로.
- bootstrap.memory_lock : [true|false] ES가 사용하는 heap 영역을 간섭받지 않도록 미리 점유하는 설정.
- network.host : 바인딩되는 IP 주소로 직접 0.0.0.0 같은 주소 입력이 가능하지만 아래 변수 사용으로 편리하게 설정할 수 있다.
- _local_ : default 값으로 127.0.0.1,localhost 등 루프백 주소
- _site_ : 로컬네트워크(인터페이스) 주소
- _global_ : 네트워크 외부에서 바로보는 주소
- http.port : ES와 Client 간의 http 통신을 위한 port 번호로 9200번이 default 값이며 이미 점유 중인경우 9200 ~ 9299 사이의 값을 차례로 사용하게 된다.
- discovery.seed.hosts : cluster로 구성할 node를 명시하는 설정으로 IP나 도메인을 입력할 수 있다. 명시된 node를 찾아 가는 것을 discover 라고 한다.
- cluster.initial_master_nodes : cluster에서 master node 선출을 위한 node 들을 입력할 수 있다. 선출된 master node 가 장애일 경우 명시된 node 들에게서 다시 master node를 선출 하게 된다.
- xpack.monitoring.collection.enabled: [true|false] Kibana Stack Monitoring 활성화
bootstrap.memory_lock: true 옵션은 아래와 같은 에러를 유발한다.
[202...][ERROR][o.e.b.Elasticsearch ] [es-node02] node validation exception
[1] bootstrap checks failed. You must address the points described in the following [1] lines before starting Elasticsearch. For more information see [https://www.elastic.co/guide/en/elasticsearch/reference/8.14/bootstrap-checks.html]
bootstrap check failure [1] of [1]: memory locking requested for elasticsearch process but memory is not locked; for more information see [https://www.elastic.co/guide/en/elasticsearch/reference/8.14/_memory_lock_check.html]
해결을 위해 아래와 같은 설정을 추가 한다.
경로 : /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 옵션 설정
경로 : /etc/elasticsearch/jvm.options
-Xms8g
-Xmx8g
host의 물리메모리 절반의 값을 jvm 옵션으로 사용한다.
ES 서비스를 시작한다.
systemctl start elasticsearch
ES 사용자 계정 설정
ES 8.x 버전 부터 "elasticsearch-setup-passwords" 로 계정설정이 불가능하다.
대신 "elasticsearch-reset-password" 를 사용하여 계정 별 패스워드를 reset 할 수 있다. 패스워드는 자동으로 주어 진다.
경로 : /usr/share/elasticsearch
bin/elasticsearch-reset-password -u elastic
This tool will reset the password of the [elastic] user to an autogenerated value.
The password will be printed in the console.
Please confirm that you would like to continue [y/N]y
Password for the [elastic] user successfully reset.
New value: ***************************
New value 의 값을 패스워드로 사용 할 수 있다.
'Monitoring Tools > ELK Stack' 카테고리의 다른 글
[kibana] elasticsearch cluster에 kibana 붙이기 (0) | 2024.07.24 |
---|---|
[elasticsearch] cluster 구축하기(8.14.x, CentOS, xpack security) (2) | 2024.07.24 |
[elasticsearch] Query DSL(Domain Specific Language) (0) | 2024.07.04 |
[elasticsearch] document 관련 API(조회,추가,수정,삭제 등) (1) | 2024.07.01 |
[elasticsearch] Query DSL 관련성 점수(Relevance score) (0) | 2024.06.28 |