AWS EC2 리눅스 운영서버에 엘라스틱서치, 키바나 설치 방법

현재 엘라스틱서치 운영서버는 private 한 AWS VPC 망 내에 있어서 배스천서버를 통해야만 들어올 수 있기 때문에 인터넷 연결 및 yum 명령어 사용이 불가합니다.

그래서 윈도우로 엘라스틱서치 홈페이지에서 rpm 파일 다운 후 SFTP 업로드하는 방법을 이용하였습니다.

엘라스틱서치 운영서버 로드밸런서 생성 방법
https://0songha0.github.io/aws/2023-02-01-1


엘라스틱서치 설치 방법

엘라스틱서치 rpm 파일 업로드

엘라스틱서치, 키바나 rpm 파일을 가장 최신 버전인 8.3.3으로 다운받아 파일질라로 업로드 해주었습니다.

rpm 파일 확인

ll

업로드 한 경로에 rpm 파일이 있는지 확인합니다.

rpm 파일로 엘라스틱서치 설치

sudo rpm -i elasticsearch-8.3.3-x86_64.rpm

엘라스틱서치 방화벽 허용

firewall-cmd --permanent --zone=public --add-port=9200/tcp           -- 방화벽에 9200 포트 추가 
firewall-cmd --permanent --zone=public --add-service=elasticsearch   -- 방화벽에 엘라스틱서치 서비스 추가
firewall-cmd --reload                                                -- 방화벽을 다시 로드하여 변경된 설정 반영
firewall-cmd --list-ports                                            -- 포트 확인

방화벽에 엘라스틱서치 기본 포트 9200을 추가합니다.

AWS EC2 서버는 위 명령어 대신, 보안그룹 인바운드 규칙에서 0.0.0.0에 대해 9200 포트를 허용하면 됩니다.

배스천서버를 통하는 운영 AWS EC2 서버는 보안그룹 인바운드 규칙에서 로드밸런서 보안그룹에 대해 9200 포트를 허용하면 됩니다.

엘라스틱서치 실행

sudo systemctl start elasticsearch

실행 완료까지 조금 오래 걸릴 수 있습니다.

엘라스틱서치 실행 상태 확인

systemctl status elasticsearch

active (running) 이면 정상 실행된 것입니다.
CGroup 부분에서 엘라스틱서치 설치 경로 확인이 가능합니다. (/usr/share/elasticsearch)

엘라스틱서치 자동실행 설정

sudo systemctl enable elasticsearch

리눅스 재부팅 시 엘라스틱서치를 자동 실행하게 할 수 있습니다.

엘라스틱서치 정상 설치 확인

curl -X GET localhost:9200
또는
curl -X GET -u elastic localhost:9200

Empty reply from server라고 뜬다면 엘라스틱서치 최신버전이라 보안 설정이 되어있어서 인증서와 비밀번호가 필요한 것입니다.

엘라스틱서치 보안 설정 해제

sudo vi /etc/elasticsearch/elasticsearch.yml

엘라스틱서치 설정 파일의 일부 주석을 풀고 아래와 같이 수정합니다. (단일 노드 설정)

cluster.name: 프로젝트명-appliction # 클러스터명 통일
node.name: node-1 # 노드명 중복 불가
bootstrap.memory_lock: true # 물리 메모리 미리 할당 설정
network.host: 0.0.0.0 # IP 자동 할당
http.port: 9200 # REST API 포트. 충돌 방지를 위해 중복 불가
xpack.security.enabled : false # 보안 풀고 접속 가능 확인 후 다시 설정 예정

엘라스틱서치 재실행

sudo systamctl restart elasticsearch

설정파일 변경 후에는 재시작을 해야 반영됩니다.

보안설정 해제 후 curl 재시도 시 정상 메세지

{
  "name" : "node-1",
  "cluster_name" : "프로젝트명-application",
  "cluster_uuid" : "fm_XjxE1Ri-1fVXk0k~",
  "version" : {
    "number" : "8.3.3",
    "build_flavor" : "default",
    "build_type" : "rpm",
    "build_hash" : "801fed82df74dbe537f89b71b098ccaff88~",
    "build_date" : "2022-07-23T19:30:09.227964~",
    "build_snapshot" : false,
    "lucene_version" : "9.2.0",
    "minimum_wire_compatibility_version" : "7.17.0",
    "minimum_index_compatibility_version" : "7.0.0"
  },
  "tagline" : "You Know, for Search"
}

키바나 설치 및 엘라스틱서치 연동

rpm 파일로 Kibana 설치

sudo rpm -i kibana-8.3.3-x86_64.rpm

키바나 방화벽 허용

firewall-cmd --permanent --zone=public --add-port=5601/tcp
firewall-cmd --permanent --zone=public --add-service=elasticsearch
firewall-cmd --reload
firewall-cmd --list-ports

AWS EC2 서버는 위 명령어 대신, 보안그룹 인바운드 규칙에서 0.0.0.0에 대해 5601 포트를 허용하면 됩니다.

배스천서버를 통하는 운영 AWS EC2 서버는 보안그룹 인바운드 규칙에서 로드밸런서 보안그룹에 대해 5601 포트를 허용하면 됩니다.

kibana 설정파일 수정

sudo vi /etc/kibana/kibana.yml

아래처럼 주석해제 및 수정합니다.

server.port: 5601
server.host: "0.0.0.0" # 자동으로 외부 IP 바인딩
elasticsearch.hosts: ["http://localhost:9200"]

kibana 실행

sudo systemctl start kibana

kibana 자동실행 설정

sudo systemctl enable kibana

키바나 URL 접속

http://EC2서버IP:5601

키바나 실행 중에는 웹브라우저에서 키바나 화면을 볼 수 있습니다.
처음 접속 시 Explore on my own를 선택하면 됩니다.


엘라스틱서치 계정 보안 활성화

엘라스틱서치 보안설정 변경

sudo vi /etc/elasticsearch/elasticsearch.yml

아래와 같이 보안설정 변경 후 설정파일 반영을 위해 엘라스틱서치를 재시작합니다.

xpack.security.enabled: true # 엘라스틱서치 보안 기능 활성화

xpack.security.enrollment.enabled: true

xpack.security.http.ssl: # 외부 HTTP 통신 암호화
  enabled: false # 비활성화
  keystore.path: certs/http.p12 # 외부 HTTP 통신 인증서

xpack.security.transport.ssl: # 내부 노드 간 통신 암호화
  enabled: true # 엘라스틱서치 보안 기능 활성화 시 활성화 필수 (비활성화 실행 시 에러)
  verification_mode: certificate # 인증서 검증 방식: 기본적인 인증서 검증만 수행
  keystore.path: certs/transport.p12 # 내부 노드 간 통신 인증서
  truststore.path: certs/transport.p12 # 내부 노드 간 통신 인증서

엘라스틱서치 사용자 비밀번호 재설정

cd /usr/share/elasticsearch
sudo bin/elasticsearch-reset-password -u elastic

1. y를 눌러 elastic 유저의 비밀번호를 재설정합니다.
2. 새로운 비밀번호 (New value) 값을 따로 메모해둡니다.

sudo bin/elasticsearch-reset-password -u kibana_system

kibana_system 유저에 대해서도 비밀번호를 재설정합니다.

kibana 설정파일 수정

sudo vi /etc/kibana/kibana.yml

키바나 시스템에서 엘라스틱서치에 접근할 계정 정보를 아래처럼 주석해제 및 수정합니다.

elasticsearch.username: "kibana_system"
elasticsearch.password: "재설정한비밀번호"

계정 정보 변경 후 설정파일 반영을 위해 키바나를 재시작합니다.

키바나 화면 진입

재시작 후 약간의 시간이 지나면, 키바나 로드밸런서 DNS name 복사 후 웹에서 URL 요청 시 키바나 로그인 화면을 볼 수 있습니다.

Username elastic 입력
Password 재설정 했던 비밀번호 입력

위와 같이 입력 후 로그인하면 키바나 화면 진입 가능합니다.

엘라스틱서치 사용자 계정 생성 방법

키바나 좌측 메뉴 > Management > Security > Users > Create user

Username admin 입력
Password,
Confirm password
외울 수 있는 비밀번호 입력
Roles superuser 선택

위와 같이 입력하여 키바나 로그인, Java에서 요청 시 주로 사용할 admin 계정을 생성합니다.


엘라스틱서치 설치 후 할 일

1. Nori 형태소 분석기 설치
2. 동의어 사전 txt 파일 만들기
3. 동의어 사전, nori_tokenizer를 세팅한 범용 nori 인덱스 템플릿 생성


Nori 형태소분석기 설치 방법

인터넷 연결 불가 환경에서의 Nori 형태소 분석기 설치 방법입니다.

Nori 형태소분석기 설치 zip 파일 다운

https://artifacts.elastic.co/downloads/elasticsearch-plugins/analysis-nori/analysis-nori-8.3.3.zip?_gl=1*1n6chbs*_ga*MTkxMTYwOTc0Ny4xNjc1MTQwMjUy*_ga_Q7TEQDPTH5*MTY3NTMxMDk5NC42LjEuMTY3NTMxMTA4My4wLjAuMA..

윈도우에서 위 링크로 zip 다운 후 파일질라에서 SFTP로 User Home에 전송합니다.

zip으로 Nori 형태소분석기 설치

cd /usr/share/elasticsearch
sudo bin/elasticsearch-plugin install file:/home/유저명/analysis-nori-8.3.3.zip

설치 후에는 형태소분석기 사용을 위해 엘라스틱서치 노드를 재시작해야 합니다.

설치 성공 메세지

-> Installing file:/home/ec2-user/analysis-nori-8.3.3.zip
-> Downloading file:/home/ec2-user/analysis-nori-8.3.3.zip
[=================================================] 100%  
-> Installed analysis-nori
-> Please restart Elasticsearch to activate any plugins installed

설치 실패 메세지

Exception in thread "main" java.lang.IllegalArgumentException: Plugin [analysis-nori] was built for Elasticsearch version 8.6.1 but version 8.3.3 is running
        at org.elasticsearch.plugins.PluginsUtils.verifyCompatibility(PluginsUtils.java:85)
        at org.elasticsearch.plugins.cli.InstallPluginAction.loadPluginInfo(InstallPluginAction.java:853)
        at org.elasticsearch.plugins.cli.InstallPluginAction.installPlugin(InstallPluginAction.java:894)
        at org.elasticsearch.plugins.cli.InstallPluginAction.execute(InstallPluginAction.java:245)
        at org.elasticsearch.plugins.cli.InstallPluginCommand.execute(InstallPluginCommand.java:89)
        at org.elasticsearch.common.cli.EnvironmentAwareCommand.execute(EnvironmentAwareCommand.java:54)
        at org.elasticsearch.cli.Command.mainWithoutErrorHandling(Command.java:85)
        at org.elasticsearch.cli.MultiCommand.execute(MultiCommand.java:94)
        at org.elasticsearch.cli.Command.mainWithoutErrorHandling(Command.java:85)
        at org.elasticsearch.cli.Command.main(Command.java:50)
        at org.elasticsearch.launcher.CliToolLauncher.main(CliToolLauncher.java:64)

엘라스틱서치 버전과 Nori 형태소분석기 버전이 다를 경우 발생하는 에러입니다.

Nori 토크나이저 테스트

post _analyze
{
  "tokenizer": "nori_tokenizer",
  "text" : "형태소 분리 테스트, 오늘도 행복한 하루"
}

기본 standard 분석기는 띄어쓰기로만 한글을 분리하지만, Nori 분석기는 한글 형태소를 분석하여 분리합니다.

Leave a comment