웹사이트 검색

Rocky Linux 8에서 Elasticsearch를 설치하고 구성하는 방법


소개

Elasticsearch는 데이터의 실시간 분산 검색 및 분석을 위한 플랫폼입니다. 사용성, 강력한 기능 및 확장성으로 인해 인기 있는 선택입니다.

이 문서는 Elasticsearch 8.x 설치, 사용 사례에 맞게 구성, 설치 보안 및 Elasticsearch 서버 작업 시작을 안내합니다.

전제 조건

이 자습서를 따르기 전에 다음이 필요합니다.

  • 루트가 아닌 sudo 사용자로 설정된 2GB RAM 및 2개의 CPU가 있는 Rocky Linux 8 서버. Rocky Linux 8을 사용한 초기 서버 설정에 따라 이를 달성할 수 있습니다.

Elasticsearch는 기본적으로 약 1GB의 RAM을 할당하므로 상대적으로 요구 사항이 높을 수 있으므로 메모리가 제한된 환경에서 스왑을 활성화해야 할 수도 있습니다. Elasticsearch 서버에 필요한 CPU, RAM 및 스토리지의 양은 생성하는 레코드 수에 따라 다릅니다.

1단계 - Elasticsearch 설치 및 구성

Elasticsearch를 설치하기 전에 사용 가능한 텍스트 편집기가 설치되어 있는지 확인하고 싶을 것입니다. Rocky Linux 8과 함께 제공되는 기본 텍스트 편집기는 vi입니다. vi는 매우 강력한 텍스트 편집기이지만 사용 경험이 부족한 사용자에게는 다소 둔감할 수 있습니다. Rocky Linux 8 서버에서 구성 파일 편집을 용이하게 하기 위해 nano와 같은 보다 사용자 친화적인 편집기를 설치할 수 있습니다.

  1. sudo dnf install nano -y

이제 Elasticsearch 설치를 진행할 수 있습니다. Elasticsearch 구성 요소는 Rocky의 기본 패키지 저장소에서 사용할 수 없습니다. 대신 Elasticsearch 프로젝트에서 유지 관리하는 리포지토리에서 참여할 수 있습니다.

모든 패키지는 패키지 스푸핑으로부터 시스템을 보호하기 위해 Elasticsearch 서명 키로 서명됩니다. 키를 사용하여 인증된 패키지는 패키지 관리자가 신뢰할 수 있는 것으로 간주됩니다. 이 단계에서는 Elasticsearch를 설치하기 위해 Elasticsearch 공개 GPG 키를 가져오고 Elastic 패키지 소스 목록을 추가합니다.

시작하려면 rpm 패키지 도구를 사용하여 elastic.co에서 키를 가져옵니다.

  1. rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch

다음으로 nano 또는 선호하는 텍스트 편집기를 사용하여 /etc/yum.repos.d/ 디렉터리에 elasticsearch.repo라는 파일을 만듭니다. , 패키지 관리자가 Elasticsearch 리포지토리에 연결할 수 있도록:

  1. sudo nano /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=0
autorefresh=1
type=rpm-md

파일의 gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch 부분은 패키지 관리자에게 다운로드한 키를 사용하여 Elasticsearch 패키지의 리포지토리 및 파일 정보를 확인하도록 지시합니다.

파일을 저장하고 닫습니다. nano를 사용하는 경우 Ctrl+X를 사용한 다음 메시지가 표시되면 Y를 누른 다음 Enter를 눌러 저장하고 종료할 수 있습니다.

마지막으로 dnf 패키지 관리자를 사용하여 Elasticsearch를 설치합니다.

  1. sudo dnf install --enablerepo=elasticsearch elasticsearch

설치를 확인하라는 메시지가 나타나면 y를 누르십시오.

Elasticsearch 설치 출력의 일부에는 보안 자동 구성 정보와 가장 중요한 자동 생성된 Elasticsearch 관리자 암호가 포함되어야 합니다.

Output
--------------------------- 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 : CH77_qG8ji8QCxwUCr3w

이 자습서의 뒷부분에서 사용할 암호를 기록하고 다른 Elasticsearch 사용자를 생성하는 데 필요합니다. 이제 Elasticsearch가 설치되었으며 구성할 준비가 되었습니다.

2단계 - Elasticsearch 구성

Elasticsearch를 구성하려면 대부분의 구성 옵션이 저장되어 있는 기본 구성 파일 elasticsearch.yml을 편집합니다. 이 파일은 /etc/elasticsearch 디렉터리에 있습니다.

nano 또는 선호하는 텍스트 편집기를 사용하여 Elasticsearch의 구성 파일을 엽니다.

  1. sudo nano /etc/elasticsearch/elasticsearch.yml

참고: Elasticsearch의 구성 파일은 YAML 형식이므로 들여쓰기 구문을 유지해야 합니다. 이 파일을 편집할 때 여분의 공백을 추가하지 않도록 하십시오.

elasticsearch.yml 파일은 클러스터, 노드, 경로, 메모리, 네트워크, 검색 및 게이트웨이에 대한 구성 옵션을 제공합니다. 이러한 옵션은 대부분 파일에 미리 구성되어 있지만 필요에 따라 변경할 수 있습니다. 이 단일 서버 구성을 위해 네트워크 호스트에 대한 설정만 조정합니다.

Elasticsearch는 포트 9200에서 모든 곳의 트래픽을 수신 대기합니다. Elasticsearch는 이제 기본적으로 인증을 요구하므로 Elasticsearch 8.x에서는 이전 버전만큼 문제가 되지 않습니다. 하지만 외부인이 데이터를 읽거나 [REST API](https://en.wikipedia.org/wiki/Representational_state_transfer)를 통해 Elasticsearch 클러스터를 종료하지 못하도록 Elasticsearch 인스턴스에 대한 외부 액세스를 제한해야 할 가능성이 높습니다. 액세스를 제한하려면 network.host를 지정하는 줄을 찾아 줄 시작 부분에서 #를 제거하여 주석을 제거한 다음 값을 localhost로 변경하여 다음과 같이 읽습니다.

. . .
# ---------------------------------- Network -----------------------------------
#
# Set the bind address to a specific IP (IPv4 or IPv6):
#
network.host: localhost
. . .

localhost를 지정하면 Elasticsearch가 모든 인터페이스 및 바인딩된 IP에서 수신 대기할 수 있습니다. 특정 인터페이스에서만 수신하도록 하려면 localhost 대신 해당 IP를 지정할 수 있습니다. elasticsearch.yml을 저장하고 닫습니다. nano를 사용하는 경우 Ctrl+X를 사용한 다음 메시지가 표시되면 Y를 누른 다음 Enter를 눌러 저장하고 종료할 수 있습니다.

다음은 Elasticsearch를 사용하기 위해 시작할 수 있는 최소 설정입니다. 이제 처음으로 Elasticsearch를 시작할 수 있습니다.

systemctl로 Elasticsearch 서비스를 시작합니다. Elasticsearch가 시작될 때까지 잠시 기다리십시오. 그렇지 않으면 연결할 수 없다는 오류가 발생할 수 있습니다.

  1. sudo systemctl start elasticsearch

그런 다음 다음 명령을 실행하여 서버가 부팅될 때마다 Elasticsearch가 시작되도록 합니다.

  1. sudo systemctl enable elasticsearch

시작 시 Elasticsearch를 활성화한 상태에서 다음 단계로 넘어가 보안에 대해 논의해 보겠습니다.

3단계 — Elasticsearch 보안

Elasticsearch는 HTTP API에 액세스할 수 있는 모든 사용자가 제어할 수 있습니다. localhost에서만 수신 대기하도록 Elasticsearch를 이미 구성했고 Elasticsearch 8+는 기본적으로 관리자 암호를 설정하기 때문에 이것이 반드시 보안 위험은 아닙니다.

HTTP API에 대한 원격 액세스를 허용해야 하는 경우 firewalld로 네트워크 노출을 제한할 수 있습니다. 포트 9200을 열거나 제한하는 방화벽 프로필 만들기 필수 구성 요소의 단계를 따랐다면 이 방화벽이 이미 활성화되어 있어야 합니다.

추가 보호에 투자하려는 경우 Elasticsearch에서 상업용 Shield 플러그인을 구매할 수 있습니다.

4단계 - Elasticsearch 테스트

이제 Elasticsearch는 포트 9200에서 실행되어야 합니다. curl을 사용하여 localhost:9200에 대한 표준 HTTP GET 요청을 만들어 테스트할 수 있습니다. Elasticsearch 8.x부터 Elasticsearch API에는 기본적으로 HTTPS 인증이 필요하므로 --cacert 인수를 사용하여 요청에 제공된 인증서를 포함할 수 있습니다. 마지막으로 -u elastic 인수를 포함하여 기본 관리자 사용자 이름인 elastic을 지정합니다.

  1. curl --cacert /etc/elasticsearch/certs/http_ca.crt -u elastic https://localhost:9200

설치 시 받은 관리자 비밀번호를 입력하라는 메시지가 표시됩니다. 인증 후 다음 응답을 받아야 합니다.

Output
{ "name" : "elasticrocky", "cluster_name" : "elasticsearch", "cluster_uuid" : "_hb4dLuuR-ipiloXHT_AMw", "version" : { "number" : "8.5.3", "build_flavor" : "default", "build_type" : "rpm", "build_hash" : "4ed5ee9afac63de92ec98f404ccbed7d3ba9584e", "build_date" : "2022-12-05T18:22:22.226119656Z", "build_snapshot" : false, "lucene_version" : "9.4.2", "minimum_wire_compatibility_version" : "7.17.0", "minimum_index_compatibility_version" : "7.0.0" }, "tagline" : "You Know, for Search" }

위와 비슷한 응답을 받으면 Elasticsearch가 제대로 작동하는 것입니다. 그렇지 않은 경우 설치 지침을 올바르게 따랐는지, Elasticsearch가 완전히 시작될 때까지 약간의 시간을 허용했는지 확인하십시오.

Elasticsearch를 보다 철저하게 확인하려면 _nodes 엔드포인트를 쿼리하고 쿼리 끝에 ?pretty를 추가하여 사람이 읽을 수 있는 텍스트 형식을 얻습니다.

  1. curl --cacert /etc/elasticsearch/certs/http_ca.crt -u elastic https://localhost:9200/_nodes?pretty
[secondary label Output]
{
  "_nodes" : {
    "total" : 1,
    "successful" : 1,
    "failed" : 0
  },
  "cluster_name" : "elasticsearch",
  "nodes" : {
    "7TgeSgV2Tma0quqd6Mw6hQ" : {
…

이렇게 하면 노드, 클러스터, 애플리케이션 경로, 모듈 등에 대한 모든 현재 설정을 확인할 수 있습니다.

5단계 - Elasticsearch 사용

Elasticsearch 사용을 시작하려면 먼저 일부 데이터를 추가해 보겠습니다. Elasticsearch는 일반적인 CRUD 명령(생성, 읽기, 업데이트 및 삭제)에 응답하는 RESTful API를 사용합니다. API에 데이터를 보내려면 curl을 다시 사용하지만 이번에는 GET 요청이 아닌 PUT을 수행합니다. -X PUT을 지정하고 -d를 사용하여 명령줄에 일부 JSON 형식 데이터를 포함합니다.

다음과 같이 첫 번째 항목을 추가할 수 있습니다.

  1. curl --cacert /etc/elasticsearch/certs/http_ca.crt -u elastic -X PUT "https://localhost:9200/test/_doc/1?pretty" -k -H 'Content-Type: application/json' -d '{"counter" : 1, "tags" : ["red"]}'

다음 응답을 받아야 합니다.

Output
{ "_index" : "test", "_id" : "1", "_version" : 1, "result" : "created", "_shards" : { "total" : 2, "successful" : 1, "failed" : 0 }, "_seq_no" : 0, "_primary_term" : 1 }

cURL을 사용하여 Elasticsearch 서버에 HTTP PUT 요청을 보냈습니다. 요청의 URI는 여러 매개변수가 있는 /test/_doc/1입니다.

  • test는 Elasticsearch의 데이터 인덱스입니다.
  • _doc는 유형입니다.
  • 1은 위 색인 및 유형 아래 항목의 ID입니다.

HTTP GET 요청으로 이 첫 번째 항목을 검색할 수 있습니다.

  1. curl --cacert /etc/elasticsearch/certs/http_ca.crt -u elastic -X GET "https://localhost:9200/test/_doc/1?pretty" -k -H 'Content-Type: application/json'

결과 출력이어야 합니다.

Output
{ "_index" : "test", "_id" : "1", "_version" : 1, "_seq_no" : 0, "_primary_term" : 1, "found" : true, "_source" : { "counter" : 1, "tags" : [ "red" ] } }

기존 항목을 수정하려면 HTTP PUT 요청을 사용할 수 있습니다.

  1. curl --cacert /etc/elasticsearch/certs/http_ca.crt -u elastic -X PUT "https://localhost:9200/test/_doc/1?pretty" -k -H 'Content-Type: application/json' -d '{"counter" : 1, "tags" : ["blue"]}'

Elasticsearch는 다음과 같이 성공적인 수정을 승인해야 합니다.

Output
{ "_index" : "test", "_id" : "1", "_version" : 2, "result" : "updated", "_shards" : { "total" : 2, "successful" : 1, "failed" : 0 }, "_seq_no" : 1, "_primary_term" : 1 }

위의 예에서 첫 번째 항목의 message를 "Hello, People!\로 수정했습니다. 이에 따라 버전 번호가 자동으로 2로 증가했습니다.

위의 요청에서 추가 인수 pretty를 발견했을 수 있습니다. 새 행에 각 데이터 필드를 쓸 수 있도록 서식 형식을 추가합니다. pretty가 없으면 Elasticsearch 출력이 줄바꿈이나 들여쓰기 없이 반환됩니다. API 통신에는 적합하지만 명령줄 출력에서 읽기는 더 어렵습니다.

이제 Elasticsearch에서 데이터를 추가하고 쿼리했습니다. 다른 작업에 대해 알아보려면 API 설명서를 확인하세요.

결론

이제 Elasticsearch를 설치, 구성하고 사용하기 시작했습니다. Elasticsearch의 기능을 자세히 알아보려면 공식 Elasticsearch 설명서를 참조하십시오.