elastic search 설치 및 사용법 : wsl2 ubuntu 22.04

Photo of author

By mimoofdm@naver.com

elastic search docker 를 wsl ubuntu 설치하는 방법에 관하여 자세하게 설명하고 실제로 설치한 후기를 전해드립니다. elastic search 를 Desktop PC에서 실행하면 메모리를 최소 8 GB 이상을 점유하므로 elastic search 모듈을 Ubuntu가 설치된 서버에 docker에서 동작 시키는 것이 편리합니다.

wsl ubunt 22.04 elastic search 설치 방법

Table of Contents

elastic search란

elastic search란 아파치 루신에서 파생된 분산형 검색엔진입니다. 검색을 하되 거의 실시간인 Non Real Time 검색을 하는 것을 특징으로 하는 검색엔진입니다.

elasticsearch는 RDBMS와 비슷하면서도 검색 성능이 더 빠르도록 인덱싱 및 샤딩 ( Sharding ) 와 Replica 로 구성되어 있습니다. 샤딩을 가지고 있는 점이 특이합니다.

샤딩은 데이터를 분산해서 저장하는 방법을 의미합니다. Replica 는 샤딩의 연장선상의 개념으로서 노드가 손실 되었을 때 샤딩을 복사하여 백업하는 구성요소를 의미합니다. 자세한 내용은 elasticsearch 홈페이지 내용을 참고하시기 바랍니다.

elastic search 를 ubuntu 22.04 서버에서 동작 시키는 이유

elastic search 를 ubuntu 22.04 서버에서 동작 시켜야 로컬 Desktop PC 의 CPU 성능과 메모리 자원을 전부 사용할 수 있습니다. elastic search 모듈을 Windows 10 의 docker에 로딩하여 사용하게 되면 로컬 Desktop PC의 성능이 매우 떨어지게 됩니다.

Elastic Search 기능을 Ubuntu 서버에서 동작 시키는 방법

elastic search 를 ubuntu 서버에서 이용하려면 일반적으로는 ubuntu 서버에 docker 를 설치한 후에 docker hub에 올라온 elastic search docker image 를 docker pull 명령어를 이용해서 가져와서 container 로서 동작시킵니다.

ubuntu 서버에 방화벽이 설치되어 있는 경우에는 ubuntu 서버의 터미널에서 docker pull 명령어를 실행하여 elastic search docker image 를 가져오려고 하여도 방화벽에 의해서 막혀서 직접 docker image 를 가지오지 못합니다.

Elastic Search 기능을 docker image 로 가져오는 방법이 있습니다. Windows 10 이 설치된 Desktop PC에서 elastic search docker image 를 docker hub 에서 docker pull 명령어를 실행하여 로컬 PC의 WSL 의 Ubuntu 터미널로 가져옵니다. 최신 elastic search docker image의 버전은 8.13.2 입니다.

docker pull elasticsearch:8.13.2

docker export “docker_image_name” > “docker_image_name”.tar 명령어를 실행하여 tar 압축 파일로 만듭니다.

docker export "<"docker_image_name"  > "docker_image_name".tar

실제로 제가 사용한 docker 이름은 “elasticsearch” 였습니다. Windows 10 에서 ubuntu 22.04를 사용하려면 wsl 이라는 Windows Subsystem Linux 를 설치하여야 합니다.

저는 elastic search image를 WSL에 로딩 시킨 후에 동작하고 있는 container 상태의 elastic search 의 container id 를 “docker ps” 명령어를 이용해서 확인합니다.

docker ps

docker export "container_id"

Docker에 elastic search image가 로딩 되어서 동작 중인 container는 여러 개가 생성될 수 있습니다. 각 container는 id 로 구분을 합니다. tar 파일을 만들 때에도 현재 동작 중인 elastic search container 의 id를 지정하여 tar 파일을 생성합니다. 저는 아래와 같은 명령어를 사용하여 tar 파일을 생성했습니다.

docker export 'container_id' > elasticsearch.tar

Windows 10 WSL 에 docker 설치하는 방법

windows 10 wsl 에 docker 를 설치하려면 가장 먼저 wsl 을 설치해야 합니다. WSL 이란 Windows 10 에서 Ubuntu를 사용하기 위해서 Windows 10에 설치하는 일종의 가상 머신입니다. WSL 은 버전 1과 버전2가 있는데 Windows 10 에서는 WSL2를 설치합니다. WSL2 설치 프로그램은 아래에서 다운로드 받을 수 있습니다.

WSL2 에 Ubuntu 수동 설치하는 방법

wsl2 에 ubuntu 를 수동으로 설치해야 하는 경우가 있습니다. 회사 네트워크와 정부 기관 네트워크는 방화벽으로 허가되지 않는 트래픽을 차단합니다.

Windows 10 에 내장되어 있는 Microsoft Store 에 올라와 있는 Ubuntu 22.04 설치 파일이 Microsoft 사에서 인증한 가장 안전한 소프트웨어 입니다. 그런데, 사내망에서 Microsoft Store 에 접속하지 못하는 경우가 많습니다.

wsl2 에 수동으로 ubuntu 이미지 파일을 다운받아서 wsl2 에서 실행되도록 할 수 있습니다. Ubuntu 이미지 파일은 WSL2 공식 사이트에서 다운을 받습니다.

power shell에서 wsl2 ubuntu를 실행하는 방법

power shell을 키보드에서 윈도우키를 눌러서 커맨드 입력창을 띄우고 수동으로 “power shell” 이라고 타이핑합니다. 윈도우바에 “Power Shell” 아이콘이 등장하면 마우스의 오른쪽 버튼을 클릭한 후에 “관리자 권한으로 실행하기”를 눌러줍니다.

Linux winodw subsystem 활성화 시키기

wsl2 설치를 진행하기 전에 windows 10 에서 linux 하부 시스템을 사용할 수 있도록 power shell에서 아래 커맨드를 실행하여 먼저 서비스를 활성화 시켜주어야 합니다.

windows 10 power shell 관리자 권한 실행
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart

직접 시행착오를 거치면서 테스트를 해보니까 windows 10 의 운영체제 버전은 22H2 이상에서 WSL 기능과 Hyper-V 가상화 시스템을 사용할 수 있었습니다.

windows subsystems linux 활성화

자신의 Windows 10 의 버전을 확인하려면 윈도우키를 누르고 커맨드를 입력할 수 있는 창에서 “winver”를 실행하여 window10의 버전을 확인할 수있습니다.

windows 10 가상 머신 활성화 시키는 방법

windows 10 기능 중에서 Hyper-V 기능을 활성화 시켜두어야 wsl 에서 docker를 비롯한 가상 머신들을 다룰 수 있게 됩니다. 아래와 같이 windows 설정 메뉴에서 “앱 및 기능”에 들어가서 오른쪽 상단에 “프로그램 및 기능” 이라는 링크를 클릭해 줍니다.

windows 프로그램 기능

아래 그림에서 왼쪽에 빨간색 박스로 표시한 “Windows 기능 켜기/끄기” 링크를 클릭합니다.

widnows 기능 켜기

아래 그림과 같이 “Windows 기능” 설정 메뉴에서 “Hyper-V”의 하위 기능인 “Hyper-V 관리 도구” 와 “Hyper-V 플랫폼” 을 체크하고, 그 아래에 있는 “Linux용 Windows 하위 시스템”을 체크한 후에 “확인”을 눌러줍니다.

windows 10 hyper-v 활성화

windows 10 에서 wsl 에 ubuntu를 설치하려면 가상 머신 기능을 활성화 시켜야 합니다. Powershell에서 아래의 명령어를 실행시켜 줍니다.

dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

Windows 10 용 linux 패키지 설치하기

powershell 명령어를 통해서 한번에 설치하는 명령어는 아래의 명령어로 설치된다고 합니다.

wsl --install

또는 

wsl --update

wsl –install 명령어로 ubuntu가 설치 되지 않는 경우에는 wsl2에서 linux subsystem package를 다운받아서 직접 설치해 주어야 합니다. msi 파일이므로 아래 링크에서 다운받은 파일을 관리자 권한으로 설치해 주시면 됩니다.

wsl2 linux subsystem linux update

Power shell이 관리자 권한으로 실행되면 아래의 명령어를 실행하여 wsl Ubuntu 22.04 를 실행시켜줍니다. 아래 명령어는 wsl 이라는 가상 머신 내부에서 Ubuntu라는 앱을 실행하라는 의미입니다.

wsl -d Ubuntu

wsl -t Ubuntu

위 명령어를 실행하였으나 아무런 변화가 일어나지 않았습니다. 추가로 아래의 wsl 명령어를 실행해야 실제로 windows 10 linux susbsystem 의 업데이트 동작이 시작됩니다.

wsl --update

WSL2 에서 elastic search 설치하는 방법

wsl2 에서 elastic search 를 설치하려면 먼저 wsl2 의 터미널에서 아래 명령을 실행하여 repository의 디렉토리 목록을 최신으로 업데이트 합니다.

windows 10 linux subsystem 설치 결과

wsl 버전을 wsl2로 변경하는 방법

Powershell 에서 wsl에 버전을 wsl2로 변경합니다.

wsl --set-default-version 2

Ubuntu 22.04 Image 다운로드 받는 방법

Microsoft Store에서 Ubuntu 22.04의 이미지를 다운로드 받아서 설치합니다.

다운로드 버튼을 누르면 Microsfot Store에서 다운로드 팝업 메뉴가 등장하면 “다운로드”를 클릭합니다.

windows 10 ubuntu 22.04 다운로드

ubuntu 22.04 실행
wsl2 ubuntu 22.04 install success

위 화면과 같이 windows 10 의 wsl2 에 ubuntu 22.04 가상 머신을 설치를 완료하였습니다.

wsl ubuntu 패키지 업데이트 및 업그레이드

wsl ubuntu 패키지의 목록을 업데이트 시킨 후에 업그레이드를 진행해야 합니다.

wsl 터미널에서 아래의 명령어를 실행하여 패키지 목록을 최신으로 업데이트합니다.

sudo apt update

최신 패키지 목록에서 기존에 설치된 패키지 보다 더 최신인 패키지들을 아래 명령어를 실행하여 업그레이드 합니다.

sudo apt upgrade

java jdk 설치하기

elastic search 패키지를 설치하기 위해서는 최신 java v17 jdk를 미리 설치하여야 합니다.

sudo apt install openjdk-17-jdk

elastic search 패키지 다운로드 및 설치 하기

elastic search 패키지를 wsl 의 터미널에서 아래 명령어를 실행하여 repository 에서 elasticsearch download 받습니다.

wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.14.0-amd64.deb

아래 명령어를 실행하여 elasticsearch download 받은 패키지를 WSL2 Ubuntu 22.04에 설치합니다.

sudo dpkg -i elasticsearch-7.14.0-amd64.deb

Elastic search 실행하는 방법

아래 명령어를 실행하여 elastic search를 sudo 권한으로 실행합니다. elastic search 를 start 시키고 부팅 후에도 자동으로 로딩되도록 enable 시킵니다.

sudo systemctl start elasticsearch
sudo systemctl enable elasticsearch

아래와 같이 elastic search 가 시작되었고 enable 되었음을 확인할 수 있습니다.

elastic search start

Elastic search 정상 동작 여부 확인 방법

크롬 브라우저의 주소에 아래 명령어를 실행합니다.

http://localhost:9200

크롬 브라우저에서 현재 동작하고 있는 Elastic Search 의 동작 현황을 볼 수 있습니다.

elastic search 동작 확인 방법

Elastic search 설정 변경 방법

elasticsearch.yml 파일에 설정된 항목 중에서 아래 명령어를 ubuntu 터미널에서 실행하여 설정에서 필요한 내용을 변경할 수 있습니다.

sudo nano /etc/elasticsearch/elasticsearch.yml

elastic search 를 이용하는 포트번호 9200 과 9300 번 포트만 허용하고 나머지는 막기 위해서 아래의 명령어를 실행해서 방화벽을 설치합니다.

sudo apt install ufw

부팅되면 자동으로 ufw 방화벽이 자동으로 실행되도록 설정합니다.

sudo ufw enable

포트번호 9200 번을 허용하며 포트번호 9300 번도 방화벽 차단을 제외시킵니다.

sudo ufw allow 9200
sudo ufw allow 9300

방화벽을 적용하기 위해서 elastic search 를 재시작시킵니다.

sudo systemctl restart elasticsearch

elasticsearch download 받아 docker에 설치하는 방법

elasticsearch 를 위와 같이 패키지로 설치하는 경우에는 Windows 10 WSL Ubuntu 22.04 환경 문제 또는 elasticsearch 버전이 맞지 않아서 실행이 실패하는 경우가 있습니다. 이 경우에는 docker image로 만들어진 elsaticsearch docker image 를 docker hub 에서 받아와서 WSL Ubuntu 22.04 터미널에서 동작시키면 에러도 발생하지 않고 깔끔하게 실행됩니다.

필요한 패키지 설치하고 아래 코드를 순차적으로 입력합니다.

sudo apt-get update



sudo apt-get install apt-transport-https ca-certificates curl gnupg-agent software-properties-common


Docker의 공식 GPG키를 추가합니다.


curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"


sudo apt-get update


sudo apt-get install docker-ce docker-ce-cli containerd.io


sudo systemctl status docker

sudo docker run elasticsearch
 




docker network create elastic

#elasticsearch docker image를 docker hub에서 elasticsearch download 받습니다.

docker pull docker.elastic.co/elasticsearch/elasticsearch:8.13.2


wget "https://github.com/sigstore/cosign/releases/download/v2.0.0/cosign-linux-amd64" 


sudo mv cosign-linux-amd64 /usr/local/bin/cosign 

sudo chmod +x /usr/local/bin/cosign


wget https://artifacts.elastic.co/cosign.pub
cosign verify --key cosign.pub docker.elastic.co/elasticsearch/elasticsearch:8.13.2

sudo docker run --name es01 --net elastic -p 9200:9200 -it -m 1GB docker.elastic.co/elasticsearch/elasticsearch:8.13.2

docker exec -it es01 /usr/share/elasticsearch/bin/elasticsearch-reset-password -u elastic

docker exec -it es01 /usr/share/elasticsearch/bin/elasticsearch-create-enrollment-token -s kibana

export ELASTIC_PASSWORD="your_password"


docker cp es01:/usr/share/elasticsearch/config/certs/http_ca.crt .


curl --cacert http_ca.crt -u elastic:$ELASTIC_PASSWORD https://localhost:9200

elasticsearch 정상 동작 여부 확인 방법

아래 코드를 실행하여 9200번 포트로 elasticsearch 가 docker에서 정상 동작하고 있는지 확인할 수 있습니다.

curl http://localhost:9200

만일 security 관련 에러가 발생한다면 password 가 설정되지 않았기 때문입니다. 아래의 코드를 실행하여 password를 설정해줍니다. 아래의 userpassword 는 큰따옴표로 묶어주거나 작은 따옴표로 묶어주면 안됩니다. 패스워드 자체를 그대로 입력해야 합니다.

export ELASTIC_PASSWORD=userpassword

docker elasticsearch docker 내부에 저장된 ca 인증서를 로컬 컴퓨터에 복사해 주어야 합니다. 아래 명령어를 실행하여 docker 내부의 elasticsearch 인증서를 로컬 환경으로 가져옵니다.

sudo docker cp es01:/usr/share/elasticsearch/config/certs/http_ca.crt .

elasticsearch가 정상 동작하는지 확인하기 위해서는 아래의 코드를 실행하여 https 프로토콜로 9200 번 포트에 접속이 가능한지 확인해봅니다.

curl https://localhost:9200

elasticsearch docker 인증서 복사 후 에러 해결 방법

위 명령어 실행 후에 아래와 같은 에러가 발생할 수 있습니다.

curl: (60) SSL certificate problem: self-signed certificate in certificate chain
More details here: https://curl.se/docs/sslcerts.html
curl failed to verify the legitimacy of the server and therefore could not
establish a secure connection to it. To learn more about this situation and
how to fix it, please visit the web page mentioned above.

curl 명령어가 ca 인증서 (ca certification) 을 가져오지 못해서 생기는 문제인 줄 알았는데 알고 보니까 기존에 Windows 10 WSL Ubuntu 22.04 로컬환경에 직접 elasticsearch 를 설치하면서 생성했던 패스워드와 지금 새롭게 elasticsearch docker container 내부에서 동작하는 elasticsearch 의 패스워드가 달라서 발생하는 문제였습니다.

elasticsearch docker container 패스워드 설정 방법

elasicsearch docker container 이름을 es01 이라고 설정하였습니다. elasticsearch docker container 에서 elasticsearch 검색엔진을 동작 시킬 것이므로 아래 명령어를 실행하여 패스워드를 다시 설정하였습니다.

sudo docker exec -it es01 /usr/share/elasticsearch/bin/elasticsearch-reset-password -u elastic

새로 생성된 패스워드를 전역변수인 ELASTIC_PASSWORD에 저장합니다.

export ELASTIC_PASSWORD=password

curl --cacert http_ca.crt -u elastic:$ELASTIC_PASSWORD https://localhost:9200

위 명령어를 실행하면 성공 시에는 아래와 같은 응답이 elasticsearch 로 부터 받게됩니다.

elasticsearch 동작 확인

elasticsearch 브라우저에서 정상 동작 확인하는 방법

브라우저에서 elasticsearch 가 정상 동작하고 있는지 확인하는 방법도 있습니다. 주소창에 https://localhost:9200 이라고 입력해줍니다. 아이디는 elastic 이라고 입력하고 패스워드는 위에서 ELASTIC_PASSWORD에 입력해 주었던 패스워드를 입력합니다.

elasticsearch 로그인

정상적으로 로그인이 성공하고 elasticsearch docker container 에서 응답이 오면 아래와 같이 브라우저에 표시가 됩니다.

elasticsearch 정상 동작 확인

elastic search 사용법

elastic search 사용법은 kibana 라는 앱의 Dev Tool 을 통해서 REST API 로 PUT, GET, DELETE , POST 메세지가 elasticsearch 엔진에게 전달되면 elasticsearch 엔진이 Response를 Kibana 앱의 Dev Tool 에게 전달해주는 방식으로 동작합니다.

elastic search query 구문은 4 종류의 메시지 ( PUT, GET, DELETE , POST ) 가 있습니다. 자세한 내용은 다음 포스팅인 Kibana 설치 방법 및 사용법 편에서 상세하게 다루도록 하겠습니다.

마무리

elastic search 를 Windows 10 의 WSL 에 설치하는 방법에 대해서 자세히 알아보았습니다. Elastic Search 는 vector search 를 할 때 가장 널리 사용되는 오픈소스 프로젝트 입니다. Elastic Search 검색 엔진은 kibana 라고 하는 UI 프로그램과 함께 사용해야 효율적입니다. 다음 글에서는 Windows 10 의 WSL Ubuntu 22.04 환경에서 kibana 를 설치하는 방법에 대해서 자세하게 살펴보겠습니다.

elasticsearch 설치 및 사용 시 자주하는 질문

docker run elastic search 에러 발생하는 경우에는 어떻게 하나요?

sudo docker run –name es01 –net elastic -p 9200:9200 -it -m 1GB docker.elastic.co/elasticsearch/elasticsearch:8.13.2

명령어를 실행하였는데 이미 es01 이 사용되고 있다는 에러가 나오는 경우가 있습니다. docker ps 로 현재 실행 중인 container를 확인해 보아도 아무것도 나오지 않는 경우에는 다음 명령어를 실행하여 container id를 삭제해 줍니다. 이때, 에러 문구에 문제를 발생 시킨 <container_id>가 표시되므로 참고하시면 됩니다.

sudo docker rm <container_id>