본문 바로가기
카테고리 없음

ElasticSearch 설치

by aws-evan 2024. 5. 14.
반응형

 

 

 

  • 환경
    • Centos 7.9

 

 

 

  • 설치 경로
/usr/share/elasticsearch

 

  • ElasticSearch yaml 경로
/etc/elasticsearch/elasticsearch.yml

 

 

 

  • JVM 기반이라서 Java 설치
sudo yum install java-11-openjdk-devel
  • ElasticSearch RPM 등록
sudo rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
sudo vi /etc/yum.repos.d/elasticsearch.repo
  • ElasticSearch Repo 등록
[elasticsearch-8.x]
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

 

  • ElasticSearch 설치
sudo yum install elasticsearch

 

 

  • 기본 elasticsearch yaml 설정
    • 기본 설정(클러스터 이름, 로그경로, 데이터 경로,  외부 접속, 보안설정)
    • 이후에 추가 설명
# ======================== Elasticsearch Configuration =========================

# ---------------------------------- Cluster -----------------------------------
#
# Cluster 이름
cluster.name: ec-cluster
#
# # ------------------------------------ Node ------------------------------------
#
# Node 이름
node.name: node-1
#
# ----------------------------------- Paths ------------------------------------
#
# Data, Log 경로 지정
#
# ---------Default path---------
##Data
path.data: /var/lib/elasticsearch
##Log
path.logs: /var/log/elasticsearch/

#
# ----------------------------------- Memory -----------------------------------
#
# 힙메모리 영역을 다른 자바 프로그램이 간섭 못하도록 미리 점유하는 설정
#
#bootstrap.memory_lock: true
#
# ---------------------------------- Network -----------------------------------
#
# ElasticSearch 실행되는 서버 IP
network.host: 0.0.0.0

# ElasticSearch Port
http.port: 9200
#
# --------------------------------- Discovery ----------------------------------
#
# 클러스터 구성을 위해 바인딩 할 원격 노드(IP , 도메인)
#
discovery.seed_hosts: ["host1", "host2"]
#
# 클러스터가 최초 실행 될 떄 명시되는 노드
cluster.initial_master_nodes: ["node-1"]
#
# ---------------------------------- Various -----------------------------------
#
# Delete API를 통한 일괄 삭제 옵션(true = 불가능, false : 가능)
#
#action.destructive_requires_name: false

#----------------------- BEGIN SECURITY AUTO CONFIGURATION -----------------------
#

# 보안 설정(xpack)
# xpack : true -> security true 처리 필요
xpack.security.enabled: false
#xpack.security.transport.ssl.enabled: false

#xpack.security.enrollment.enabled: true


#----------------------- END SECURITY AUTO CONFIGURATION -------------------------

 

  • 서비스 기동시 인증서 에러 발생
    • 초기 설치시에 기존 yaml파일로 구성하게 되면 인증관련된 부분이 적용이 되었는지 정상 실행이 안됨
    • 위의 yaml 파일로 수정하고 기동시 생성된 keystore 파일 재생성
rm /etc/elasticsearch/elasticsearch.keystore
/usr/share/elasticsearch/bin/elasticsearch-keystore create

 

 

  • elasitcsearch 상태 체크
curl -X GET "localhost:9200/"

 

 


인증서 적용 단계

 

  • 공개키 생성
cd /usr/share/elasticsearch
./bin/elasticsearch-certutil ca
##인증서 이름
Please enter the desired output file [elastic-stack-ca.p12]:        

##인증서 패스워드
Enter password for elastic-stack-ca.p12 :

 

 

 

  • Certification 생성
1. certutil 사용 
./bin/elasticsearch-certutil cert --ca elastic-stack-ca.p12
Enter password for CA (elastic-stack-ca.p12) :  "공개키 패스워드"

2. Certification 파일 이름
Please enter the desired output file [elastic-certificates.p12]:

4. Certification 패스워드
Enter password for elastic-certificates.p12 :

  • 생성된 Certification

 

 

  • 인증서 복사
    • elasticseach yaml 파일 경로
cp elastic-certificates.p12 /etc/elasticsearch

 

  • yaml 파일 업데이트
    • 맨 하단에 추가 내용 추가(xpack 관련)
# ======================== Elasticsearch Configuration =========================

# ---------------------------------- Cluster -----------------------------------
#
# Cluster 이름
cluster.name: ec-cluster
#
# # ------------------------------------ Node ------------------------------------
#
# Node 이름
node.name: node-1
#
# ----------------------------------- Paths ------------------------------------
#
# Data, Log 경로 지정
#
# ---------Default path---------
##Data
path.data: /var/lib/elasticsearch
##Log
path.logs: /var/log/elasticsearch/

#
# ----------------------------------- Memory -----------------------------------
#
# 힙메모리 영역을 다른 자바 프로그램이 간섭 못하도록 미리 점유하는 설정
#
#bootstrap.memory_lock: true
#
# ---------------------------------- Network -----------------------------------
#
# ElasticSearch 실행되는 서버 IP
network.host: 0.0.0.0

# ElasticSearch Port
http.port: 9200
#
# --------------------------------- Discovery ----------------------------------
#
# 클러스터 구성을 위해 바인딩 할 원격 노드(IP , 도메인)
#
discovery.seed_hosts: ["host1", "host2"]
#
# 클러스터가 최초 실행 될 떄 명시되는 노드
cluster.initial_master_nodes: ["node-1"]
#
# ---------------------------------- Various -----------------------------------
#
# Delete API를 통한 일괄 삭제 옵션(true = 불가능, false : 가능)
#
#action.destructive_requires_name: false

#----------------------- BEGIN SECURITY AUTO CONFIGURATION -----------------------
#

# 보안 설정(xpack)
# xpack : true -> security true 처리 필요

xpack.security.enabled: true 
xpack.security.transport.ssl.enabled: true
xpack.security.transport.ssl.keystore.path: elastic-certificates.p12
xpack.security.transport.ssl.truststore.path: elastic-certificates.p12

#----------------------- END SECURITY AUTO CONFIGURATION -------------------------

 

 

  • 공개키 패스워드 저장
./bin/elasticsearch-keystore create

 

  • 패스워드 추가
./bin/elasticsearch-keystore add xpack.security.transport.ssl.keystore.secure_password
-> 공개키 비밀번호 입력

 

 

  • Keystore 리스트 확인
./bin/elasticsearch-keystore list

 

  • keyStore 패스워드 저장
./bin/elasticsearch-keystore add xpack.security.transport.ssl.truststore.secure_password
-> 공개키 비밀번호 입력

 

 

  • elasticsearch 서비스 재시작
systemctl start elasticsearch

 

 

 

 

  • 관리자 패스워드 생성
    • 기본 : elastic
./bin/elasticsearch-setup-passwords auto --verbose

 

  • 생성 될 경우 아래와 같이 임시 패스워드 생성됨
    • 보안상으로 기본 정보들은 삭제 처리
Changed password for user apm_system
PASSWORD apm_system = 

Changed password for user kibana_system
PASSWORD kibana_system = 

Changed password for user kibana
PASSWORD kibana = 

Changed password for user logstash_system
PASSWORD logstash_system = 

Changed password for user beats_system
PASSWORD beats_system = 

Changed password for user remote_monitoring_user
PASSWORD remote_monitoring_user = 

Changed password for user elastic
PASSWORD elastic =

 

 

  • kibana 연동을 위한 계정 생성
    • 8.X 버전으로 올라가면서 elastic 계정으로 보안성 연동이 불가능
    • elasticsearch API 를 통해 생성 가능
curl -u elastic:po2ZWFA5aKjHEts5wIYS -X POST "localhost:9200/_security/user/"사용할 계정명" -H "Content-Type: application/json" -d'
{
  "password" : "사용할 패스워드",
  "roles" : [ "kibana_system" ],
  "full_name" : "Kibana User",
  "email" : "kibana_user@example.com",
  "enabled": true
}
'

 

 

 


초기 설정으로 할 경우에는 로그 및 데이터가 /var 밑에 저장되는 부분이라서 추후에 데이터 공간 부족으로 인하여 별도의 데이터 저장소로 지정하여 사용이 필요

그러나 로그는 경로만 변경하면 이슈는 없지만, 데이터 부분에는 기존 데이터를 변경할 데이터 경로로 옮긴 후에 재시작을 해야함

 

아래 내용은 기존 로그, 데이터를 이동하기 위한 명령어

(centos 경로 별도 설치 해야함)

  • Data , Log 경로 변경
    • 기존 경로로 설정하여 운영하게 되면 로그 사이즈에 대한 이슈 발생!
    • NFS랑 별도 경로로 설정하여 수집하는 방향으로 관리해야 함.]
rsync -avh "출발지 경로" "목적지 경로"

 

 

 

반응형

댓글